Sitemap, Index bzw. Inhaltverzeichnis für bestimmten Node
am 16.08.2006 - 11:28 Uhr in
Hallo zusammen,
leider gibts ja derzeit kein Modul welche, bei bestimmten Menuepunkt der ersten Hirachie Stufe eine Art Sitemap bzw. Inhaltsverzeichnis über die Untermenüpunkt anzeigt, deshalb entstand die untenstehend eigene Variante.
Grundlage hierfür war das Modul "Site Map" von Khalid Baheyeldin welches eine Sitemap für die ganze Page erzeugt. Bei unsere Lösung wurden die Funktion teilweise bearbeitet und anschließend umbenannt damit Sie nicht mit dem "Site Map" Module ins Gehege kommen und auch ohne diese funktionieren.
Damit über dem sogenannten Node Sitemap noch Text bzw. Inhalt von User eingefügt werden kann wird das ganze als Block realisiert welcher im Bereich Content nur bei ausgewählten Seiten angezeigt wird. Der Block hat das Input Format PHP Code und folgender Code wird dort eingetragen:
<?php
$strSql = "SELECT * FROM menu WHERE path = '". $_GET['q'] ."'";
$aryResult = db_query($strSql);
while ($aryRow = db_fetch_object($aryResult)) {
$intMid = $aryRow -> mid;
}
function fMenuTree($pid = 1, $menu = NULL) {
if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
foreach ($menu['visible'][$pid]['children'] as $mid) {
$children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
$menu_tree .= theme('menu_item', $mid, fMenuTree($mid, $menu), count($children) == 0);
}
}
if ($menu_tree) {
$output = '<ul class="tree">'. $menu_tree .'</ul>';
}
return $output;
}
function fNodeSiteMapMenu($intMid) {
$menu = menu_get_menu();
$title = $menu['visible'][$intMid]['title'];
$menu_display = fMenuTree($intMid, $menu);
$output = theme('box', $title, $menu_display);
return $output;
}
echo "<div class=\"block_nodesitemap\">".fNodeSiteMapMenu($intMid)."</div>";
?>
Jetzt braucht der Block nur aktiviert werden und die jeweiligen Hauptnodes, wo dieses Node Sitemap angezeigt werden soll, müssen bei "Page specific visibility settings" eingetragen werden, weil "Show block on specific pages" ja auf "Show on only the listed pages." steht.
Hinweis: Das ganze funktioniert nur mit Content wofür auch ein Menüpunkt im Menü angelgt wurde und z.B.: nicht für Books oder Taxonomy Content, welcher nicht im Menü auftaucht.
- Anmelden oder Registrieren um Kommentare zu schreiben
Der Code ist anfällig für
am 16.08.2006 - 13:53 Uhr
Der Code ist anfällig für SQL Injection-Angriffe.
Die Zeilen:
$strSql = "SELECT * FROM menu WHERE path = '". $_GET['q'] ."'";
$aryResult = db_query($strSql);
sollte lieber durch folgende ersetzt werden:
$aryResult = db_query("SELECT * FROM menu WHERE path = '%s'", $_GET['q']);
Siehe dazu auch: http://drupal.org/node/62304
--
Ramiro.org - Software-Entwickler und IT-Consultant
Torlaune.de - Die Fußball-Community
Danke für den Hinweis! Mir
am 16.08.2006 - 15:46 Uhr
Danke für den Hinweis! Mir ist gleich noch etwas aufgefallen, wenn nämlich Tabellen mit prefix genutzt werden funtz das ganze nicht mehr. Deswegen müsten die beiden ersten Zeilen:
$strSql = "SELECT * FROM menu WHERE path = '". $_GET['q'] ."'";
$aryResult = db_query($strSql);
ersetzt werden durch die folgende:
$aryResult = db_query("SELECT * FROM {menu} WHERE path = '%s' ", $_GET['q']);
So sollte es dann auch mit Prefix funktionieren.