Vertikale Sitemap als Liste

Gesperrt
rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Vertikale Sitemap als Liste

Beitrag von rzwei » 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

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

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 7. Apr 2005, 23:06

merci, wollte das sowieso in nächster zeit mal bauen...
wieder etwas zeit gewonnen ;-)
*** make your own tools (wishlist :: thx)

jotpe
Beiträge: 4
Registriert: Sa 16. Apr 2005, 11:08
Kontaktdaten:

Aktuell angezeigte seite nicht verlinken?

Beitrag von jotpe » So 17. Apr 2005, 17:15

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

rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Beitrag von rzwei » So 17. Apr 2005, 22:49

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

jotpe
Beiträge: 4
Registriert: Sa 16. Apr 2005, 11:08
Kontaktdaten:

Beitrag von jotpe » Mo 18. Apr 2005, 07:48

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

jotpe
Beiträge: 4
Registriert: Sa 16. Apr 2005, 11:08
Kontaktdaten:

Beitrag von jotpe » Mo 18. Apr 2005, 09:52

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

Dinkel
Beiträge: 565
Registriert: Di 22. Mär 2005, 14:52
Kontaktdaten:

Beitrag von Dinkel » Mo 25. Apr 2005, 13:38

mit dem Modul werden doch nur Kategorien ausgegeben, oder? Ich möchte allerdings ach die Artikel in den Kategorien anzeigen lassen...

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » Mi 29. Jun 2005, 23:26

^_^
Zuletzt geändert von i-fekt am Fr 22. Okt 2010, 13:09, insgesamt 1-mal geändert.
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Beitrag von rzwei » Do 30. Jun 2005, 00:12

Was meinst Du mit korrekt verschachtelt?

Mathias

Gesperrt