標準メニュー項目のサブメニューとして分類法メニューを挿入するにはどうすればよいですか?


12

メインメニューがあり、次のようなトップレベルの構造があります。

Home - Categories - Something Else - ... - Contact

これらのトップレベルリンクはそれぞれ、適切なノードページに移動します。

カテゴリ(複数レベル)の語彙があり、「カテゴリ」アイテムの下のサブメニューでそれらの分類用語を取得する必要があります。サブメニューはボキャブラリのように拡大/縮小するはずなので、アイテムをメインメニューにハードコーディングすることは避けたいです。

過去には、私は何に非常に似て(これを達成するために、オーバー精巧なコードを書かれた分類作業にフックいるとそれに基づいて特定のメニューのサブ項目を管理してきた分類メニューはありませんが、それぞれに異なるメニューを持ってすることなく、単語)。

この方法は機能しますが、理想的ではなく、一般的でもありません。そのコードを古いプロジェクトから新しいプロジェクトに持ち上げるだけでなく、合理的な量のカスタマイズが必要になります。

これには「標準」のモジュールベースのソリューションが必要だと感じずにはいられません。

私は、さまざまなモジュールを組み合わせて使用​​するためのいくつかの提案を見てきました(ビューベースのモジュールを使用することをお勧めするものもあります)。私はどんな提案も受け入れますが、1つまたは2つ以上のモジュールのインストールと、ハードコーディングされたコンテキスト固有の構成の負荷が関係する場合、おそらくこの場合はあまり役に立ちません。


1
私はそれを見たと思います... 同様のトピックには、ルールを使用してメニューに分類法ベースのアイテムを作成するというアイデアが含まれていますが、それも理想とはほど遠いようです。
モウォ

私が正しく理解していれば、このモジュールdrupal.org/project/taxonomy_treemenuのように似ていますか?素敵なメニューと統合できますが、D6
Bala

実際のメニュー項目が必要ですか、それともレンダリングされたときにメニューに分類用語のツリーを追加することが実行可能ですか?
ルービー

@Balaに感謝しますが、D7ソリューションが必要です
クライブ

1
クライヴ私は1つの提案があります。私が知っているように、語彙名を含むタクソノムメニューを生成し、生成されたメニューに他のメニューリンクを直接追加することができます。分類項目は自動的に更新される可能性があります...動作するかどうかはわかりませんが、試してみてください。
ミルコフスキー

回答:


13

オプションa)誤解がない限り、分類メニューを作成するときに、その分類メニューの親(メニューの場所)を選択することはできませんか?これであなたが得ると思う唯一の問題は、分類法が更新されるたびにメニューを再構築する必要があると思うことです

オプションb)私は自分のサイトでこれとかなり似たようなことをしました。メニュービューモジュールを使用して、メインメニューにビューを配置できるようにしました。

すべての分類用語をリスト表示する新しいビューをブロック表示として作成する場合、必要に応じてビューで追加のフィルタリング/変更を適用します(この例ではそうではないかもしれません)。次に、メインメニューに新しいリンクを追加するときに、リンクではなくビューを使用することを選択できます。そこから使用するビューを選択し、「Category」メニュー項目をその親として選択して保存します(保存後、メニューで有効にする必要があります。これはモジュール自体のバグのようです)

これがあなたにとって最善のソリューションであることを保証することはできませんが、テストしたばかりでうまくいきました


1
はい、私はかなり愚かだったことが判明しました-分類法メニューには、まさにこの機能が組み込まれています(オプションa)。私が扱っている特定のメニューは非常に小さく、カテゴリは頻繁に変更されないため、再構築は問題になりません。健全性チェックに感謝
クライブ

3

Menupolyには、カスタム「メニューツリーソース」用のAPIがあります。メニューリンク以外にこれを実際に使用したことはないため、途中で修正する必要がある問題がある可能性があります。しかし、基本的なアーキテクチャはそこにあります。

このルートに行けば、

  • 「カテゴリ」ページ以外の分類用語リンクなしで、既存のメインメニューを使用します。
  • それとは別に分類ツリーを作成します。
  • 通常どおりmenu_linksから取得するカスタム「メニューツリーソース」を記述しますが、分類用語が見つかると、代わりに分類から取得します。
    そのため、どういうわけか「カテゴリ」リンクが分類法に関連していることを検出できる必要があります。
  • メニューリンクが分類法に関連し、同時に通常のサブメニューがある場合、2つのタイプの子を何らかの方法で一緒に混在させる必要があります。

このルートはある程度の作業になりますが、他の人にとっては便利かもしれません。おそらく、サイト固有のロジックよりもエレガントで再利用可能です。

現在、分類のみの「メニューツリーソース」さえ存在しないので、混合プラグインで開始する前の合理的な最初のステップになるかもしれません。


これは言われていることですが、Andrew Morrisが受け入れた答えで十分に十分かもしれません。そして、それは私にとってより少ない仕事を意味します:)まだそれが有用であると思うだれでものためにこれを投稿したかったです。
ドンキホーテ

V.興味深い、ありがとう。受け入れられた答えは仕事をうまくやっていることですが、私もコードソリューションを取得することに非常に興味があります。それがすべてPSR-0の良さに基づいて構築されているモジュールの1つであると想定できますか?:)
クライブ

これはxautoloadのPHP 5.2互換モードを使用します。これはPEARに似ていますが、浅いディレクトリを持ちます。そのため、PSRは承認されていません。私はいくつかの日PSR-0を行くかもしれない...
donquixote

私は非常に(悲しいことに、D8に入ることはありませんかもしれません)PSR-Xに興味を持っていたが
donquixote

2

Metro Menusは要件を満たし、スキンが組み込まれていても、素敵なメニューのように機能する独自のスキンを作成できます。このモジュールを使用する、メニューまたは分類法から任意の深さの任意のサブ項目選択できますが、以前はこれを使用していません。

タッチスクリーン(iPad、iPhoneなど)との互換性。

ここに画像の説明を入力してください


2

同じためにOm Maxiメニューモジュールを使用できます。管理者は、添付ファイル、ビュー、スライドショー、メニューなどのモジュール、ユーザー、素敵なメニュー、クイックタブ、およびテーブル、リスト、画像、ビデオなどのカスタムブロックを含むブロックを含むメニューを作成できます。

Taxonomy Menuを使用して別のメニューを作成し、om maxi menuによって生成されたメニューへのサブリンクとしてこのメ​​ニューを添付できます。

ありがとう


2

私は最近、製品カテゴリのメニューに似たようなことをしました。これは1レベルの深さだけでしたが、さらにレベルを表示するように簡単に変更できました。

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

get_category_menu関数はブロックとしては良いですが、ここでは便宜上、template.phpの別の関数として示します。

それが助けになるか、少なくとも解決への一歩であることを願っています。

ポール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.