Webdesign-Forum

Normale Version: drop-right catmenu
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich hänge mittlerweile schon länger an folgendem Prolem:
Ich möchte ein Kategorienmenü machen, das nach rechts ausklappt und die Unterkategorien anzeigt, falls vorhanden.

Das klappt auch soweit ganz gut. Das einzige Problem ist, dass die Unterkategorien nicht angezeigt werden.

Die Ausgabe sieht also so aus:

Code:
<ul>
  <li>Kategorie</li>
  <li>Kategorie 2
      <ul></ul>
</li>
</ul>

Die Unterkategorie wird also nicht angezeigt, ich weiß nur nicht warum, denn vorhanden ist sie.

Hier noch mein TS-Code:
PHP-Code:
lib.catmenu COA
lib
.catmenu {
  
# hole alle Hauptkategorien
  
10 CONTENT
  10 
{
    
# wrappe die gesamte Liste als "unsortierte Liste"
    
wrap = <ul id="mg-jsddm-unterrubriken">|</ul>
    
table tt_news_cat
    select 
{
      
# hier muss die pid eures News-Sysordners rein, bzw. wo die News-Kategorien gespeichert sind
      
pidInList 4
      orderBy 
title
      where 
parent_category=AND deleted=AND hidden=0
    
}
    
renderObj COA
    renderObj 
{
      
# wrappe jede gefundene Hauptkategorie als Listenelement
      
wrap = <li class="mg-rubriken-kein-blau">|</li>
      
# ueberschreibe den vorherigen Wrap ...
      
wrap.override = <li class="news-catmenu-ACT">|</li>
      
# ... nur, wenn ...
      
wrap.override.if {
        
# ... eine News-Kategorie bereits ausgewaehlt wurde und per GET/POST ermittelt werden kann
        
value.data GPvar:tx_ttnews|cat
        
# und dieser ermittelte Wert der aktuellen uid gleicht
        
equals.field uid       
      
}
 
      
# zeig mir den Kategorie-Titel und mache einen Link daraus zur Kategorie-Detail-Uebersicht
      
10 TEXT
      10 
{
        
# das title-Feld soll als Text angezeigt werden (koennte man auch description... verwenden)
        
field title
        typolink 
{
          
# verlinke zu der Seite mit der News-Auflistung (Listenansicht)
          
parameter 3
          title
.field title
          
# fuege den GET-Parameter fuer die ausgewaehlte Kategorie hinzu
          
additionalParams.dataWrap = &tx_ttnews[cat]={field:uid}
          
# cHash mit uebergeben fuers Caching - Danke an ScubaBen fuer den Hinweis!
          
useCacheHash 1
        
}
      }
 
      
# zeig mir einen Counter aller News-Eintraege in dieser Kategorie
      
20 CONTENT
      20 
{
        
table tt_news_cat
        select 
{
          
# hier wieder der Sysordner aller News-Eintraege und -Kategorien
          
pidInList 4
          join 
tt_news_cat_mm ON (tt_news_cat.uid tt_news_cat_mm.uid_foreign)
                   
JOIN tt_news ON (tt_news.uid tt_news_cat_mm.uid_local)
          
# dieses Where sorgt dafuer, dass auch die News der Unterkategorien 1 Ebene unterhalb
          # gezaehlt werden - tiefere Ebenen koennen nicht beruecksichtigt werden
         
andWhere.dataWrap = (tt_news_cat.uid={field:uid} OR
# tt_news_cat.parent_category={field:uid}) AND tt_news.deleted=0 AND tt_news.hidden=0
          # dieses Where zaehlt nur die News in dieser Kategorie
           # andWhere.dataWrap = (tt_news_cat.uid={field:uid})
                                           
AND tt_news.deleted=AND tt_news.hidden=0
                                           
AND sys_language_uid={TSFE:sys_language_uid}
          
# fuehre einen count durch und speichere das Ergebnis in "counter"
          
selectFields count(*) AS counter
        
}
        
renderObj TEXT
        renderObj 
{
          
# zeig mir nun das Ergebnis des Counters an und wrappe es
          
field counter
          wrap 
=  <span>(|)</span>
        }
      }
 
      
# zeige mir alle Unterkategorien der aktuellen Kategorie an
      
30 CONTENT
      30 
{
        
stdWrap {
          
# fuehre den Abschnitt nur aus, wenn in der Select-Abfrage ein Wert gefunden wurde
          
required 0
          wrap 
= <ul class="mg-rubriken-unterrubrik mg-kein-abstand">|</ul>
        }
 
        
table tt_news_cat
        select 
{
          
pidInList 4
          orderBy 
title
          andWhere
.dataWrap parent_category={field:uid} AND deleted=AND hidden=0
        
}
        
# vererbe die Einstellungen von lib.CatList.10.renderObj an dieses renderObj
        
renderObj lib.catList.10.renderObj
        renderObj 
COA
        renderObj 
{
 
          
# zeige den Titel mit Verlinkung an, genauso wie bei lib.catList.10.renderObj.10 (vererbt)
          
10 lib.catList.10.renderObj.10
 
          
# zeige den News-Counter an, genauso wie bei lib.catList.10.renderObj.20 (vererbt)
          
20 lib.catList.10.renderObj.20
 
          
# zeige die Unterkategorien an, genauso wie bei lib.catList.10.renderObj.30 (vererbt)
          
30 lib.catList.10.renderObj.30
          
# wenn noch eine 4. und 5. Kategorien-Ebene abgebildet werden sollen,
          # dann die folgenden 6 Zeilen verwenden
          # 30.renderObj = COA
          # 30.renderObj {
          #   10 < lib.catList.10.renderObj.10
          #   20 < lib.catList.10.renderObj.20
          #   30 < lib.catList.10.renderObj.30
          # }
        
}
      }
    }
  }


Vielen Dank und viele Grüße!
hmm, hat keiner von euch eine Idee??

Ich hab auch schon im Konstanteneditor geschaut, dort steht:
show subcategories: an

Ich wüsste nicht woran es liegen kann, auch nicht, ob Code oder typo3-Einstellung...

Viele Grüße
hmm mir fällt beim schnellen überblicken nur eines auf:

du verwendest in der Definition "lib.catmenu" aber in der vererbung verwendest du "lib.catList", ist das richtig so?
nein, das ist nicht richtig so Blush

Manchmal ist man einfach nur blind!!! Dodgy

Viele, Dank, das war die Lösung!!!


Viele Grüße
Hallo zusammen,

ich habe den oberen skript auch, bekomme aber immer einen leeren <ul class="news-catmenu"></ul> tag zurück. Hat jemand vielleicht ein Idee woran es liegen könnte? Meinen sysordner hat die pid = 57 dort sind meine Kategorien und news abgelegt. Das sql-statement scheint keine Resultate zu liefern?

Vielen Dank im Voraus.

Hier den code:

PHP-Code:
lib.catList COA
lib
.catList {
  
# hole alle Hauptkategorien
  
10 CONTENT
  10 
{
    
# wrappe die gesamte Liste als "unsortierte Liste"
    
wrap = <ul class="news-catmenu">|</ul>
    
table tt_news_cat
    select 
{
      
# hier muss die pid eures News-Sysordners rein, bzw. wo die News-Kategorien gespeichert sind
      
pidInList 57
      orderBy 
title
      where 
parent_category=AND deleted=AND hidden=0
    
}
    
renderObj COA
    renderObj 
{
      
# wrappe jede gefundene Hauptkategorie als Listenelement
      
wrap = <li>|</li>
      
# ueberschreibe den vorherigen Wrap ...
      
wrap.override = <li class="news-catmenu-ACT">|</li>
      
# ... nur, wenn ...
      
wrap.override.if {
        
# ... eine News-Kategorie bereits ausgewaehlt wurde und per GET/POST ermittelt werden kann
        
value.data GPvar:tx_ttnews|cat
        
# und dieser ermittelte Wert der aktuellen uid gleicht
        
equals.field uid        
      
}
 
      
# zeig mir den Kategorie-Titel und mache einen Link daraus zur Kategorie-Detail-Uebersicht
      
10 TEXT
      10 
{
        
# das title-Feld soll als Text angezeigt werden (koennte man auch description... verwenden)
        
field title
        typolink 
{
          
# verlinke zu der Seite mit der News-Auflistung (Listenansicht)
          
parameter 57
          title
.field title
          
# fuege den GET-Parameter fuer die ausgewaehlte Kategorie hinzu
          
additionalParams.dataWrap = &tx_ttnews[cat]={field:uid}
          
# cHash mit uebergeben fuers Caching - Danke an ScubaBen fuer den Hinweis!
          
useCacheHash 1
        
}
      }
 
      
# zeig mir einen Counter aller News-Eintraege in dieser Kategorie
      
20 CONTENT
      20 
{
        
table tt_news_cat
        select 
{
          
# hier wieder der Sysordner aller News-Eintraege und -Kategorien
          
pidInList 57
          join 
tt_news_cat_mm ON (tt_news_cat.uid tt_news_cat_mm.uid_foreignJOIN tt_news ON (tt_news.uid tt_news_cat_mm.uid_local)
          
# dieses Where sorgt dafuer, dass auch die News der Unterkategorien 1 Ebene unterhalb
          # gezaehlt werden - tiefere Ebenen koennen nicht beruecksichtigt werden
          # andWhere.dataWrap = (tt_news_cat.uid={field:uid} OR tt_news_cat.parent_category={field:uid}) AND tt_news.deleted=0 AND tt_news.hidden=0
          # dieses Where zaehlt nur die News in dieser Kategorie
          
andWhere.dataWrap = (tt_news_cat.uid={field:uid}) AND tt_news.deleted=AND tt_news.hidden=AND sys_language_uid={TSFE:sys_language_uid}
          
# fuehre einen count durch und speichere das Ergebnis in "counter"
          
selectFields count(*) AS counter
        
}
        
renderObj TEXT
        renderObj 
{
          
# zeig mir nun das Ergebnis des Counters an und wrappe es
          
field counter
          wrap 
=  <span>(|)</span>
        }
      }
 
      
# zeige mir alle Unterkategorien der aktuellen Kategorie an
      
30 CONTENT
      30 
{
        
stdWrap {
          
# fuehre den Abschnitt nur aus, wenn in der Select-Abfrage ein Wert gefunden wurde
          
required 1
          wrap 
= <ul>|</ul>
        }
 
        
table tt_news_cat
        select 
{
          
pidInList 57
          orderBy 
title
          andWhere
.dataWrap parent_category={field:uid} AND deleted=AND hidden=0
        
}
        
# vererbe die Einstellungen von lib.CatList.10.renderObj an dieses renderObj
        
renderObj lib.catList.10.renderObj
        renderObj 
COA
        renderObj 
{
 
          
# zeige den Titel mit Verlinkung an, genauso wie bei lib.catList.10.renderObj.10 (vererbt)
          
10 lib.catList.10.renderObj.10
 
          
# zeige den News-Counter an, genauso wie bei lib.catList.10.renderObj.20 (vererbt)
          
20 lib.catList.10.renderObj.20
 
          
# zeige die Unterkategorien an, genauso wie bei lib.catList.10.renderObj.30 (vererbt)
          
30 lib.catList.10.renderObj.30
          
# wenn noch eine 4. und 5. Kategorien-Ebene abgebildet werden sollen,
          # dann die folgenden 6 Zeilen verwenden
          # 30.renderObj = COA
          # 30.renderObj {
          #   10 < lib.catList.10.renderObj.10
          #   20 < lib.catList.10.renderObj.20
          #   30 < lib.catList.10.renderObj.30
          # }
        
}
      }
    }
  }