Menu Tab nur für bestimmten Node Typ
am 08.02.2008 - 22:05 Uhr in
Hallo,
ich möchte ein Menü Tab nur bei einem bestimmten Node Typ (contrib mod biblio) anzeigen. Derzeit wird das Tab bei jedem Node angezeigt und zwar mit diesem Code:
if (!$may_cache) {
if (is_numeric(arg(1))) {
if (arg(0) == 'node') {
$items[] = array('path' => 'node/'. arg(1) .'/local_task',
'title' => t('Local Task'),
'callback' => 'local_task_page',
'access' => TRUE,
'type' => MENU_LOCAL_TASK
);
}
}Wie kann ich nun erreichen, daß das Tab nur bei biblio Nodes angezeigt wird? Aus dem Pfad ist der Node Typ nicht erkennbar, z.B.: /de/node/101
Eine erste Idee wäre den Typ mit hook_nodeapi, op "load" oder "view" zu checken und dann ein Flag mit variable_set zu setzen. Erscheint mir aber nicht sehr elegant. Möchte es möglichst ohne DB-Zugriff hinbekommen. Jemand eine Idee?
Gruß
G.
- Anmelden oder Registrieren um Kommentare zu schreiben

Mit dem Devil Modul solltest
am 08.02.2008 - 23:32 Uhr
Mit dem Devil Modul solltest du eigentlich alles erdenklich an Infos für diesen Node erhalten!
----------------------------------------
Alle Angaben ohne Gewähr!!:D
http://www.tobiasbaehr.de/
Devil == Devel?
am 09.02.2008 - 09:50 Uhr
Nehme an, Du meinst das Devel Modul? Damit bekomme ich natürlich die Infos. Aber wie komme ich im Code an die Infos?
Mein Code oben stammt aus der Implementierung von hook_menu, also:
function mymodule_menu($may_cache) {...
}
Wie kann ich innerhalb dieser Funktion den aktuellen Node Typ ermitteln?
access
am 09.02.2008 - 10:08 Uhr
Ich würde folgendes versuchen: dem Key "access" anstatt "TRUE" eine Funktion "is_bilio_contrib" übergeben, welche den Nodetypen prüft und einen Wahrheitswert zurückgibt. Die Prüfung selbst in dieser Funktion wäre wohl mit
<?php $node = node_load(arg(1)); ?>einzuleiten und $node->type dann abzufragen.Danke!
am 09.02.2008 - 12:08 Uhr
Funktioniert! Habe aber nicht den access key benutzt, sondern die Prüfung vor das Befüllen von items[] gestellt.
Allerdings führt node_load() ja auch zu einem DB-Zugriff. Schöner (weil perfomanter) wäre es natürlich ohne. Kann ich mir das aktuelle node object irgendwie holen, so ähnlich wie "globals $user"?
Re: Danke!
am 09.02.2008 - 19:11 Uhr
Allerdings führt node_load() ja auch zu einem DB-Zugriff.
Ja, manchmal. Pro Seitenaufruf wird jeder Node höchstens ein mal geladen. Weitere Aufrufe von
node_loadliefern lediglich eine Kopie des geladenen Nodes; dazu ist die statische Variable in der ersten Zeile da. Da der Node sowieso dargestellt wird, ist es also egal, ob du ihn lädst, oder jemand anderes.--
