Yii2でアプリをナビゲートする苦痛を軽減する







良い一日! 私たちがYii2で作成するプロジェクトのほとんどは、クールであり、大好きだからです。

ただし、改善すべき点が常にあります(この利点はYiiアーキテクチャによって妨げられません)。 Yii2のアプリケーションでのナビゲーションの処方を簡素化するソリューションを共有したいと思います。







問題



アプリケーションにページを追加するとき、(コントローラーとビューを作成した後に)次のことを規定する必要があります。















「別のページ」では太字ではありませんか? 最悪の部分は、これらすべての点を忘れずに念頭に置いておく必要があるということです。 そして、プロジェクトのナビゲーションが変化し始めた場合、何かを壊すのがさらに簡単になります。ほとんどの場合、パン粉を忘れてしまい、機能しなくなります。







解決策



アプリケーションのどのページも一般的なサイトマップに含める必要があると想定しました。 そのため、ページに関する包括的な情報(「問題」セクションの段落を参照)を使用してそのようなサイトマップを(マルチレベルツリーの形式で)作成すると、ページの追加はサイトマップで1か所で説明することになります! そこに見出し、リンクの権利と規則を登録できます。また、サイトマップを使用すると、パンくずやsitemap.xmlを簡単に取得できます。







したがって、コンポーネント[MegaMenu]()が取得されました。これはhabrasocietyを表しています。







設置



コンポーネントはComposerを介してインストールされます。







 $ composer require ExtPoint/yii2-megamenu
      
      





次に、アプリケーション構成にコンポーネントを追加する必要があります。







アプリケーションコンポーネントとして:







 'components' => [ 'megaMenu'=> [ 'class' => '\extpoint\megamenu\MegaMenu', 'items' => [ // You sitemap [ 'label' => '', 'url' => ['/site/index'], 'urlRule' => '/', ], ... ], ], ... ],
      
      





アプリケーションを起動する前にロードします(ルールをUrlManager



に追加するUrlManager



):







 ... 'bootstrap' => ['log', 'megamenu'], ...
      
      





API



APIコンポーネントはYii2に可能な限り近い場所で作成され、多くの場合、1対1で繰り返されます。







ページ記述形式(パラメーター\extpoint\megamenu\MegaMenu::items





ほとんどの\yii\bootstrap\Nav::items



、各アイテムは\yii\bootstrap\Nav::items



のナビゲーションジョブの形式に対応します。各アイテムには、 label



url



visible



active



encode



items



options



linkOptions



ます。 各アイテムは配列として定義され、そこから\extpoint\megamenu\MegaMenuItem



クラスのインスタンスが作成されます。

以下に、 \yii\bootstrap\Nav::items



ない新しく導入されたパラメーターをリストし\yii\bootstrap\Nav::items











コンポーネントメソッド\extpoint\megamenu\MegaMenu







アイテム検索ロジック



2つのアイテムを比較するためのロジックは、 \extpoint\megamenu\MegaMenu::isUrlEquals



実装されています。 2つの文字列を比較してリンクを比較します。

ルートはもう少し複雑に比較されます。最初に正規化され(モジュール、コントローラー、アクションを示す完全なルートが取得されます)、次にルートのみが比較されます。 ルートが一致する場合、パラメーターが比較されます。

パラメータがnullと異なる場合、そのキーと値の両方が比較されます。 値がnullとして指定されている場合、これは任意の値が存在できることを意味し、キーの存在のみが比較されます。

例:











MegaMenuがインストールされた小さなWebアプリケーションの例は、テストフォルダーにあります。









さて、これは実際のプロジェクトでは機能しません!









ただし、あります。 MegaMenuはすでにいくつかの大規模プロジェクトで使用されています。 私たちのプロジェクトでは、機能を常にモジュールに分割し、MegaMenuはこれに抵抗しません。

このような内訳の例とより現実的な例は、 定型文で見ることができます。 ピースのメニューは、 モジュールまたはコントローラーから組み立てられます







藤堂



コンポーネントはまだ開発中です。近い将来に期待されるいくつかの機能を次に示します。









終了



最後まで読んだ/葉っぱをくれたすべての人に感謝します。 提案や要望はaffka@affka.ruに書いてください







GitHubにスターを付ける-ExtPoint / yii2-megamenu







みなさん、良い一日を!








All Articles