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