Seite 1 von 1

Vertikale Sitemap als Liste

Verfasst: Di 5. Apr 2005, 16:14
von rzwei
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

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";
OUTPUT

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>";
?>         
Viel Spaß
Mathias

Verfasst: Do 7. Apr 2005, 23:06
von emergence
merci, wollte das sowieso in nächster zeit mal bauen...
wieder etwas zeit gewonnen ;-)

Aktuell angezeigte seite nicht verlinken?

Verfasst: So 17. Apr 2005, 17:15
von jotpe
Hi,
Ich habe mal Versuche unternommen, das script zu modifizieren, so dass die aktuell angezeigte Seite nicht als Link aufgeführt wird, sondern in Klammermn oder ausgegraut o.ä.

Wie kann ich denn innerhalb der sitemap() auf $idcat zugreifen? Habe schon mal global versucht aber das half nicht.

Oder hat jemand es schon mal angepasst?

Danke, Grüsse,
Jochen

Verfasst: So 17. Apr 2005, 22:49
von rzwei
Welchen Sinn sollte das denn machen?
Die aktuelle Seite ist die Sitemap und die kannst Du ja aus deinem Baum ausschliessen.
Oder suchst Du eine Navigation?

Gruß
Mathias

Verfasst: Mo 18. Apr 2005, 07:48
von jotpe
Die aktuelle Seite ist die Sitemap und die kannst Du ja aus deinem Baum ausschliessen.
Naja, damit erreiche ich aber nicht das gleiche. Oder?
Oder suchst Du eine Navigation?
Nein. – obwohl – vielleicht doch: Mann könnte dann ja auch dafür sorgen, dass der Baum, der nicht zur aktuellen Seite führt, nicht aufgefaltet wird.

Gruß, Jochen

Verfasst: Mo 18. Apr 2005, 09:52
von jotpe
Jetzt hab ichs, ging doch mit global.

@rzwei: Du hast mich auf eine Idee gebracht.
Mich stört es schon an den Navigationen, wenn die aktuell angezeigte Seite verlinkt ist. Das kann ich jetzt ja mal ändern.

gruß
jochen

Verfasst: Mo 25. Apr 2005, 13:38
von Dinkel
mit dem Modul werden doch nur Kategorien ausgegeben, oder? Ich möchte allerdings ach die Artikel in den Kategorien anzeigen lassen...

Verfasst: Mi 29. Jun 2005, 23:26
von i-fekt
^_^

Verfasst: Do 30. Jun 2005, 00:12
von rzwei
Was meinst Du mit korrekt verschachtelt?

Mathias