Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Startart.

Gesperrt
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Startart.

Beitrag von derSteffen »

Hallo Community,

ich nutze eine Sitemap als DropDown-Menü. Das klappt auch wunderbar. Allerdings klickt der Benutzer ja oft nur auf den letzten Menüpunkt eines Klap-Auf-Menüs und selten auf ein obergeordneten Punkt, deswegn kann man diese oft leer lassen, aber was ist wenn doch jemand raufklickt! Zur Zeit löse ich das mit einen leeren Artikel mit einer Weiterleitung zur nächsten gewünschten Kategorie.

z.B. So stelle ich mir das vor:
Punkt 1
Punkt 2
Punkt 3
Punkt 4 -------------> Hier ist kein Artikel hinterlegt und somit soll der Startartikel der "Punkt 4.1" aufgerufen werden, da hier der erste Startartikel drin ist von einer der untegordneten Kategorien!
Punkt 4.1
Punkt 4.2
Punkt 4.3
Punkt 5

Ist es möglich das man sagen kann, wenn in dem Menüpunkt kein Artikel angelegt ist (sondern nur eine Kategorie), dann rufe aus der ersten untergordneten Kategorie die ein Startartikel hat, diesen Startartikel auf?

Code: Alles auswählen

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

// Includes
cInclude("frontend", "includes/functions.navigation.php");

// CMS_VALUES initialisieren
$anzahlEbenen      = "5";
$startkategorie    = "1";
$ebeneNullAnzeigen = "2";

function vpSitemap($kategorie=0, $level)
{
  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 .= "\n" . str_repeat (" ", ($level * 4)) . "<ul class=\"dropdown\">\n";
      else $result .= "\n" . str_repeat (" ", ($level * 4) + 4) . "<ul class=\"roundbordermenue\">\n";
    }
    while ($db->next_record())
    {
       
      $visible = checkCatPermission($db->f("idcatlang"),$db->f("public"));
      if ($visible) {       
            
        $lvl = $db->f("level");
        $result .= str_repeat (" ", ($lvl * 4) + 2);
        if ($lvl == 1) {
          $result .= '<li class="id'.$db->f("idcat").' ebene'.$lvl.'"><a href="front_content.php?idcat='.$db->f("idcat").'&lang='.$lang.'&client='.$client.'">' . $db->f("name") . '</a>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
        else if ($lvl > 1) {
          $result .= '<li><a href="front_content.php?idcat='.$db->f("idcat").'&lang='.$lang.'&client='.$client.'">'. $db->f("name") . '</a>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
        else {
          $result .= "<li>&nbsp;".vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
      }
    } 
    if ($treffer) {
      if ($kategorie == $startkategorie) $result .= str_repeat (" ", ($level * 4));
      else $result .= str_repeat (" ", ($level * 4) + 4);
      $result .= "</ul>\n";
      $result .= str_repeat (" ", ($level * 4) + 2);
    }
    return($result);
  }

$sql = "SELECT
          level
        FROM
          ".$cfg["tab"]["cat_tree"]."
        WHERE
          idcat=$startkategorie";
$db->query($sql);
$db->next_record();
$startEbene = $db->f("level") + 1;
$anzahlEbenen += $startEbene;
if ($startkategorie==0) {
  if ($ebeneNullAnzeigen) $anzahlEbenen--;
  $startEbene--;
}
echo "<div id=\"menue\">";
echo vpSitemap($startkategorie, $startEbene);
echo "</div>";
?>
Für tipps wäre ich sehr dankbar.

Vielen Dank

MfG Steffen
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derju »

Hallo Steffen

Momentan gibt es von Contenido aus die Überprüfung ob der Navigationspunkt leer, wenn ja springt er auf die Fehlerseite.

Man könnte die Abfrage erweitern das man abfrägt ob es eine unter Kategorie gibt die einen Standard-Artikel definiert hat.

LG, derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von Spider IT »

Hallo Steffen,

warum umgehst du das Problem nicht, indem du die Verlinkung beim Navigationspunkt der oberen Ebene verhinderst, wenn dieser Unterpunkte hat?

Gruß
René
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derSteffen »

Vielen Dank für die beiden Hinweise!

Der Ansatz von René ist natürlich naheliegend ... dann werde ich mich mal dahinter klemmen.

Danke nochmal!

MfG Steffen
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derSteffen »

Mal ne Frage!

Muss ich mein SQL-Abfrage dafür erweitern?

Ich dachte ich könnte mit so etwas arbeiten:

Code: Alles auswählen

$is_start = '1'
also sowas in etwa:

Code: Alles auswählen

if (($lvl == 1) AND ($is_start = '1'))  
Aber dann werden mir gar keine Links mehr angezeigt.

Wobei komischerweise in meine con_cat_art überall 0 steht in der "is_start".

Vielen Dank

MfG Steffen
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derSteffen »

AH :-)

Das Gehemnis ist

Code: Alles auswählen

$db->f("startidartlang")
MfG
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von Spider IT »

Die Angabe is_start ist veraltet, seit Contenido 4.8 gibt es die Angabe startidartlang.
Bei Seiten, die aus älteren Versionen upgraded wurden, kann die alte Version noch aktiv sein.

Gruß
René
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derSteffen »

Hallo René,

dank für den Hinweis:

Anbei der Code der Sitemap die ich für ein Dropdown-Menü benutze. Der Vorteil, mit CSS kann hier eine Menge gemacht werden.

- Bei <UL> die nicht die Startkategorie ist (also alle untergeordneten UL) wird die Ebene (also Level) und die Parent-ID als CSS-Klasse reingeschrieben
- Bei allen <LI> werden Ebene (Level) und die jeweilige IDCAT als CSS-Klasse reingeschrieben
- Hat eine Kategorie keinen Startartikel, wird der Menüpunkt zwar angezeigt aber es wird kein Link dargestellt

Die angelegten CSS-Klassen:
ul.ulebene für Level
ul.ulparentid für ParentID
li.id für IDCAT
li.ebene für Ebene

- Was ich nicht geschaft habe, ist das man auch bei der <UL> die Idcat ausgibt.

Code: Alles auswählen

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

// Includes
cInclude("frontend", "includes/functions.navigation.php");

// CMS_VALUES initialisieren
$anzahlEbenen      = "5";
$startkategorie    = "1";
$ebeneNullAnzeigen = "2";

function vpSitemap($kategorie=0, $level)
{
  global $lang, $client, $cfg, $startidartlang, $idcatlang, $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 .= "\n" . str_repeat (" ", ($level * 4)) . "<ul class=\"dropdown\">\n";
      else $result .= "\n" . str_repeat (" ", ($level * 4) + 4) . "<ul class=\"untermenuepunkte ulebene$level ulparentid$kategorie\">\n";
    }
    while ($db->next_record())
    {
       
      $visible = checkCatPermission($db->f("idcatlang"),$db->f("public"));
      if ($visible) {       
            
        $lvl = $db->f("level");
		$hatstartartikel = $db->f("startidartlang");
        $result .= str_repeat (" ", ($lvl * 4) + 2);
		// Hat Startartikel und wenn Ebene = 1 ist
        if (($lvl == 1) AND ($hatstartartikel != 0))  {
          $result .= '<li class="id'.$db->f("idcat").' ebene'.$lvl.'"><a href="front_content.php?idcat='.$db->f("idcat").'&lang='.$lang.'&client='.$client.'">' . $db->f("name") . '</a>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
		// Hat keinen Startartikel und Ebene = 1 ist
		else if (($lvl == 1) AND ($hatstartartikel == 0))  {
          $result .= '<li class="id'.$db->f("idcat").' ebene'.$lvl.'"><span class="keinlink">' . $db->f("name") . '</span>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
		// Hat Startartikel und wenn generell Ebene groesser als 1 (kann man also auch fuer jede Ebene individuell gestalten)
        else if (($lvl > 1) AND ($hatstartartikel != 0)) {
          $result .= '<li class="id'.$db->f("idcat").' ebene'.$lvl.'"><a href="front_content.php?idcat='.$db->f("idcat").'&lang='.$lang.'&client='.$client.'">'. $db->f("name") . '</a>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
		// Hat keinen Startartikel UND Wenn generell Ebene groesser als 1 (kann man also auch fuer jede Ebene individuell gestalten)
		else if (($lvl > 1) AND ($hatstartartikel == 0)) {
          $result .= '<li class="id'.$db->f("idcat").' ebene'.$lvl.'"><span class="keinlink">'. $db->f("name") . '</span>' . vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
        else {
          $result .= '<li class="id'.$db->f("idcat").' ebene'.$lvl.'">&nbsp; '.vpSitemap($db->f("idcat"), $lvl) . "</li>\n";
        }
      }
    } 
    if ($treffer) {
      if ($kategorie == $startkategorie) $result .= str_repeat (" ", ($level * 4));
      else $result .= str_repeat (" ", ($level * 4) + 4);
      $result .= "</ul>\n";
      $result .= str_repeat (" ", ($level * 4) + 2);
    }
    return($result);
  }

$sql = "SELECT
          level
        FROM
          ".$cfg["tab"]["cat_tree"]."
        WHERE
          idcat=$startkategorie";
$db->query($sql);
$db->next_record();
$startEbene = $db->f("level") + 1;
$anzahlEbenen += $startEbene;
if ($startkategorie==0) {
  if ($ebeneNullAnzeigen) $anzahlEbenen--;
  $startEbene--;
}
echo vpSitemap($startkategorie, $startEbene);

?>
MfG Steffen
Zuletzt geändert von derSteffen am Fr 9. Nov 2012, 14:26, insgesamt 1-mal geändert.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von Spider IT »

Hallo Steffen,

wofür brauchen denn die UL die idcat, und vor allem welche idcat?
UL ist die gesamte Liste, nicht der einzelne Eintrag, und ist für sich auch nicht anklickbar.

Gruß
René
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derSteffen »

Hallo René,

diese ganzen Angaben würde ich auch vorwiegend nur für CSS-Anpassungen nutzen. Somit hat man viel Spielraum und kann komplexe Darstellungen "designen". Zur Zeit wird ja schon die ParentID und das Level in der UL (also aus untergeordneten ULs) angegeben, dass ist zum CSSen ja schon gut, nur wenn die Kategorie verschoben wird, ändert sich das ja, nicht aber die IDCAT.

Zur Zeit sieht das so aus:
<li class="id5 ebene1"><span class="keinlink">Menüpunkt</span>
<ul class="ulebene1 ulparentid5">
<li class="id137 ebene2"><a href="link.html">Menüpunkt</a></li>
<li class="id35 ebene2"><span class="keinlink">Jugendbildung
<ul class="ulebene2 ulparentid35">
<li class="id138 ebene3"><a href="link.html">Menüpunkt</a></li>
</ul>
</li>
<li class="id36 ebene2"><span class="keinlink">Menüpunkt
<ul class="ulebene2 ulparentid36">
....
MfG Steffen
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von Spider IT »

Hallo Steffen,

2 Dinge:
  1. beim UL steht schon die Angabe "ulparentidX" (X = idcat des übergeordneten Eintrags).
    In dem UL kommen dann aber mehrere LIs vor, mit unterschiedlichen idcats.
    Welches idcat möchtest du denn noch beim UL mit rein haben?
  2. Bei nicht verlinkten Einträge umschließt das SPAN auch die Unterebenen.
    Das SPAN Ende sollte wahrscheinlich vor den vpSitemap() Aufruf kommen (Zeilen 62 und 70)
Gruß
René
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Sitemap als Menü -> leere Kat. -> Weiterleitung 1. Start

Beitrag von derSteffen »

Hallo René,

danke für den Span-Hinweis, habe ich geändert (natürlich auch oben im Code) ...

und Danke für Deine Hartnäckigkeit :-) jetzt habe ich es gerafft!

Eigentlich habe ich ja schon das was ich will. Da die ParentID der UL ja die gleiche ist, wie die IDCAT der LI wo sich die UL drin befindet!
<li class="id5 ebene1"><span class="keinlink">Menüpunkt</span>
<ul class="ulebene1 ulparentid5">
<li class="id137 ebene2"><a href="link.html">Menüpunkt</a></li>
Danke René :-)

Vielleicht sollte man das unter Module auch ablegen :-)

MfG Steffen
Gesperrt