Drupal 7:特定の領域にメニューブロックを配置したときに印刷されるメニュー構造を変更する方法を理解するのに苦労しています。
メニューをサイドバーに出力するときに、ulのクラスを変更します。
見つけることができるすべてのもの、およびすべてのメニューの構造を変更しようとする試みは、メニューを配置する場所に応じて異なる方法で印刷する必要があります。
また、可能であれば、地域に配置するすべてのメニューで機能するようにする必要があります。私はサイトのさまざまな領域のメニューを作成しますが、メニューが配置されている領域に基づいてこれが機能することを願っています。
ありがとうございました
私はこれにいくつかの答えを与え、それをTwitter Bootstrapテーマに基づいています。あなたのコメントがonirioに戻ったからです。同じテーマを使用して同じ問題がありました。
クラス名を一度変更するだけの場合(そのように聞こえないので、2番目の回答-しばらくお待ちください)、Twitter_bootstrap/template.phpの関数「Twitter_bootstrap_preprocess_page」にアクセスできます。そこには、次のような構成要素があります。
$variables['primary_nav'] = theme('Twitter_bootstrap_links', array(
'links' => $variables['main_menu'],
'attributes' => array(
'id' => 'main-menu',
'class' => array('nav'),
),
簡単に言うと、「nav」をあなたが望むものに変更してください。それはどこでもそれを変えるでしょう。私がやったようにして sub-theme にし、実際のTwitter Bootstrapテーマではなく、それを変更することをお勧めします。
2番目の答え:
もっと面白いことをしたい場合は、代わりに前述のコードが使用されている場所を検討してください。これは、includes/modules/theme.inc内の「Twitter_bootstrap_Twitter_bootstrap_links」関数で使用されます。これらの変数を使用した関数が表示されます。
links = $variables['links'];
$attributes = $variables['attributes'];
...
$output .= '<ul' . drupal_attributes($attributes) . '>';
したがって、さらに凝ったものにしたい場合は、ulのビルド方法を変更する必要があります。それは、別のよりターゲットを絞った質問を調査または投稿することによって提供される可能性がありますか?この場合も、サブテーマでこれを行うのが最善です。
各リージョンにはすでにクラスがあるため、新しいクラスを変更したり追加したりする必要はありません。最初にリージョンクラス名を追加して、スタイルシートの各メニュークラス()を具体的に参照する必要があります。
#region-menu ul.menu li {display: inline...}
#region-sidebar-first ul.menu li {display: block...}
etc...
干渉しないことを確認してください。
継承を避けるために、メインメニューに#region-menuとして一意の参照があることを確認してください。
あなたはTwitter BootstrapのCSS構造を強力に武装させてDrupalに組み込むのに苦労するでしょう。メニューツリー構造を構築するDrupalの関数(ULへの追加を含む)は、メニューがどこに配置されるかを完全に認識していません。このような他の多くの状況に遭遇すると思います。
1つのオプションは、カスタムモジュールを作成し、コードで各メニューを手動でビルドすることです。メニュー構造を構築するには、APIで利用可能な関数を利用するのではなく、データベースクエリを記述する必要があります。例としてカスタムメニュー構造が必要なcontribモジュールを確認できます。 Superfish および MegaMen は適切なガイダンスを提供します。
私が提案するオプションは、Twitterの独自のフォークを維持することですBootstrapあなたのDrupalサイト用にカスタマイズされたコード。これを行うためにgitを利用する場合、カスタマイズのパッチがあれば、Twitterのコードの今後の更新で問題が発生することはないはずです。