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