Vertikale Sitemap als Liste
Verfasst: Di 5. Apr 2005, 16:14
Hallo,
nachdem ich nach langer Forumssuche keine vertikale Sitemap gefunden habe, die auf html-Listen beruht, poste ich hier ein entsprechendes Modul.
Formatierung der Listen ist mit CSS sehr leicht, so kann man mit z.B. ul ul {margin-left:15px} den zweiten Level einrücken.
Das Ganze basiert auf dem Modul von Nik Wyss.
INPUT
OUTPUT
Viel Spaß
Mathias
nachdem ich nach langer Forumssuche keine vertikale Sitemap gefunden habe, die auf html-Listen beruht, poste ich hier ein entsprechendes Modul.
Formatierung der Listen ist mit CSS sehr leicht, so kann man mit z.B. ul ul {margin-left:15px} den zweiten Level einrücken.
Das Ganze basiert auf dem Modul von Nik Wyss.
INPUT
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : Sitemap
* Author(s) : Jan Lengowski, Jose Rodriguez
* Copyright : Contenido - four for business, Jose Rodriguez
* Created : 15-08-2002
* Modified : 14-01-2003 by nik wyss
* Modified : 29-12-2003 by Sascha Benkart.
* - Adapt to Contenido V4.4
* Modified : 05-04-2005 by Mathias Rauh
- Output as <ul>
************************************************/
// selected category
$selected = "CMS_VALUE[0]";
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\" class=\"text_medium\">\n".
" <tr valign=\"top\">\n".
" <td>Kategorie wählen:</td>\n".
" <td>\n".
" <select name=\"CMS_VAR[0]\">\n".
" <option value='0'>---Alle---</option>\n";
// fetch all categorys
$query = "SELECT A.idcat, A.level, C.name 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 C.visible=1 ORDER BY A.idtree";
// execute query
$db->query($query);
// loop result and build the options
while ($db->next_record())
{
// indent spacer
$spaces = "";
// how many levels
$levels = $db->f("level");
for ($i = 0; $i > $levels; $i ++)
{
// add 2 spaces for every level
$spaces = $spaces . " ";
} // end for
if ($selected == $db->f("idcat"))
{
// selected category
echo " <option selected=\"selected\" value=\"".
$db->f("idcat") ."\">".
$spaces . $db->f("name") ."</option>";
}
else
{
// category
echo " <option value=\"".
$db->f("idcat") ."\">".
$spaces . $db->f("name") ."</option>";
} // end if
} // end while
echo " </select>\n".
" </td>\n".
" </tr>\n".
" <tr>\n".
" <td>Anzahl der Ebenen:</td>\n".
" <td>\n".
" <input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\">\n".
" </td>\n".
" </tr>\n".
" </table>\n";
Code: Alles auswählen
<style type="text/css">
ul li {margin-top:12px;}
ul ul li {margin-top:2px;}
</style>
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Sitemap
* Author(s) : Nik Wyss
* Copyright : None
* Created : 14-01-2003
* Modified : 14-01-2003
* Modified : 29-12-2003 by Sascha Benkart.
* - Adapt to Contenido V4.4
* - Output only shows visible items
* Modified : 05-04-2005 by Mathias Rauh
- Output as <ul>
************************************************/
$amountLevel = "CMS_VALUE[1]";
$newcat = "CMS_VALUE[0]";
function sitemap($newcat=0)
{
global $lang, $client, $amountLevel, $color, $startLevel, $cfg, $lvl_alt;
$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 =$newcat AND level <= $amountLevel AND C.visible=1 ".
"ORDER by A.idtree";
$db->query($sql);
$result = "";
while ($db->next_record())
{
$lvl = $db->f("level");
if ($lvl > $startLevel && $lvl != $lvl_alt) $result .= "<ul>\n"; //bei niedrigerem Level neue Liste beginnen
if ($lvl == $startLevel) $listyle = " style=\"font-weight:bold;\"";
$result .= "<li".$listyle."><a href=\"front_content.php?idcat=".$db->f("idcat")."\">".$db->f("name")."</a></li>\n".sitemap($db->f("idcat"));
if ($lvl < $lvl_alt) $result.= "</ul>\n"; //bei höherem Level Liste beenden
$lvl_alt = $lvl; // Level merken
} // end while
return($result);
}
$sql = "SELECT level FROM {$cfg["tab"]["cat_tree"]} WHERE idcat=$newcat";
$db->query($sql);
$db->next_record();
$startLevel = $db->f("level");
if ($startLevel == "") { // für ALLE KATEGORIEN
$startLevel = "0";
}
else {
$startLevel = $startLevel+1;
}
$lvl_alt = $startLevel;
$amountLevel += $startLevel;
if ($newcat==0) $amountLevel--;
echo "<ul>\n".sitemap($newcat)."</ul>";
?>
Mathias