probleme mit if.isTrue.numRows (submenü nur anzeigen wenn unterseiten vorhanden...)

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    30. 03. 2010, 16:17

    hab ein submenü (zb. "111" und "222"), das nur angezeigt werden soll, falls die aktuelle level-2-seite (z.b. seite "bbb") unterseiten besitzt.

    [HTML]- home
    - aaa
    - bbb
    - 111
    - 222
    - ccc
    - 333
    - 444
    [/HTML]

    das wär mein (vereinfachtes!) typoscript, dessen if-abfrage leider nicht funktioniert:
    [TS]temp.submenu = COA
    temp.submenu {
    stdWrap {
    if.isTrue.numRows {
    table = pages
    select.where.data = pid = leveluid:1
    }
    wrap = <div id="submenu"> | </div>
    }
    10 = TEXT
    10.value = Das ist das Untermenü
    }
    [/TS]
    hab auch folgendes erfolglos versucht ("andWhere"):
    [TS]temp.submenu = COA
    temp.submenu {
    stdWrap {
    if.isTrue.numRows {
    table = pages
    select.andWhere.data = pid = leveluid:1
    }
    wrap = <div id="submenu"> | </div>
    }
    10 = TEXT
    10.value = Das ist das Untermenü
    }
    [/TS]

    hat jemand eine idee was ich falsch gemacht haben könnte?

    danke schon mal im voraus für eure hilfe!


  • 1
  • d.walter d.walter
    Jedi-General
    0 x
    1270 Beiträge
    1 Hilfreiche Beiträge
    31. 03. 2010, 08:53

    Das macht doch TYPO3 automatisch wenn du das expandAll weg lässt!
    Oder hab ich dich jetzt falsch verstanden?
    einfach ein normales Menü aufbauen.... [url=http://www.typo3.net/forum/list/list_post//65143/?howto=1]hier[/url] hast paar Vorschläge

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    31. 03. 2010, 23:54

    danke für dein posting.

    das hauptmenü ist an einer anderen stelle. es handelt sich bei meinem menü um ein submenü, das in einer seitenspalte des layouts ausschliesslich die ebenen 2 und 3 der der seitenstruktur abbilden soll...

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    01. 04. 2010, 10:51

    Bin mir nicht ganz sicher was genau Du vorhast, aber vielleicht helfen Dir "entryLevel" oder "IFSUB" weiter.

    Gruß
    Michael

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    01. 04. 2010, 11:50

    vielleicht hab ich mich nicht richtig ausgedrückt - hier nochmal eine zusammenfassung meines problems:

    ich hab auf meiner seite eine horizontale hauptnavigation im kopfbereich der webseite die einwandfrei funktioniert. in dieser hauptnavigation wird das 2. level des seitenbaums als liste abgebildet - in meinem beispiel wären das folgende seiten:

    - aaa
    - bbb
    - ccc

    daneben gibt es ein weiteres menü auf der webseite - es ist in der rechte spalte lokalisert und soll das level 3 des seitenbaums abbilden. dieses menü macht mir noch probleme.

    PS: das objekt 10 des COA ist meinem beispiel natürlich ein MENU-objekt, das die 3. ebene des menüs (erfolgreich) abbildet...

    das problem: ich möchte, dass das menü (samt container der darum gewrappt wird!) nur dann angezeigt wird, wenn auch seiten im level 3 des seitenbaums vorhanden sind. leider wird der gewrappte container (und noch ein paar andere dinge, die ich der einfachheit halber in meinem beispiel nicht angeführt habe...) bei der verwendung meines typoscript-schnippsel auch angezeigt, wenn keine level-3-seiten existieren - in meinem beispiel wär das auf der seite "aaa" der fall.

    hoff ich habs jetzt verständlicher beschrieben und würd mich sehr über einen hilfreichen tipp freuen.

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    02. 04. 2010, 12:12

    OK, jetzt ist's klar.

    Mit
    [TS]temp.MENU_SUB = HMENU
    temp.MENU_SUB {
    entryLevel = 2
    1 = TMENU
    1 {
    wrap = <ul>|</ul>
    ...
    ...
    }
    }
    ### MENU MAIN - END ###
    [/TS]

    wird das Menü nur dann mit ul gewrappt, wenn auch wirklich Menüpunkte vorhanden sind.

    Gruß
    Michael[/code]

  • mostwanted mostwante...
    Jedi-Meister
    0 x
    376 Beiträge
    0 Hilfreiche Beiträge
    12. 04. 2010, 13:32

    danke für deinen tipp. leider konnte ich damit nicht mein problem in den griff bekommen - mein fehler...

    ...ich muss zugeben, dass es wohl doch keine so gute idee war, das typoscript-code-schnippsel zu vereinfachen. ich poste hier besser nochmal das gesamte typoscript-code-schnippsel das ich verwende umd das untermenü INKLUSIVE ÜBERSCHRIFT ausgeben zu lassen:

    [TS]temp.submenu = COA
    temp.submenu {
    stdWrap {
    ### die folgende if-anweisung sorgt dafuer, dass
    ### das COA "temp.submenu" leider leer ist...
    if.isTrue.numRows {
    table = pages
    select.where.data = pid = leveluid:1
    }
    wrap = <div id="submenu"> | </div>
    }
    ### ueberschrift (funktioniert prinzipiell wie gewuenscht)
    10 = TEXT
    10 {
    stdWrap {
    wrap = <h2> | </h2>
    data = levelfield:1,title
    }
    }
    ### submenue (funktioniert prinzipiell wie gewuenscht)
    20 = HMENU
    20 {
    entryLevel = 1
    1 = TMENU
    1 {
    wrap = <ul>|</ul>
    noBlur = 1
    NO = 1
    NO {
    wrapItemAndSub = <li> | </li> |*| <li> | </li> |*| <li class="last"> | </li>
    stdWrap.htmlSpecialChars = 1
    ATagTitle.field = title
    }
    ACT <.NO
    ACT {
    wrapItemAndSub = <li class="active"> | </li> |*| <li class="active"> | </li> |*| <li class="active last"> | </li>
    }
    }
    }
    }
    [/TS]

    hat jemand eine idee, was bei der if-anweisung nicht korrekt sein könnte? danke.

  • algiz algiz
    Padawan
    0 x
    55 Beiträge
    0 Hilfreiche Beiträge
    30. 04. 2010, 11:41

    [quote="mostwanted"]
    ...ich muss zugeben, dass es wohl doch keine so gute idee war, das typoscript-code-schnippsel zu vereinfachen. ich poste hier besser nochmal das gesamte typoscript-code-schnippsel das ich verwende umd das untermenü INKLUSIVE ÜBERSCHRIFT ausgeben zu lassen:

    [TS]temp.submenu = COA
    temp.submenu {
    stdWrap {
    ### die folgende if-anweisung sorgt dafuer, dass
    ### das COA "temp.submenu" leider leer ist...
    if.isTrue.numRows {
    table = pages
    select.where.data = pid = leveluid:1
    }
    wrap = <div id="submenu"> | </div>
    }
    }
    [/TS]

    hat jemand eine idee, was bei der if-anweisung nicht korrekt sein könnte? danke.
    [/quote]

    Du fragst die pid an der falschen Stelle ab (bzw. zu oft). select hat die Eigenschaft pidInList und die ist standardmäßig mit der ID der aktuellen Seite gefüllt. Deine Konfiguration entspricht also folgender SQL-Anweisung:

    1. SELECT COUNT(*) FROM pages WHERE pid = ID_aktuelle_Seite AND pid = ID_Seite_in_Ebene_1;

    Du musst also nur zwei kleine Anpassungen vornehmen:
    [TS]temp.submenu = COA
    temp.submenu {
    stdWrap {
    if.isTrue.numRows {
    table = pages
    select {
    pidInList.data = leveluid:1
    where = NOT hidden AND NOT deleted AND NOT nav_hide
    }
    }
    wrap = <div id="submenu"> | </div>
    }
    }
    [/TS]
    Die where-Bedingung solltest du hier nicht weglassen, denn sonst findet TYPO3 auch gelöschte und versteckte Seiten sowie Seiten, die im Menü verborgen werden sollen.

  • 1