PHP と MySQL を使用して無制限のレベルのメニューを構築する
Web サイト開発では、メニュー ナビゲーションはユーザー エクスペリエンスにおいて重要な役割を果たします。ただし、無制限のレベルのサブメニューをサポートするメニューを構築するのは困難な場合があります。 PHP と MySQL を使用してこの機能を実現するための包括的なアプローチを詳しく見てみましょう。
データベース構造とメニュー システム
あなたが言及したデータベース構造は、階層メニュー システム。各メニュー項目には、親子関係を確立するための親フィールドがあります。親 ID 0 はトップレベルのメニュー項目を示します。
トップレベルのメニューを取得しています
トップレベルのメニューを取得するための既存の PHP コードは正しいです:
<code class="php">$list = $obj->childmenu($parentid); foreach($list as $menu) { echo '<li><a href="#">'.$name.'</a></li>'; }</code>
サブメニューの存在と表示の識別
クエリの目的は、メニュー項目に子メニューがあるかどうかを識別し、そのリスト項目内に子メニューを表示することです。これを実現するには、SQL クエリと PHP コードを変更する必要があります。
最適化された SQL クエリ
単一の SQL クエリを使用して、次の順序ですべてのメニュー項目を取得できます。親 ID と位置:
<code class="sql">SELECT id, parent_id, title, link, position FROM menu_item ORDER BY parent_id, position;</code>
洗練された PHP コード
改訂された PHP コードには、現在のメニュー レベルを追跡するスタックが組み込まれ、ネストされたメニューの効率的な処理が保証されます。 :
<code class="php">$items = $query_results; // Assuming $query_results contains the result of the SQL query $html = ''; $parent = 0; $parent_stack = array(); foreach ( $items as $item ) { if ( !empty($item['parent_id']) ) { $children[$item['parent_id']][] = $item; } } while ( ( $option = each( $children[$parent] ) ) || ( $parent > 0 ) ) { if ( !empty( $option ) ) { if ( !empty( $children[$option['value']['id']] ) ) { $html .= '<li>' . $option['value']['title'] . '<ul>'; array_push( $parent_stack, $parent ); $parent = $option['value']['id']; } else { $html .= '<li>' . $option['value']['title'] . '</li>'; } } else { $html .= '</ul>'; $parent = array_pop( $parent_stack ); } } echo $html;</code>
この更新されたコードは、メニュー構造を効果的に処理し、ネストされたメニューの HTML マークアップを作成し、それらをそれぞれのリスト項目内に表示します。
以上がPHP と MySQL を使用して無制限のレベルのメニューを構築する方法: ステップバイステップ ガイド?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。