Neues Modul: vpSitemap

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Neues Modul: vpSitemap

Beitrag von Dodger77 » Mo 11. Jul 2005, 10:56

Ich habe mich mal kurzerhand (weil es auch Anfragen in der Art gab) daran gesetzt und ein von mir schon seit einiger Zeit eingesetztes Modul soweit geändert, dass ich das hier auch mal veröffentlichen kann.

vpSitemap erstellt eine verschachtelte ungeordnete Liste, die mit etwas Geschick in CSS in jede Form gebracht werden kann.

Die Einbindung in Contenido ist denkbar einfach:

1. Neues Modul erstellen mit dem Input:

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :	    vpSitemap 0.1
* Author      :     Ingo van Peeren
* Copyright   :     Ingo van Peeren (ingo@van-peeren.de)
* Created     :     14-01-2005
* Modified    :     11-07-2005
* Credits     :     Nik Wyss & juergen@sotonic.de
************************************************/

$selected = "CMS_VALUE[0]"; 

?>
<table cellspacing="0" cellpadding="10" border="0"> 
  <tr valign="top"> 
    <td>Kategorie wählen:</td> 
    <td><? echo "<select name=\"CMS_VAR[0]\">";?> 
        <option value="0">---Alle---</option>
<?
// alle Kategorien auslesen 
$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"; 

// Query ausführen
$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 

  echo "<option";
  if ($selected == $db->f("idcat")) echo " selected=\"selected\"";
  echo " value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>"; 

} // end while 

?>
    </select> 
    </td> 
  </tr> 
  <tr> 
    <td>Anzahl Ebenen:</td> 
    <td><input type="text" name="<? echo "CMS_VAR[1]"; ?>" value="<? echo "CMS_VALUE[1]"; ?>"></td> 
  </tr>
  <tr>
    <td>Ebene "0" anzeigen:</td>
<?php
  echo "<td><INPUT TYPE=\"radio\" NAME=\"CMS_VAR[2]\" VALUE=\"1\"";
  if ("CMS_VALUE[2]" == "1") {
    echo "checked=checked";
  }
  echo "> ja
<input type=\"radio\" name=\"CMS_VAR[2]\" value=\"0\"";
  if ("CMS_VALUE[2]" == "0") {
    echo "checked=checked";
  }
  echo "> nein </td></tr>";
  echo "      </table>"; 
und dem Output:

Code: Alles auswählen

<?php 
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :	    vpSitemap 0.1
* Author      :     Ingo van Peeren
* Copyright   :     Ingo van Peeren (ingo@van-peeren.de)
* Created     :     14-01-2005
* Modified    :     11-07-2005
* Credits     :     Nik Wyss & juergen@sotonic.de
************************************************/

// CMS_VALUES initialisieren
$anzahlEbenen      = "CMS_VALUE[1]"; 
$startkategorie    = "CMS_VALUE[0]"; 
$ebeneNullAnzeigen = "CMS_VALUE[2]"; 

function vpSitemap($kategorie=0) 
{ 
  global $lang, $client, $cfg, $startkategorie, $anzahlEbenen, $ebeneNullAnzeigen; 
  $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=$kategorie
             AND level <= $anzahlEbenen
             AND C.visible=1 
           ORDER by A.idtree"; 
    $db->query($sql); 
    $treffer = $db->num_rows(); 
    if ($treffer) {
      if ($kategorie == $startkategorie) $result .= "<ul id=\"sitemap\">\n";
      else $result .= "<ul>\n";
    }
    while ($db->next_record()) 
    {  
      $lvl = $db->f("level"); 
      if (($lvl > 0) || ($ebeneNullAnzeigen)) $result.=  "<li><a href='front_content.php?idcat=".$db->f("idcat")."&lang=$lang&client=$client' title='Ebene ".$lvl.": ".$db->f("name")."'>".$db->f("name")."</a>".vpSitemap($db->f("idcat"), $lvl)."</li>\n";
      else $result.=  "<li>&nbsp;".vpSitemap($db->f("idcat"), $lvl)."</li>\n";
    } 
    if ($treffer) $result .= "</ul>\n";
    return($result); 
  } 
  
$sql = "SELECT
          level
        FROM
          ".$cfg["tab"]["cat_tree"]."
        WHERE
          idcat=$startkategorie"; 
$db->query($sql); 
$db->next_record(); 
$startEbene = $db->f("level"); 
$anzahlEbenen += $startEbene; 
if (($startkategorie==0) && ($ebeneNullAnzeigen)) $anzahlEbenen--;
echo vpSitemap($startkategorie); 
?>
2. In den Templates, wo das Modul verwendet werden soll, muss es bei dem entsprechenden Container angegeben werden.

3. In der verwendeten CSS-Datei die notwendigen CSS-Anweisungen anlegen. Die Liste der obersten Ebene hat die ID "sitemap". Damit sollte sich dann alles machen lassen.


Die jeweils aktuelle Version (inkl. Download und eine Demo) befindet sich unter:

http://www.contenido-tutorials.de/front ... p?idcat=65


Gruß und viel Spaß

Ingo

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

Beitrag von i-fekt » Mo 11. Jul 2005, 20:07

Hallo Ingo, sehr gutes Modul. Ich habe sie getestet und kann sie als valide und barrierefrei freigeben. ;)
Gruss,
Michael

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

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mi 13. Jul 2005, 10:04

Ich habe gerade ein Featurerequest zu dem Modul bekommen, das ich hier nicht vorenthalten möchte. Da kann man ja evtl. drüber diskutieren.
wäre es viel arbeit auch noch die artikel in die sitemap einzubauen?
vielleicht als schalter wie bei ebene 0 ?
Meine ersten Überlegungen dazu, insbesondere Fragen, die sich mir auf Anhieb stellen:
  • Sollen bei allen "Ästen" (also Kategorien ohne Unterkategorien) die Artikel mit angezeigt werden? Oder nur bei denen der untersten Ebene?
  • Das würde dann pro Kategorie eine Artikelliste bedeuten, dadurch könnte es zu Performanceproblemen kommen (viele Datenbankabfragen).
  • Es gibt in Contenido ja durchaus Verwendungsmöglichkeiten von Artikeln, die nichts mit einer Artikelliste (z.B. Newsübersicht) zu tun haben. Was soll dann angezeigt werden?
  • Was soll angezeigt werden, wenn viele Artikel (z.B. einige Dutzend) in einer Kategorie enthalten sind?

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

Beitrag von i-fekt » Mi 13. Jul 2005, 10:45

Meiner Meinung nach ist das absoluter Unsinn, aus den von dir genannten Gründen. Eine Sitemap ist ein Inhaltsverzeichnis der "Kapitel", da gehört keine Artikelauflistung rein. Eine Sitemap soll einen schnellstmöglichen Überblick geben pber alle Rubriken, nicht alle Artikel eine Website listen.

Wer echt Langeweile hat kann sich damit ja beschäftigen, aber Sinn macht dies auf jeden Fall nicht.
Gruss,
Michael

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

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mi 13. Jul 2005, 11:25

i-fekt hat geschrieben:Eine Sitemap ist ein Inhaltsverzeichnis der "Kapitel", da gehört keine Artikelauflistung rein. Eine Sitemap soll einen schnellstmöglichen Überblick geben pber alle Rubriken, nicht alle Artikel eine Website listen.
So sehe ich das auch.

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Mi 3. Aug 2005, 11:47

Ich sehe die Sitemap (Seitenübersicht) als Mittel jede Seite mit einem Klick zu erreichen. Das schafft nicht nur für den User Übersicht, das ist auch für google und Konsorten eine gute Anlaufstelle.

Technische Probleme sind sicher ein Grund, aber die Sinnfrage tangiert das meiner Meinung nach nicht.

Eine Möglichkeit für zukünftige Entwicklungen wäre in den Artikeleigenschaften eine Option aufzunehmen: In Sitemap aufnehmen. Das würde aber voraussetzen, dass Contenido von Hause aus eine Sitemap bereitstellt (als Modul) um die Kompatibilität zu wahren.

Viele Grüsse, Uwe

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

Beitrag von i-fekt » Mi 3. Aug 2005, 13:10

Aus oben aufgezählten Punkten ist das Unsinn, eine Sitemap zeigt Navipunkte und keine Inhalte, es ist ein Inhaltsverzeichnis und keine Artikelliste! In eine Sitemap gehört die Struktur, die Inhalte gehören in Rubriken.
Gruss,
Michael

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 3. Aug 2005, 14:37

Ähm, ich möchte gerne diese Thematik in eine klein wenig andere Richtung "drängen": @i-fekt: Grundsätzlich gebe ich Dir recht.

Ganz allgemein habe ich es mir abgewöhnt, Anforderungen anderer in Frage zu stellen. Wenn ich etwas nicht für sinnvoll halte, bemühe ich mich, Alternativen und deren (natürlich eindeutigen! :wink: ) Vorteile aufzuzeigen. Wenn sich dann an der Anforderung nix ändert (aus welchen Gründen auch immer) und ich kann ihr/ihm mit sinnvollem Aufwand helfen, helfe ich ihr/ihm.

Dieses gesagt, würde ich mich natürlich freuen, wenn jemand (ich habe gerade leider keine Zeit, der Newsletter-Bereich sollte schon längst fertig sein und Communido rückt näher) Uwe bzw. dem anderen Nutzer (anderer Thread) helfen könnte. Wenn es denn überhaupt geht.

Zur Sitemap-Kennung: Nette Idee, wäre in V4.6 vermutlich als Plugin realisierbar (die entsprechende Option könnte als zusätzliche Eigenschaft gespeichert werden). Allgemein würde ich aber sonst immer nur den Startartikel nehmen, denn der enthält ja dann entweder eine Artikelliste zur Kategorie oder (wohl) einen Link...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Mi 3. Aug 2005, 14:38

Hallo HerrB,

danke, dass Du es etwas differenziert siehst. Auch ich weiss, dass es nicht in jedem Fall sinnvoll ist, alle Artikel in der Sitemap einzubinden.

Für mich ist eine Artikelliste so etwas wie eine Navigation. Mit ihrer Hilfe ist es möglich komplexe Strukturen etwas aufzulösen und die eigentliche Hauptnavigation zu vereinfachen. Natürlich besteht die Möglichkeit diese Artikel auch als Strukturpunkt anzulegen und dann diese Ebene mit einer extra Navigation darzustellen. Ist ein Haufen Arbeit und der Strukturbaum wird nicht übersichtlicher.

Hier das Beispiel, um das es mir geht. Ihr könnt ja mal reinschauen. Dort setze ich die Artikellisten als Navigation ein. Der Vorteil ist, dass ich keine unterschiedlichen Hauptnavigationen brauche, mit der ich die jeweilige Ebene von der Hauptnavi abtrenne und eitgenständig darstelle. Da weiss nach einem halben Jahr keiner mehr bescheid. Naja, in Euren Augen missbrauche ich vielleicht diese Artikellisten, aber es ist halt praktisch so ...

http://www.tz-konstanz.de

Viele Grüsse, Uwe
Zuletzt geändert von Uwe am Mi 3. Aug 2005, 14:52, insgesamt 1-mal geändert.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 3. Aug 2005, 14:45

Bei einer gängigen Sitemap werden, da hat i-fekt schon recht, nur die Themenbereiche angezeigt (denn darin können sich 1000e Artikel befinden).

Es spricht aber sicherlich nix dagegen, eine "Sitemap eXtended" zu realisieren, wenn man es haben will und der Artikel-Umfang überschaubar ist ...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mi 3. Aug 2005, 14:57

So, ich mache dann auch nochmal mit. :wink:

Ich habe die Anfrage insbesondere deshalb hier reingestellt, da ich die Meinung anderer einholen wollte. Anscheined wollen (und evtl. brauchen) ja einige dieses Feature.

Technisch machbar ist das sicherlich, aber da wäre dann jeweils quasi eine eigene Artikelliste (der technische Teil ist ja ähnlich) je Kategorie notwendig. Das könnte man dann einfach in der Schleife einfügen. Aber die Performace würde (zumindest bei vielen Kategorien/Artikeln) wohl nicht so gut sein. Vielleicht geht auch eine wilde SQL-Abfrage, die alle relevanten Artikel und Kategorien auf einmal aus der DB holt. Die relevanten Artikel könnte man in der 4.5.3beta z.B. mit den Artikelspezifikationen kennzeichnen.

Ich habe nur leider gerade wenig genug Zeit und werde wohl so schnell nicht dazu kommen, dahingehend was umzusetzen.


Gruß

Ingo

rene04
Beiträge: 600
Registriert: Mo 10. Okt 2005, 12:28
Wohnort: Kaiserslautern
Kontaktdaten:

Beitrag von rene04 » Di 27. Dez 2005, 11:14

hallo,

habe das modul genau wie es oben steht eingebunden. leider bekomme ich keine ausgabe. css hab ich noch nicht eingebunden da ich nicht weiss was ich da einbinden soll. wie bekomm ich nun eine ausgabe?

gruesse rene

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Di 27. Dez 2005, 11:48

rene04 hat geschrieben:habe das modul genau wie es oben steht eingebunden. leider bekomme ich keine ausgabe. css hab ich noch nicht eingebunden da ich nicht weiss was ich da einbinden soll. wie bekomm ich nun eine ausgabe?
Hast du das Template (Kategorie bzw. Artikel) konfiguriert? Gibt es einen Link zum Anschauen?

rene04
Beiträge: 600
Registriert: Mo 10. Okt 2005, 12:28
Wohnort: Kaiserslautern
Kontaktdaten:

Beitrag von rene04 » Di 27. Dez 2005, 11:59

hallo,

seltsam, hatte soweit alles eingestellt. nur im artikel stand die ebene auf "NULL" und Ebene 0 anzeigen ebenfalls (NULL == leer). Habs eingestellt und siehe da, es geht.

Habe nun eine Baum-Listenansicht. Hätte das aber furchtbar gerne wie in dem Standartsitemapmodul von Contenido 4.6.4. Also Tabellarisch.

Leider hab ich von CSS nicht so den Plan im Sack. Kann mir da jemand weiterhelfen?

gruesse rene

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Di 27. Dez 2005, 13:12

rene04 hat geschrieben:Leider hab ich von CSS nicht so den Plan im Sack. Kann mir da jemand weiterhelfen?
Die Gestaltung per CSS ist bei diesem (und im Prinzip auch bei jedem anderen Modul) jedem selbst überlassen. Ich kann nur empfehlen CSS zu lernen:

Gesperrt