Die vpSitemap ist so wunderbar, dass ich sie gerne als Navigation mit immer aufgeklappten Unterkategorien einsetzen möchte.
Leider fehlt dafür die Kennzeichnung der aktuellen Kategorie.
Wie ich meine zu erkennen, findet im Code keine Abfrage nach der aktuellen Kategorie statt. Ich habe versucht, eine solche Abfrage einzubasteln, aber bislang ohne Erfolg. Und selbst, wenn es mir irgendwann gelingt ...
- es soll nicht übermäßig Systemlast erzeugen
- und es muss mehrsprachenfähig sein.
Ich vermute, dass das prinzipiell einfach sein müsste. Kann jemand Fähiges eine solche Codezeile bauen?
Ich bedanke mich für euern Gehirnschmalz.
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : vpSitemap 0.4
* Author : Ingo van Peeren
* Copyright : Ingo van Peeren (ingo@van-peeren.de)
* Created : 2005-01-14
* Modified : 2006-09-07
* Credits : Nik Wyss & juergen@sotonic.de
************************************************/
// Includes
cInclude("frontend", "includes/functions.navigation.php");
// CMS_VALUES initialisieren
$anzahlEbenen = "CMS_VALUE[1]";
$startkategorie = "CMS_VALUE[0]";
$ebeneNullAnzeigen = "CMS_VALUE[2]";
function vpSitemap($kategorie=0, $level)
{
global $lang, $client, $cfg, $startkategorie, $anzahlEbenen, $ebeneNullAnzeigen;
$db = new DB_Contenido;
$sql = "SELECT
*
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat=B.idcat
AND B.idcat=C.idcat
AND C.idlang='$lang'
AND B.idclient='$client'
AND B.parentid=$kategorie
AND level <= $anzahlEbenen
AND C.visible=1
ORDER by A.idtree";
$db->query($sql);
$treffer = $db->num_rows();
if ($treffer) {
if ($kategorie == $startkategorie) $result .= "\n" . str_repeat (" ", ($level * 4)) . "<ul id=\"sitemap\">\n";
else $result .= "\n" . str_repeat (" ", ($level * 4) + 4) . "<ul>\n";
}
while ($db->next_record())
{
$visible = checkCatPermission($db->f("idcatlang"),$db->f("public"));
if ($visible) {
$lvl = $db->f("level");
$result .= str_repeat (" ", ($lvl * 4) + 2);
if (($lvl > 0) || ($ebeneNullAnzeigen)) {
$result .= '<li><a href="front_content.php?idcat='.$db->f("idcat").'&lang='.$lang.'&client='.$client.'" title="' . mi18n("Ebene") . ' '.$lvl.': ' . $db->f("name") . '">' . $db->f("name") . '</a>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
}
else {
$result .= "<li> ".vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
}
}
}
if ($treffer) {
if ($kategorie == $startkategorie) $result .= str_repeat (" ", ($level * 4));
else $result .= str_repeat (" ", ($level * 4) + 4);
$result .= "</ul>\n";
$result .= str_repeat (" ", ($level * 4) + 2);
}
return($result);
}
$sql = "SELECT
level
FROM
".$cfg["tab"]["cat_tree"]."
WHERE
idcat=$startkategorie";
$db->query($sql);
$db->next_record();
$startEbene = $db->f("level") + 1;
$anzahlEbenen += $startEbene;
if ($startkategorie==0) {
if ($ebeneNullAnzeigen) $anzahlEbenen--;
$startEbene--;
}
echo vpSitemap($startkategorie, $startEbene);
?>