Wie kann ich ein Taxonomiemenü als Untermenü eines Standardmenüpunkts einfügen?

12

Ich habe ein Hauptmenü mit einer Struktur auf oberster Ebene, die der folgenden ähnelt:

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

Jeder dieser Top-Level-Links führt zu einer entsprechenden Knotenseite.

Ich habe ein Vokabular für Kategorien (mehrstufig) und muss diese Taxonomiebegriffe in einem Untermenü unter dem Punkt "Kategorien" abrufen. Ich möchte vermeiden, die Elemente im Hauptmenü fest zu codieren, da das Untermenü mit dem Wortschatz wachsen / schrumpfen sollte.

In der Vergangenheit habe ich zu diesem Zweck überaus aufwändigen Code geschrieben, der sich in Taxonomie-Operationen einfügt und die Unterelemente eines bestimmten Menüs auf dieser Grundlage verwaltet (sehr ähnlich dem, was Taxonomie-Menü tut, aber ohne für jedes ein anderes Menü haben zu müssen) Wortschatz).

Während diese Methode funktioniert, ist sie nicht ideal und schon gar nicht generisch. Ich kann diesen Code nicht einfach aus dem alten in das neue Projekt verschieben, da eine angemessene Anpassung erforderlich wäre.

Ich kann nicht anders, als zu glauben, dass es eine modulbasierte Standardlösung dafür geben muss.

Ich habe einige Vorschläge gesehen, wie man eine Reihe von verschiedenen Modulen in Kombination verwenden kann (sogar einige, die komischerweise die Verwendung von auf Ansichten basierenden Modulen vorschlagen). Ich bin offen für Vorschläge, aber wenn es darum geht, mehr als ein oder zwei Module zu installieren, und eine Menge fest codierter, kontextspezifischer Konfigurationen, wird es in diesem Fall wahrscheinlich nicht allzu viel helfen.

Clive
quelle
1
Ich glaube, ich habe es gesehen ... Ein ähnliches Thema enthält eine Idee zur Verwendung von Regeln zum Erstellen taxonomiebasierter Elemente im Menü, aber das scheint auch alles andere als ideal zu sein.
Mołot
Wenn ich richtig verstanden habe , sind Sie dieses Modul ähnlich aussehende drupal.org/project/taxonomy_treemenu , es mit schönen Menü integrieren können , aber für D6
Bala
Müssen Sie über aktuelle Menüelemente verfügen, oder kann der Baum der Taxonomiebegriffe beim Rendern zum Menü hinzugefügt werden?
Rooby
Danke @Bala, brauche aber eine D7-Lösung
Clive
1
Clive Ich habe einen Vorschlag. Wie ich weiß, können Sie Taxonomu-Menüs mit eingeschlossenem Vokabelnamen generieren und dann einfach andere Menü-Links direkt in das generierte Menü einfügen. Taxonomie-Elemente werden möglicherweise automatisch aktualisiert. Ich weiß nicht, ob es funktionieren wird. Probieren Sie es einfach aus.
Milkovsky

Antworten:

13

Option a) Wenn ich mich nicht irre, können Sie nicht einfach auswählen, wo Ihr Taxonomie-Menü bei der Erstellung übergeordnet werden soll (Menüposition)? Das einzige Problem, von dem ich glaube, dass Sie es damit zu tun haben, ist , dass Sie das Menü jedes Mal neu erstellen müssen, wenn die Taxonomie aktualisiert wird

Option b) Ich habe getan , was einigermaßen ähnlich wie diese auf meiner Seite, habe ich Menü Ansichten Modul, mir zu erlauben , einen Blick in mein primäres Menü zu setzen.

Wenn Sie eine neue Ansicht erstellen, die alle Ihre Taxonomiebegriffe als Blockanzeige auflistet, wenden Sie bei Bedarf zusätzliche Filterung / Änderung in der Ansicht an (möglicherweise nicht, aber in meinem Beispiel, das ich wollte). Wenn Sie dann Ihrem Hauptmenü einen neuen Link hinzufügen, können Sie festlegen, dass eine Ansicht anstelle eines Links verwendet wird. Wählen Sie von dort aus, welche Ansicht Sie verwenden möchten, wählen Sie den Menüpunkt "Kategorie" als übergeordnetes Element aus und speichern Sie ihn (nach dem Speichern müssen Sie ihn dann im Menü aktivieren, was ein Fehler mit dem Modul selbst zu sein scheint).

Ich kann nicht garantieren, dass dies die beste Lösung für Sie ist, aber es hat funktioniert, als ich es gerade getestet habe

Andrew Morris
quelle
1
Ja, es stellte sich heraus, dass ich ziemlich dumm war - Taxonomy Menu hat genau diese Funktionalität eingebaut (Ihre Option a). Das Menü, mit dem ich mich beschäftige, ist ziemlich klein, und die Kategorien ändern sich nicht oft, so dass die Neuerstellung kein Problem darstellt. Vielen Dank für den Sanity Check
Clive
3

Menupoly verfügt über eine API für benutzerdefinierte " Menübaumquellen ". Ich habe dies nie wirklich für etwas anderes als für Menü-Links genutzt, sodass es möglicherweise Probleme geben kann, die wir unterwegs beheben müssen. Aber die Grundarchitektur ist da.

Wenn Sie diesen Weg gehen, würden Sie

  • Verwenden Sie Ihr vorhandenes Hauptmenü ohne Taxonomie-Term-Links über die Seite "Kategorien" hinaus.
  • Erstellen Sie unabhängig davon Ihren Taxonomiebaum.
  • Schreiben Sie eine benutzerdefinierte "Menübaumquelle", die wie gewohnt aus menu_links abgerufen wird. Wenn jedoch ein Taxonomiebegriff gefunden wird, wird stattdessen die Taxonomie abgerufen.
    Sie müssen also in der Lage sein, zu erkennen, dass der Link "Kategorien" taxonomiebezogen ist.
  • Wenn ein Menülink taxonomiebezogen ist und gleichzeitig ein reguläres Untermenü enthält, müssen Sie die beiden Kindertypen irgendwie miteinander mischen.

Diese Route wäre etwas Arbeit, könnte aber für andere nützlich sein und ist wahrscheinlich eleganter und wiederverwendbarer als Ihre standortspezifische Logik.

Derzeit gibt es nicht einmal eine Taxonomie-reine "Menübaumquelle". Vielleicht wäre dies ein vernünftiger erster Schritt, bevor Sie mit einem gemischten Plugin beginnen.

donquixote
quelle
Vor diesem Hintergrund könnte die akzeptierte Antwort von Andrew Morris durchaus gut genug sein. Und es bedeutet weniger Arbeit für mich :) Wollte dies immer noch für jeden posten, der es nützlich finden könnte.
donquixote
Sehr interessant, danke. Die akzeptierte Antwort ist, dass ich meine Arbeit gut mache, aber ich bin sehr daran interessiert, auch Codelösungen zu bekommen. Kann ich davon ausgehen, dass eines Ihrer Module auf PSR-0 basiert? :)
Clive
Dieser verwendet den PHP 5.2-Kompatibilitätsmodus von xautoload, der PEAR ähnelt, jedoch mit flachen Verzeichnissen. Also nicht PSR genehmigt. Ich könnte eines Tages PSR-0 gehen ..
donquixote
obwohl ich sehr an PSR-X interessiert bin (was leider nie in D8
auftauchen
2

Metro Menus wird Ihre Anforderungen erfüllen und sogar die eingebauten Skins haben und können Ihre eigenen erstellen, die sich wie nette Menüs verhalten. Mit diesem Modul können Sie beliebige Unterelemente mit einer beliebigen Tiefe aus dem Menü oder der Taxonomie auswählen, und ich verwende diese zuvor nicht.

Kompatibilität mit Touchscreen (iPad, iPhone usw.).

Bildbeschreibung hier eingeben

Bala
quelle
2

Sie können dafür das Om Maxi-Menümodul verwenden . Der Administrator kann damit Menüs mit gewünschten Blöcken als Anhänge, Module wie Ansichten, Diaschau, Menü, Benutzer, nette Menüs, QuickTabs und benutzerdefinierte Blöcke mit Tabellen, Listen, Bildern, Videos usw. erstellen.

Sie können mit Taxonomy Menu ein separates Menü erstellen und dieses Menü als Unterlink zu dem von om maxi menu erstellten Menü anhängen.

Vielen Dank

Jayendra Kainthola
quelle
2

Ich habe kürzlich etwas Ähnliches für ein Produktkategoriemenü gemacht. Dies war nur für 1 Ebene tief, aber könnte leicht geändert werden, um weitere Ebenen anzuzeigen.

/**
 * 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;
}

Die Funktion get_category_menu ist als Block besser geeignet, wird hier jedoch der Einfachheit halber als andere Funktion in der template.php angezeigt.

Hoffe, es hilft oder ist zumindest ein Schritt in Richtung einer Lösung.

Paul

paul.linney
quelle