Untermenü nur bedingt anzeigen [solved]

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
User avatar
Oliver Georgi
Site Admin
Posts: 9889
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post by Oliver Georgi »

Man kann auch in einem CMS nicht alles automatisieren!

Manche Menülösung lässt sich nur über Custom Logik umsetzen.

Wichtig aber - nach Möglichkeit KEIN inline PHP nutzen. Für Deinen Fall geht es wie folgt:

Im Template füge an der Stelle, an der das vertikale Menü erscheinen soll ein

Code: Select all

{VERTMENU}
Neues Script in frontend_render:

Code: Select all

<?php

$_vertmenu = '';

if(isset($LEVEL_ID[1])) {

  $_vertmenu = trim(   buildCascadingMenu( 'F,' . $LEVEL_ID[1] . ',' )   ); 
  // this is exactly the same as {NAV_LIST_UL: F,start_level_id, }
  // but built with php function behind
  if( $_vertmenu ) {
    
    $_vertmenu = '<div class="menu">' . $_vertmenu . '</div>';

  } else {
    $_vertmenu = '';
  }

}

$content['all'] = str_replace( '{VERTMENU}', $_vertmenu, $content['all'] );

?>
Oliver

P.S. Habs nicht getestet, sollte es aber tun.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Post by flip-flop »

Funktioniert natürlich. :D

Vom Prinzip her brauch er eine frühe Abfrage ob eine gültige Sub-Ebene existiert. Denn mit diesem hier gezeigten Verfahren kann kein weiterer RT wie z.B. SHOW_CONTENT ein oder ausgeblendet (gesteuert) werden. Die Navi funktioniert natürlich (kaum anderes zu erwarten) aber darum ging es im Kernpunkt nicht.

So eine Funktion halte ich für sehr interessant.
(Vom Prinzip her auch für Artikel: "Existiert eine Detailausgabe für einen Artikel?" Denn ich habe keine unterschiedlichen Templates um z.B. {BROWSE:PREV - NEXT} ein/auszublenden wenn CPs dranhängen. - Ist aber ein anderes Thema.)

Knut
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
User avatar
Oliver Georgi
Site Admin
Posts: 9889
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post by Oliver Georgi »

Da kommst Du um bestimmte Custom Entwicklung nicht drum herum.

Höhere Logik verlangt nun mal mehr Aufwand. In aller Regel ist die Contentlogik/Struktur im Vorfeld bekannt. Und da läufts am besten mit frontend_render

Oliver
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
Marphy
Posts: 14
Joined: Wed 16. May 2007, 15:29

Post by Marphy »

Hallo Leute,
danke für die vielen neuen Antworten! :)

@betabi:
Tut mir leid, wenn das aus den Postings nicht so eindeutig hervorging, aber ein solches Replacement-Tag bringt mir nichts, da ich auch für die bedingte Anzeige anderer Elemente (z.B. die umgebende Tabelle) wissen muss, ob ein Untermenü angezeigt werden soll oder nicht.

@Oliver:
Also ich finde Inline-PHP in Vorlagen eine sehr komfortable und elegante Lösung, da ich nicht den Umweg über Datei-Anlegen + FTP machen muss. 8) Wüsste nicht, was dagegen sprechen sollte?
Trotzdem nehme ich deinen Vorschlag dankend zur Kenntnis und werde ihn so auch verbauen, wenn es der Weisheit letzter Schluss bleiben sollte.

@flip-flop:
Sehr schön, genau so habe ich es gewollt! :) Dachte aber nicht, dass das so eine schwere Geburt würde... :wink:


:arrow: Ansatz: Wenn eine globale Variable (-> $GLOBALS['...']) existieren würde, weche die Menüstruktur enthält, könnte man doch ganz einfach (auch inline) prüfen, ob es nach $GLOBALS['LEVEL_ID'][1] noch Unterpunkte gäbe... Ideen?

Grüße,
Marco
Last edited by Marphy on Mon 3. Sep 2007, 17:33, edited 1 time in total.
:arrow: Nicht verzagen -- dumpVar() fragen! :idea:
Marphy
Posts: 14
Joined: Wed 16. May 2007, 15:29

Post by Marphy »

Also Leute, gibt es so eine globale Variable, die die Menüstruktur enthält?

Oder weiß jemand, wo ich eine Liste mit allen $GLOBALS-Variablen finden kann?
Das brächte uns doch schon fast zum Ziel... :)
Last edited by Marphy on Mon 3. Sep 2007, 17:33, edited 2 times in total.
:arrow: Nicht verzagen -- dumpVar() fragen! :idea:
User avatar
Oliver Georgi
Site Admin
Posts: 9889
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post by Oliver Georgi »

Du bist ein Lustigbold!

Da Du ja auf Inline-PHP stehst:

Code: Select all

[PHP]dumpVar($GLOBALS);[/PHP]
Die Strukturelemente findest Du in:

Code: Select all

$content['struct']
Die aktuell aufgerufene Menütiefe:

Code: Select all

$LEVEL_ID
$LEVEL_KEY
Oliver
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
Marphy
Posts: 14
Joined: Wed 16. May 2007, 15:29

Post by Marphy »

Oliver Georgi wrote:Du bist ein Lustigbold!
Ich fühle mich geehrt, Sir Georgi! :D

Du bist genial!! Nachdem ich die dumpVar-Ausgabe studiert hatte, war die Lösung nicht mehr weit:

Code: Select all

[PHP]
  if(isset($GLOBALS['LEVEL_ID'][2])) {  // [2] <--- hier liegt der Hund begraben!
    $level_id = $GLOBALS['LEVEL_ID'][1];

    echo '
<table ...>
...
<div class="nlu_navi1">{NAV_LIST_UL:F,'.$level_id.',,act_path,active}
...
</table>';
 }
[/PHP]
Wenn man per Weiterleitung der Hauptrubrik-Indexseite arbeitet (so wie ich das eh schon getan habe: sobald die Index-Seite einer Hauptrubrik aufgerufen wird, wird automatisch zur ersten Unterrubrik weitergeleitet), kann man über LEVEL_ID prüfen, wie tief man sich in der Seitenstruktur gerade befindet. Ab Ebene [2] befindet man sich nicht mehr innerhalb der Hauptrubrik, also muss ein Untermenü angezeigt werden.

Alternativ ginge es auch über Durchlauf der $content['struct'] und Abfrage von acat_struct:

Code: Select all

for ($i=0; $i<count($GLOBALS['content']['struct']); $i++) {
  if (isset($GLOBALS['content']['struct'][$i]) &&
      ($GLOBALS['content']['struct'][$i]['acat_struct'] == 
       $GLOBALS['LEVEL_ID']['1'])) {
    echo 'Ein Menü muss her!'; // Unterpunkt(e) vorhanden
    break;
  }
}
Wie dem auch sei, es funktioniert und ich bin glücklich! Die dumpVar-Geschichte kann man nur jedem empfehlen, das sollte glatt in die FAQ oder ins Manual oder als sticky ins Board gestellt werden....

Grüße,
Marco
:arrow: Nicht verzagen -- dumpVar() fragen! :idea:
User avatar
Jensensen
Posts: 3000
Joined: Tue 17. Oct 2006, 21:11
Location: auf der mlauer

Re:

Post by Jensensen »

Marphy wrote:...Alternativ ginge es auch über Durchlauf der $content['struct'] und Abfrage von acat_struct:

Code: Select all

for ($i=0; $i<count($GLOBALS['content']['struct']); $i++) {
  if (isset($GLOBALS['content']['struct'][$i]) &&
      ($GLOBALS['content']['struct'][$i]['acat_struct'] == 
       $GLOBALS['LEVEL_ID']['1'])) {
    echo 'Ein Menü muss her!'; // Unterpunkt(e) vorhanden
    break;
  }
}
Wie dem auch sei, es funktioniert und ich bin glücklich!....

Hi Marco,
ich bin damit noch nicht glücklich...obiger Code knallt und liefert --> SYNTAX ERROR!!

Kannste das noch mal genauer anschauen, erklären, korrigieren....

Vielen Dank
Greetz
{so_much} | Knick-Knack. | GitHub
Umlaute im URL sind meistens immer Kacke.
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Re: Untermenü nur bedingt anzeigen [solved]

Post by flip-flop »

Hallo Jensensen,

das Script funktioniert syntaktisch. Das Ergebnis ist eine andere Sache.

Knut
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
User avatar
Jensensen
Posts: 3000
Joined: Tue 17. Oct 2006, 21:11
Location: auf der mlauer

Re: Untermenü nur bedingt anzeigen [solved]

Post by Jensensen »

flip-flop wrote:...das Script funktioniert syntaktisch....
Hallo Knut,

Code: Select all

<div id="subnav">[PHP] 
for ($i=0; $i<count($GLOBALS['content']['struct']); $i++) {
  if (isset($GLOBALS['content']['struct'][$i]) &&
      ($GLOBALS['content']['struct'][$i]['acat_struct'] ==
       $GLOBALS['LEVEL_ID']['1'])) {
    echo 'Ein Menü muss her!'; // Unterpunkt(e) vorhanden
    break;
  }
}
[/PHP]</div>
in meinem Template funktioniert nicht!
flip-flop wrote:...Das Ergebnis ist eine andere Sache...
ich würd's ja gerne mal sehen, das Ergebnis.... :cry:

Greetz
{so_much} | Knick-Knack. | GitHub
Umlaute im URL sind meistens immer Kacke.
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Re: Untermenü nur bedingt anzeigen [solved]

Post by flip-flop »

Das Snippet schmeißt einfach nur den Text "Ein Menü muss her!" raus, obwohl keine Unterebene mehr existiert.
[EDIT]Doch funktioniert, hatte es in der falschen Ebene[/EDIT]
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
User avatar
Jensensen
Posts: 3000
Joined: Tue 17. Oct 2006, 21:11
Location: auf der mlauer

Re: Untermenü nur bedingt anzeigen [solved]

Post by Jensensen »

Weiß der Geier warum - es klappt jetzt. SORRY für die Umstände...
Grüße
{so_much} | Knick-Knack. | GitHub
Umlaute im URL sind meistens immer Kacke.
User avatar
update
Moderator
Posts: 6455
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: Untermenü nur bedingt anzeigen [solved]

Post by update »

Probiert - studiert - klappiert!
Super Sache - kein verstecktes div mehr da, wenn keine Menüunterpunkte vorhanden sind :lol:
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
phalancs
Posts: 793
Joined: Thu 19. Feb 2004, 05:09
Location: Germany

Re: Untermenü nur bedingt anzeigen [solved]

Post by phalancs »

Okay, es ist ein bischen her, aber keine eurer Lösungen funktioniert bei mir. Ich verstehe auch nicht so recht, weshalb das so kompliziert sein muss.
Meine Lösung ist dieses hier und das gibt genau die Anzahl der Unterebenen an. Mit dieser Zahl kann man dann machen was man will.

Code: Select all

echo count(getStructureChildData($GLOBALS['content']['cat_id']));
Fertig ist der Lack.
2008
Post Reply