順不同リストにメニューを実装するのが慣例であり、現在のメニュー項目をアクティブにするには、
current active
クラスを追加します。
<li class="current active"> <a href="#link">Current link</a> </li>
実際、強調表示する必要があるリンクの主な2つのタイプを区別するのが慣例です。
- 現在のリンク(現在)-ユーザーが現在いるメニュー項目
- アクティブなリンク-ユーザーが現在いる現在のメニュー項目に対して親であるアクティブなメニュー項目
もちろん、Symfonyを使用する場合-アクティブなアイテムのハイライトを調整できる
KNPMenuBundle
を使用する機会がありますが、これを初めて行う場合は複雑に見えるかもしれません。 ただし、いくつかのレベルのネストのみを備えた単純なHTMLメニューがあり、
KNPMenuBundle
ようなOOPメニューに転送するのが
KNPMenuBundle
な場合は、現在のメニュー項目を強調表示するのに役立つActiveMenuItemBundleライブラリーをお勧めします。
このプロジェクトはオープンソースであり、 MITライセンスの下で配布されており、ダウンロードできます。
設置
Composerを使用して最新バージョンの
ActiveMenuItemBundle
をSymfonyプロジェクトにインストールする最も簡単な方法は次のとおりです 。
{ "require": { "bw/active-menu-item-bundle": "1.1.*@dev" } }
次に、バンドルを
app/AppKernel.php
登録し
app/AppKernel.php
。
public function registerBundles() { $bundles = array( // other bundles... new BW\ActiveMenuItemBundle\BWActiveMenuItemBundle(), );
使用する
Twigテンプレートで、アクティブなメニュー項目を決定するのに役立ついくつかの新しいフィルターと機能が利用できるようになりました。
メニュー項目のルートが現在のルートと一致するかどうかを確認するには、
is_active
フィルターを使用します 。
例1:
<li class="{{ 'route_name'|is_active }}"> <a href="{{ path('route_name') }}">Current link</a> </li>
ルートが一致する場合、フィルターは文字列
current active
を返します。
マルチレベルメニューの親アイテムの場合、現在のルートがその子サブポイントと一致したかどうかを確認するには、
is_active
関数を使用し、最初の引数で子ルートの配列を渡し、2番目の引数で特定のメニュー項目をルーティングします。
例2:
<li class="{{ is_active(['child_route_1', 'child_route_2'], 'parent_route') }}"> <a href="{{ path('parent_route') }}">Parent link</a> <ul> <li class="{{ 'child_route_1'|is_active }}"> <a href="{{ path('child_route_1') }}">Child link</a> </li> <li class="{{ 'child_route_2'|is_active }}"> <a href="{{ path('child_route_2') }}">Current link</a> </li> </ul> </li>
リンク
Current link
のルート
child_route_2
が
child_route_2
する場合、
current active
クラスがそれに割り当てられ、
active
クラスのみがparent_route
parent_route
その親に割り当てられます。
ルートの代わりにリクエストURIを使用する必要がある場合は、
is_active_uri
フィルターと
is_active_uri
関数を使用します。
is_active_uri
はまったく同じように機能し、リクエストURIを渡す必要があります。リクエストURIは、Symfonyボックスから提供される
path
関数によって生成できます。
例3:
<li class="{{ path('route_name')|is_active_uri }}"> <a href="{{ path('route_name') }}">Current link</a> </li>
デモ
デモ例を表示するには、 devモードの
app/config/routing_dev.yml
にルーティングをインポートする必要があります。
bw_active_menu_item: resource: "@BWActiveMenuItemBundle/Resources/config/routing.yml" prefix: /bw/demo/active-menu-item
次に、ビルトイン
php app/console server:run
モードで
php app/console server:run
し、アドレスに移動します
localhost:8000/bw/demo/active-menu-item/index
localhost:8000/bw/demo/active-menu-item/index
Twigテンプレートのデモコードを次に示します。
おわりに
私のバンドルが誰かに役立つならうれしいです。このツールは便利でシンプルで、小さなHTMLメニューに対して優れたパフォーマンスを発揮することがわかったと思います。 大きくて複雑なメニューではテストしていませんが、コード実行のシンプルさと速度に基づいて-うまくいくはずです。主なことは、ルートを使用する場所とリクエストURIを適切に決定することです(少し考えます)。
誰が気にかけているのか-フィルターと関数の操作を担当するコードは、長い間探しないようにするためのものです。
ご清聴ありがとうございました!
PS矢印は簡単に押すことができると思いますが、マイナスの場合はコメントで理由を説明してください。