Drupal: so stellen Sie die aktive Menüpunkt dynamisch
Ich habe zum Beispiel "node/31". Und ich will drupal auf Menü aktive Element "Galerien/lastgallery" wenn node/31 angezeigt wird. Wie es zu tun?
<?php
function custom_nodeapi (&$node, $op, $a3 = NULL, $a4 = NULL){
if ($op == 'view' && $node->nid == 31) {
???
}
}
?>
Aktualisiert:
Ich weiß, dass ich verwenden können menu_set_active_item
. Aber in diesem Fall tabs (Ansicht/Bearbeiten usw. tabs) werden nicht angezeigt. Ich glaube, dass es getan werden sollte, mit menu_set_active_trails
oder möglicherweise menu_get_item
/menu_set_item
irgendwie, aber ich kann nicht herausfinden wie genau.
InformationsquelleAutor iflamberg | 2010-06-21
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für ähnliche Zwecke verwendete ich
menu_set_item()
. Lassen Sie die$path
argumentNULL
und verwenden Sie den Menüpunkt für den internen Pfad der'galleries/lastgallery'
als$router_item
.In der Tat aber menu_tree_set_path() wurde in Drupal 7, die Frage ist für Drupal 6.
InformationsquelleAutor Pierre Buyle
Als tmsimont wies darauf hin, mit
menu_set_item()
hat Nebenwirkungen...Einen kurzen Blick auf menu_set_item() und menu_get_item() zeigt uns, dass Sie trigger-Haken und Datenbank-Aufrufe (). Nicht perfekt.
Wenn Sie mit Drupal 7.9+, es gibt eine neue Funktion namens
menu_tree_set_path()
, wird den trick tun:Das erste argument ist die Menü-name gefolgt von dem Pfad, den Sie auswählen möchten.
HINWEIS: Dies gilt nicht für die
.active
Klasse, aber gilt.active-trail
statt, so dass Sie müssen aktualisieren Sie Ihre CSS, um Platz für die beiden!!Um Aliase verwenden, könnten Sie möglicherweise wickeln Sie den Pfad, in
drupal_get_normal_path()
, zB:menu_tree_set_path('my-menu', drupal_get_normal_path('<front>'))
. Lassen Sie mich wissen, wenn es funktioniert und ich werde zu aktualisieren, die Antwort.InformationsquelleAutor jmlnik
Ich weiß, ich bin ein bisschen spät im Spiel hier und dieser hat bereits eine Antwort, aber ich dachte, ich würde post dies für den Fall es jemand hilft
Mit Bezug auf das problem der menu_set_item(NULL, $menu_item) das töten von lokalen Aufgaben - es ist nicht auf diese beschränkt.
Fand ich, dass wenn mit dem diskutieren Modul nicht laden Sie den block. Ich denke, das Problem ist, dass, indem Sie so etwas wie:
Ihnen effektiv sagen, drupal, du bist auf einer anderen Seite/Position.
Die Lösung, die für mich gearbeitet wurde:
Dies scheint nur spielen, mit dem href und lassen Sie rest allein also die lokalen Aufgaben noch arbeiten und so hat disqus.
InformationsquelleAutor Chris
Ich bin mir nicht sicher, wenn Sie wollen, um das aktive Element zu beeinflussen, welche Seite geladen wird (was müsste getan werden, früh in die Seite laden, um einen Unterschied zu machen), oder wenn Sie wollen einfach nur oberflächlich highlight "Galerien/lastgallery" - link, als ob es der aktive link.
Wenn Sie nur wollen, um es scheinen, als ob die "Galerien/lastgallery" link wird aktiv, dass kann man durch überschreiben der template_preprocess_page() Funktion. Dort können Sie neu erstellen der primären (oder sekundären) Menü und Logik hinzufügen, geben Sie dem link "Galerien/lastgallery" die "aktiven" (und/oder "active-trail") - Klasse.
InformationsquelleAutor James An
War ich in der Lage, etwas zu erreichen, verhält sich zu dem, was Sie versuchen zu tun, indem eine Kombination von menu_set_active_item() und
menu_execute_active_handler()
Es dauerte eine kleine Weile, um zu realisieren, dass ich brauchte beide. Ich war mit einem benutzerdefinierten Menü-handler zu erstellen, die "clean-urls" von Solr filter-Kombinationen. die $path-variable ist, die internen drupal-Pfad, den ich Verstecke, und die Menü-handler ist das, was der user sieht in seinem browser.
Dann habe ich custom_url_rewrite_outbound() konvertieren alle relevanten such-links auf der Website, um das format, das ich wollte.
Unten sind die relevanten Teile des Codes. Ich bin mir nicht sicher, ob das ist was du suchst, aber es könnte Ihnen einige Ideen. Ich war beeindruckt, wie viel konnte man kontrollieren, was der Benutzer gesehen und was Drupal bewusst war, intern. Die richtigen Menüpunkte aktiv waren, und alles andere funktionierte wie erwartet.
InformationsquelleAutor mirzu
Können Sie versuchen, diese:
InformationsquelleAutor geo
mongolito404 Antwort fast für mich gearbeitet.
ABER es tötet die lokalen Aufgaben (tabs)
ALSO aus irgendeinem Grund funktioniert es wenn Sie rufen Sie die Aufgaben, bevor Sie das tun, was mongolito404 sagte zu tun... so wie hier:
InformationsquelleAutor tmsimont
Können Sie auch
hook_translated_menu_link_alter()
InformationsquelleAutor nanbatman