Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 44

Thema: Navigation mit Seiten von gleicher Ebene

  1. #1
    Contao-Nutzer Avatar von chris_engel
    Registriert seit
    21.09.2012.
    Ort
    Frankfurt am Main
    Beiträge
    36

    Standard Navigation mit Seiten von gleicher Ebene

    Hallo Leute,
    ich rupf mir hier gleich die Haare aus.

    Folgende angenommene Seitenstruktur:

    - Hauptseite 1
    -Kind 1
    -Kind 2
    -Kindeskind 1
    -Kindeskind 2
    -Kind 3
    -Hauptseite 2

    Wenn ich mich auf Hauptseite befinde, soll die Navigation bitte [Hauptseite 1, Hauptseite 2] anzeigen.
    Wenn ich mich auf einer der drei "Kind" Seiten befinde, soll die Navigation [Kind 1, Kind 2, Kind 3] anzeigen.
    Und wenn ich auf einer "Kindeskind" Seite bin, soll die Navigation [Kindeskind 1, Kindeskind 2] anzeigen.

    Also immer alle Seiten, die sich zusammen auf der Ebene der Aktuellen Seite befinden.

    Ich bekomme es einfach nicht hin, das Start/Stop- level scheint sich immer auf die oberste Ebene zu beziehen. Hat jemand einen Tip?

  2. #2
    Contao-Fan
    Registriert seit
    02.03.2013.
    Beiträge
    436

    Standard

    Mal für Dumme, wo bleibt die Navigation, wenn zB auf der Kindebene (level_2) nur Kind1,Kind2 und Kind3 sichtbar sind ? Wie soll der
    Nutzer zu den Hauptpkt zurück, bzw. wie soll er von Kindeskindpkt erfahren ?

  3. #3
    Contao-Nutzer Avatar von chris_engel
    Registriert seit
    21.09.2012.
    Ort
    Frankfurt am Main
    Beiträge
    36

    Standard

    Ich benötige einfach an einer Stelle im Layout eine ebensolche Navigation, die thematisch zusammengehörige Themenseiten auflistet.

  4. #4
    Contao-Urgestein
    Registriert seit
    20.09.2012.
    Ort
    Lüneburger Heide
    Beiträge
    2.070
    Partner-ID
    12207
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hi,

    wenn du ein weiteres Navigationsmodul vom Typ "Navigationsmenü" erstellst kannst Du das in der Menükonfiguration mit Start- und Stopplevel einstellen.
    Probiere es mal mit Startlevel 1 und Stopplevel 1 für die Hauptnavi Punkte, Start/Stopp Level 2 für die Kinder1 usw..

    Gruß
    tschero
    Autodidakt und HobbyWebdesigner

    www.webdesign24.biz
    Screencasts zu Contao

  5. #5
    Contao-Nutzer Avatar von chris_engel
    Registriert seit
    21.09.2012.
    Ort
    Frankfurt am Main
    Beiträge
    36

    Standard

    Das ist leider nicht praktikabel, denn dann müsste ich für jedes Level ein eigenes Menü-Modul anlegen und immer korrekt einbinden lassen.

  6. #6
    Contao-Nutzer Avatar von MBM
    Registriert seit
    12.02.2010.
    Ort
    Berlin
    Beiträge
    39

    Standard

    Probier mal die merger2 Erweiterung von T. Lins, die könnte eine elegante Möglichkeit zur Lösung sein.

  7. #7
    Contao-Urgestein Avatar von KlausGrenoble
    Registriert seit
    27.01.2013.
    Ort
    Grenoble
    Beiträge
    2.362

    Standard

    Zitat Zitat von chris_engel Beitrag anzeigen
    Wenn ich mich auf Hauptseite befinde, soll die Navigation bitte [Hauptseite 1, Hauptseite 2] anzeigen.
    Wenn ich mich auf einer der drei "Kind" Seiten befinde,
    Wie kommst Du denn da hin, zu einer der drei "Kind" Seiten ??? Geht doch gar nicht, da Du die in der Navigation ja gar nicht siehst.
    Ginge nur, wenn Du die Url kennst und die in die Adresszeile von Hand einträgst.

  8. #8
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    267

    Standard

    Ich sehe mich gerade vor der selben Aufgabe wie chris.
    Referenzseite = ParentSeite wäre wohl das Stichwort.
    Hat denn vielleicht jemand diesbezüglich schon etwas ersonnen - bevor ich jetzt im Template herum laboriere?

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Im IRC chat hatte glaube ich jemand was ähnliches gefragt. Eine dynamische Lösung wäre zB so:
    PHP-Code:
    // get the global page object
    global $objPage;

    // don't do anything if this is a root page
    if( !$objPage->pid )
        return;

    // create a content model with the desired parameteres for the navigation module
    $objModuleModel = new \ModuleModel();
    $objModuleModel->type 'navigation';
    $objModuleModel->id uniqid();
    $objModuleModel->defineRoot true;
    $objModuleModel->rootPage $objPage->pid;

    // generate the navigation module
    $objModuleNavigation = new \ModuleNavigation$objModuleModel );

    // generate the html
    echo $objModuleNavigation->generate(); 
    Das erzeugt dir eine Navigations Modul, wo immer die Parent Seite als Referenz festgelegt ist.
    Geändert von Spooky (26.04.2016 um 11:41 Uhr) Grund: added type

  10. #10
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    267

    Standard

    Du schüttelst das so fix aus dem Ärmel - das ist schon irgendwie spooky...
    Danke schonmal, ich werds erst später testen.

  11. #11
    Contao-Fan Avatar von Hendriks
    Registriert seit
    28.08.2009.
    Ort
    Stuttgart
    Beiträge
    275

    Standard

    Hallo (@spooky),

    könnte man so ne kleine Extension nicht auch mal für's / im ER bereitstellen?

    Ich denke das Ding würde abgehen wie eine Rakete - also vom reißenden Absatz her gesehen!

  12. #12
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn es nichts ausmacht, dass im Code die komplette Navigation gerendert wird, kann man das auch mit CSS machen.
    HTML-Code:
    .testnav ul {
      padding: 0;
      list-style-type: none;
    }
    .testnav li a {
      display: none;
    }
    .testnav a.sibling {
      display: inline;
    }
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  13. #13
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    267

    Standard

    per CSS: im Prinzip JA - ich bin den Weg auch schon gegangen.
    Hab's dann wieder verworfen - weil man kaum noch Möglichkeiten bzgl des. Stoplevels hat und sämtliche level_n classen unbrauchbar werden.
    .level_4 kann dann optisch .level_1 2 3 oder 4 sein.
    Wenn :hover .aktiv und sichtbare submenus der siblings auch noch mit ins Spiel kommen friemelt man sich da ganzschön einen ab.
    Mein Kopf hat da jedenfalls irgendwann zu gemacht.

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Kann ich nicht nachvollziehen, dass das kompliziert sein soll.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  15. #15
    Contao-Fan Avatar von Hendriks
    Registriert seit
    28.08.2009.
    Ort
    Stuttgart
    Beiträge
    275

    Standard

    Je nachdem... Wenn man einen Seitenbaum mit 100 oder noch mehr Seiten hat, dann reicht mir da 1 Hauptmenü bzw. die Sitemap im Layout; die will ich dann nicht für die aktuellen 5 Untermenüpunkte komplett im Quelltext wiederholt sehen...

  16. #16
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn man sich an eine Erweiterung nicht ran traut, lässt sich eine Menge auch über das Template machen. Da gibts wahrscheinlich auch schon einiges zum Thema, wenn man mal sucht. Ansonsten kann man das durchaus auch selbst machen. Ausgehend z.B. vom nav_default.html5 Template. Vielleicht komme ich heute noch dazu, sowas mal zu probieren. Habe schon was ähnliches realisiert, nämlich dass nur die direkten Unterseiten der aktuellen Seite ausgegeben werden. Da wird man, soweit ich das momentan sehe, nur eine Kleinigkeit abändern müssen, um alle Seiten des aktuellen Levels im selben Unterbaum der Navigation auszugeben.

  17. #17
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Im IRC chat hatte glaube ich jemand was ähnliches gefragt. Eine dynamische Lösung wäre zB so:
    PHP-Code:
    // get the global page object
    global $objPage;

    // don't do anything if this is a root page
    if( !$objPage->pid )
        return;

    // create a content model with the desired parameteres for the navigation module
    $objModuleModel = new \ModuleModel();
    $objModuleModel->id uniqid();
    $objModuleModel->defineRoot true;
    $objModuleModel->rootPage $objPage->pid;

    // generate the navigation module
    $objModuleNavigation = new \ModuleNavigation$objModuleModel );

    // generate the html
    echo $objModuleNavigation->generate(); 
    Das erzeugt dir eine Navigations Modul, wo immer die Parent Seite als Referenz festgelegt ist.
    Ich habe das mal ausprobiert, klappt soweit. Ein kleines "Problem" habe ich dabei allerdings, noch, mein erzeugter Quellcode sieht so aus:
    HTML-Code:
    <nav class="mod_ block">
    Also mit "mod_" statt "mod_navigation". Kann ich das irgendwie hinbekommen, indem ich z.B. dem ModuleModel weitere Werte setze?

  18. #18
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    267

    Standard

    PHP-Code:
    $objModuleModel->type 'navigation';
    //$objModuleModel->hardLimit = 1;
    //$objModuleModel->showHidden = true;
    //$objModuleModel->showProtected = false;
    //$objModuleModel->levelOffset =1; // Startlevel
    //$objModuleModel->showLevel = 1; //Stoplevel 
    Geändert von andre.saage (08.03.2016 um 23:21 Uhr)

  19. #19
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Da warst du jetzt etwas schneller als ich

  20. #20
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    267

    Standard

    hatte gerade meine Finger in dem Project, in dem ich das so verwendet hab.

  21. #21
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    So, ich habe das jetzt nochmal etwas anders gelöst, weil ich wirklich nur die Seiten auf der selben Ebene haben will und nicht auch noch deren Unterseiten, die ich mit dem ursprünglichen Code zusätzlich bekam. Wenn die Referenzseite gesetzt ist, werden die Start- und Stoplevel nicht berücksichtigt. Klar, könnte man per CSS einfach ausblenden. Aber wie unten geht es auch ohne Referenzseite und mit dynamischem Startlevel (jedenfalls bei mir). Die if-Bedingung verhindert die Ausgabe auf der obersten Ebene, das wäre sonst nur ein Duplikat meiner Hauptnavigation, die ich eh schon auf der Seite habe. Wenn das nicht stört oder sogar gewünscht ist, kann man die Bedingung natürlich weglassen.
    PHP-Code:
    <?php
    // get the global page object
    global $objPage;
    $level count($objPage->trail)-1;
    if (
    $level 1) {
            
    // create a content model with the desired parameteres for the navigati$
            
    $objModuleModel = new \ModuleModel();
            
    $objModuleModel->id uniqid();
            
    $objModuleModel->levelOffset $level-1;
            
    $objModuleModel->showLevel 1;
            
    $objModuleModel->hardLimit true;
            
    $objModuleModel->showHidden false;
            
    $objModuleModel->showProtected false;
            
    $objModuleModel->type 'navigation';
            
    $objModuleModel->cssID 'navSiblings';

            
    // generate the navigation module
            
    $objModuleNavigation = new \ModuleNavigation$objModuleModel );

            
    // generate the html
            
    echo $objModuleNavigation->generate();
    }

  22. #22
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Tja, wie das so ist, habe ich jetzt noch eine weitere Verbesserung(?) geplant. Wenn es auf der Ebene nur eine Seite gibt, auf der ich mich dann logischerweise gerade befinde, macht diese Navigation keinen Sinn und ich würde sie in dem Fall gern ganz weglassen. So wie es bei einer normalen Navigation passiert, wenn gar keine Seiten auszugeben sind. Wie mache ich das am sinnvollsten? Hatte mir schon überlegt, das Ergebnis von $objModuleNavigation->generate() vor der Ausgabe erst zu überprüfen, ob da z.B. ein "href=" drin vorkommt (das Listenelement für die aktuelle Seite hat keinen Link und ist in dem Fall das einzige, das ausgegeben wird). Geht das auch eleganter? Komme ich z.B. irgendwie an die Zahl der ausgegebenen Listenelemente dran? Ich habe nichts gefunden.

  23. #23
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Tja, wie das so ist, habe ich jetzt noch eine weitere Verbesserung(?) geplant. Wenn es auf der Ebene nur eine Seite gibt, auf der ich mich dann logischerweise gerade befinde, macht diese Navigation keinen Sinn und ich würde sie in dem Fall gern ganz weglassen. So wie es bei einer normalen Navigation passiert, wenn gar keine Seiten auszugeben sind. Wie mache ich das am sinnvollsten? Hatte mir schon überlegt, das Ergebnis von $objModuleNavigation->generate() vor der Ausgabe erst zu überprüfen, ob da z.B. ein "href=" drin vorkommt (das Listenelement für die aktuelle Seite hat keinen Link und ist in dem Fall das einzige, das ausgegeben wird). Geht das auch eleganter? Komme ich z.B. irgendwie an die Zahl der ausgegebenen Listenelemente dran? Ich habe nichts gefunden.
    PHP-Code:
    global $objPage;
    if (\
    PageModel::countBy('pid = ?'$objPage->pid) < 2)
        return; 
    ?

  24. #24
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Danke, auf die Idee, das einfach so direkt abzufragen, bin ich gar nicht gekommen. Muss ich nachher gleich mal testen, falls mich meine 3.5.10 überhaupt das Template speichern lässt .
    Edit: Speichern kann ja gar nicht zum Problem werden, weil ich die Datei ja sowieso per Konsole editiere und speichere
    Geändert von tab (21.04.2016 um 14:00 Uhr)

  25. #25
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hmm,

    Code:
    [21-Apr-2016 14:02:56 Europe/Berlin] PHP Fatal error: Uncaught exception 'Exception' with message 'Too few arguments to build the query string' thrown in /var/www/virtual/xxx/system/modules/core/library/Contao/Database/Statement.php on line 331
    #0 /var/www/virtual/xxx/system/modules/core/library/Contao/Database/Statement.php(262): Contao\Database\Statement->replaceWildcards(Array)
    #1 /var/www/virtual/xxx/system/modules/core/library/Contao/Model.php(1166): Contao\Database\Statement->execute('1')
    #2 /var/www/virtual/xxx/templates/nav_siblings.php(4): Contao\Model::countBy('pid = ?', '1')
    #3 /var/www/virtual/xxx/system/modules/core/library/Contao/InsertTags.php(1113): include('/var/www/virtua...')
    #4 /var/www/virtual/xxx/system/modules/core/library/Contao/Controller.php(692): Contao\InsertTags->replace('<!DOCTYPE html>...', false)
    #5 /var/www/virtual/xxx/system/modules/core/classes/FrontendTemplate.php(100): Contao\Controller::replaceInsertTags('<!DOCTYPE html>...', false)
    #6 /var/www/virtual/xxx/system/modules/core/pages/PageRegular.php(190): Contao\FrontendTemplate->output(true)
    #7 /var/www/virtual/xxx/system/modules/core/controllers/FrontendIndex.php(285): Contao\PageRegular->generate(Object(Contao\PageModel), true)
    #8 /var/www/virtual/xxx/index.php(20): Contao\FrontendIndex->run()
    #9 {main}
    So wirft es keinen Fehler mehr, zeigt mir dafür aber immer noch eine einzelne Seite.
    PHP-Code:
    if (\PageModel::countByPid($objPage->pid) < 2)
        return; 

  26. #26
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Liegt wohl an meiner Testmethode. Weil es momentan gar nirgends mehr vorkommt, dass es nur eine Seite auf dem Level gibt, habe ich einfach die weiteren auf einem Level auf nicht veröffentlicht gesetzt. Gezählt werden sie natürlich trotzdem.

    Edit: Was dann aber auch heißt, so kann ich es nicht machen, weil ich teilweise auch geschützte Seiten habe, die dann eventuell nicht angezeigt aber trotzdem gezählt werden.
    Geändert von tab (21.04.2016 um 14:39 Uhr)

  27. #27
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Naja, dann musst du den Query eben ändern. zB
    PHP-Code:
    $t = \PageModel::getTable();
    $arrColumns = array("$t.pid=?");

    if (!
    BE_USER_LOGGED_IN)
    {
        
    $time = \Date::floorToMinute();
        
    $arrColumns[] = "($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'" . (time() + 60) . "') AND $t.published='1'";
    }

    if( \
    PageModel::countBy($arrColumns$objPage->id) < )
        return; 

  28. #28
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hmm, . Muss ich mir mal m Wochenende in aller Ruhe anschauen und zu verstehen versuchen, was da passiert. Bisher habe ich mal einfach versucht, das in die Datei reinzukopieren. Das läuft zwar, aber bei einigen Seiten, wo es definitiv auf der selben Ebene weitere Seiten gibt und das angemeldete Mitglied diese auch sehen darf, wird mir die Navigation nicht ausgegeben, weil \Pagemodel::countBy(...) offenbar < 2 ist, was eigentlich nicht sein sollte. Er läuft definitiv in das Return, hatte da eine Ausgabe zum Testen reingemacht (natürlich dann mit geschweiften Klammern beim if ... ). Bei einigen anderen Seiten mit mehreren Seiten auf der Ebene ging es aber, die Navigation wurde angezeigt.

    Die Datei sieht dabei so aus:
    PHP-Code:
    <?php
    // get the global page object
    global $objPage;

    $t = \PageModel::getTable();
    $arrColumns = array("$t.pid=?");

    if (!
    BE_USER_LOGGED_IN)
    {
        
    $time = \Date::floorToMinute();
        
    $arrColumns[] = "($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'" . (time() + 60) . "') AND $t.published='1'";
    }

    if( \
    PageModel::countBy($arrColumns$objPage->id) < )
        return;

    $level count($objPage->trail)-1;
    if (
    $level 1) {
            
    // create a content model with the desired parameteres for the navigation module
            
    $objModuleModel = new \ModuleModel();
            
    $objModuleModel->id uniqid();
            
    $objModuleModel->levelOffset $level-1;
            
    $objModuleModel->showLevel 1;
            
    $objModuleModel->hardLimit true;
            
    $objModuleModel->showHidden false;
            
    $objModuleModel->showProtected false;
            
    $objModuleModel->type 'navigation';
            
    $objModuleModel->cssID 'NavSiblings';

            
    // generate the navigation module
            
    $objModuleNavigation = new \ModuleNavigation$objModuleModel );

            
    // generate the html
            
    echo $objModuleNavigation->generate();
    }
    ?>
    Die entsprechenden Seiten sind momentan alle geschützt, werden aber mit einem angemeldeten Mitglied (Frontend-Benutzer) aufgerufen, das die Berechtigung für alle diese Seiten hat. Ohne die Query werden also überall die Seiten der gleichen Ebene als Navigation ausgegeben. Ich habe auch eine ziemlich unschöne Lösung, die funktioniert und auf dem Auswerten des generierten HTML auf Vorkommen von "href=" basiert. Dass grundsätzlich bei jeder Navigation erstmal der Link zum Überspringen der Navigation generiert wird, macht diese Lösung noch etwas uneleganter. Aber sie funktioniert problemlos, was natürlich auch ein gewisser Vorteil ist . Der Quellcode ist dabei auch nicht länger als mit der Query. Lediglich das HTML wird eben manchmal unnötig generiert und dann halt nicht ausgegeben. Trotzdem interessiert mich deine Methode schon aus Prinzip. Wenn ich sie noch zum Laufen bringe, wird sie auch benutzt. Da lerne ich wenigstens wieder etwas über den Contao Core dazu.

  29. #29
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Achso, Berechtigungen brauchst du auch noch. Dann:
    PHP-Code:
    // get the current page object
    global $objPage;

    // fetch published children
    $t = \PageModel::getTable();
    $arrColumns = array("$t.pid=?");

    if (!
    BE_USER_LOGGED_IN)
    {
        
    $time = \Date::floorToMinute();
        
    $arrColumns[] = "($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'" . (time() + 60) . "') AND $t.published='1'";
    }

    $objChildren = \PageModel::findBy$arrColumns$objPage->id );

    // check if there are children
    if( $objChildren === null )
        return;

    // count the visible children
    $countVisible 0;

    while( 
    $objChildren->next() )
        if( \
    Controller::isVisibleElement$objChildren->current() ) )
            ++
    $countVisible;

    if( 
    $countVisible )
        return; 
    oder so . Ungetestet.

  30. #30
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, die Berechtigungen haben den ganzen Mist eigentlich erst ausgelöst. Insgesamt habe ich ansonsten schon auf jeder Ebene mehrere Seiten, da würde der Fall nie eintreten. Probier ich nachher gleich mal aus. Obwohl, eher warte ich erst nochmal bis ich auf 3.5.12 bin. Die 3.5.10 die ich mir da versehentlich verfrüht installiert habe, ist mir doch etwas suspekt, wenn sie auch zumindest bei der Sache mit der Navigation hier keine offensichtlichen Probleme bereitet hat.

    Ich sehe schon, die Sache über die Models anzugehen ist in jedem Fall komplizierter als ich ursprünglich gedacht hatte. Ursprünglich hatte ich mir in meinem jugendlichen Leichtsinn eingebildet, das wäre wahrscheinlich ein Ein- oder Zweizeiler, wenn man die richtige Variable kennt, so wie es eben bei vielen anderen Dingen der Fall ist. So langsam begreife ich, warum das Vorhandensein von Navigationspunkten im Core auch über das generierte HTML geprüft wird. Dort ist es allerdings einfach zu prüfen, weil ohne Navigationspunkte eben gar kein HTML generiert wird bzw ein Leerstring.

  31. #31
    Contao-Nutzer
    Registriert seit
    06.01.2011.
    Beiträge
    87

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    So, ich habe das jetzt nochmal etwas anders gelöst, weil ich wirklich nur die Seiten auf der selben Ebene haben will und nicht auch noch deren Unterseiten, die ich mit dem ursprünglichen Code zusätzlich bekam. Wenn die Referenzseite gesetzt ist, werden die Start- und Stoplevel nicht berücksichtigt. Klar, könnte man per CSS einfach ausblenden. Aber wie unten geht es auch ohne Referenzseite und mit dynamischem Startlevel (jedenfalls bei mir). Die if-Bedingung verhindert die Ausgabe auf der obersten Ebene, das wäre sonst nur ein Duplikat meiner Hauptnavigation, die ich eh schon auf der Seite habe. Wenn das nicht stört oder sogar gewünscht ist, kann man die Bedingung natürlich weglassen.
    PHP-Code:
    <?php
    // get the global page object
    global $objPage;
    $level count($objPage->trail)-1;
    if (
    $level 1) {
            
    // create a content model with the desired parameteres for the navigati$
            
    $objModuleModel = new \ModuleModel();
            
    $objModuleModel->id uniqid();
            
    $objModuleModel->levelOffset $level-1;
            
    $objModuleModel->showLevel 1;
            
    $objModuleModel->hardLimit true;
            
    $objModuleModel->showHidden false;
            
    $objModuleModel->showProtected false;
            
    $objModuleModel->type 'navigation';
            
    $objModuleModel->cssID 'navSiblings';

            
    // generate the navigation module
            
    $objModuleNavigation = new \ModuleNavigation$objModuleModel );

            
    // generate the html
            
    echo $objModuleNavigation->generate();
    }
    habe dieses Script im Einsatz und musste feststellen das wenn der wenn der Seitencache (im Startpunkt der Webseite) aktiviert ist, es nicht richtig funktioniert. Das Menü wir teilweise gar nicht gerendert ... Woran könnte das liegen?

  32. #32
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Naja, beschreibe die Umstände etwas genauer. Wenn z.B. die Seite bereits im Cache liegt und du erst dann neue Seite hinzufügst, musst du natürlich den Cache löschen, damit diese Änderung übernommen wird.

  33. #33
    Contao-Nutzer
    Registriert seit
    06.01.2011.
    Beiträge
    87

    Standard

    ok, also wenn der Cache ausgeschaltet ist funktioniert es einwandfrei. Wenn der Cache (zb. 24h) gesetzt ist wird das Menü gar nicht mehr ausgegeben. Nicht sofort und "überall" aber sporadisch wenn man verschiedene Seiten aufgerufen hat. Es ist da kein Muster zu erkennen. Auch ist das verhalten in Firefox und Chrome unterschiedlich. Vermutlich ist das Chaching-Verhalten unterschiedlich. An der Seitenstruktur wurde nichts geändert. (Verwendete Contao Version 3.5.14)

  34. #34
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Wie hast du dieses Script eingebunden?

  35. #35
    Contao-Nutzer
    Registriert seit
    06.01.2011.
    Beiträge
    87

    Standard

    habe es in eine "subnavigation-right.html5" in den Templates-Ordner gepackt und es wird per {{file::subnavigation-right.html5}} über ein HTML-Modul im Seitenlayout geladen.

  36. #36
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Binde das subnavigation-right.html5 Template lieber folgendermaßen ein:
    1. Benenne das Template auf bspw. mod_subnavigation-right.html5 um.
    2. Erzeuge ein neues Modul vom Typ HTML.
    3. Wähle unter Template-Einstellungen » Individuelles Template das mod_subnavigation-right Template aus.
    4. Füge bei HTML-Code bspw. einfach nur <!-- Subnavigation --> ein.
    5. Binde dieses Modul in dein Seitenlayout ein.

  37. #37
    Contao-Nutzer
    Registriert seit
    06.01.2011.
    Beiträge
    87

    Daumen hoch

    Super! DANKE Spooky es funktioniert!

  38. #38

  39. #39
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das erklärt manches ... Zum einen hatte ich mich gewundert, dass bei mir die Probleme nicht auftraten, zum anderen, dass meine vermeintlich gecachten Seiten (Browser+Servercache) verdächtigerweise des öfteren mal unerwartet neu erzeugt wurden. Ich bin dem nicht weiter nachgegangen, da es sowieso nur ein Eigenprojekt war, um Vereinsmitgliedern ein paar Bilder zur Verfügung zu stellen. Offenbar hängt beides damit zusammen, dass bei meinem Eigenprojekt alle Seiten (mit Ausnahme der 403er Seite) geschützt sind, also eine Anmeldung eines Mitglieds erfordern. Damit werden laut dem obigen Thread die Seiten niemals auf dem Server gecached, sondern ausschliesslich im Browsercache. Im Browsercache steht natürlich auch alles richtig drin, somit gibt es da keine Probleme.

    Gut ist, dass mit der Lösung von Spooky, also die Datei als Template einzubinden, auch bei eingeschaltetem Severcache alles funktioniert wie es soll. Mir bringt es freilich für mein Eigenprojekt nichts, das so abzuändern. Ausser, ich realisiere den Zugriffsschutz anders. Muss ich mal drüber nachdenken, auf Anhieb fällt mir leider nichts passendes ein.

  40. #40
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    267

    Standard

    Dass es keinen Servercache für mitgliedergeschüzte Seiten gibt hat mich damals auch schon gewurmt und daraufhin habe ich dann auch alles von {{file::***}} in ein Modul mit gesondertem Template verlagert.
    War ja auch nur noch mal ein kleiner Rückblick... freut mich immer, wenn ich nicht der einzige bin, dem komische Sachen auffallen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •