Ergebnis 1 bis 18 von 18

Thema: Navigation Template li.submenu weitere CSS-Klasse hinzfügen

  1. #1
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard Navigation Template li.submenu weitere CSS-Klasse hinzfügen

    Wie lässt sich im Template mod_navigation bei einem Listenpunkt mit Unterpunkten, also li.submenu,( das ja eine weitere ul enthält), eine zusätzliche Klasse .toggle hinzufügen?

    Also li.submenu .toggle, wenn Untermenüs (ul.level_2, ul_level_3 etc.) vorhanden sind?

  2. #2
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.745
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du kannst Dir das im Template nav_default doch anschauen. Ist ja quasi schon vorbereitet
    Den Konstrukt

    Code:
    <?php if (!empty($item['subitems'])) echo ... ?>
    dort einsetzen, wo Du etwas für Navigationspunkte mit Untermenüs anders ausgegeben haben möchtest.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  3. #3
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Danke, wie müsste ich das Template genau abändern?

    Hier der bisherige Code von dem Template vor der Änderung:


    PHP-Code:
    <!-- indexer::stop -->
    <nav class="<?= $this->class ?> block"<?= $this->cssID ?><?php if ($this->style): ?> style="<?= $this->style ?>"<?php endif; ?> itemscope itemtype="http://schema.org/SiteNavigationElement" role="navigation">
        



        

      <?php if ($this->headline): ?>
        <<?= $this->hl ?>><?= $this->headline ?></<?= $this->hl ?>>
      <?php endif; ?>

      <a href="<?= $this->request ?>#<?= $this->skipId ?>" class="invisible"><?= $this->skipNavigation ?></a>

      <?= $this->items ?>

      <a id="<?= $this->skipId ?>" class="invisible">&nbsp;</a>

    </nav>
    <!-- indexer::continue -->
    Wo genau müsste da die Anweisung eingebunden werden, damit die Listenpunkte mit Untermenüs die Klasse .toggle bekommen?

    PHP-Code:
    <?php if (!empty($item['subitems'])) echo ... ?>
    Hintergrund der ganzen Sache ist, daß die Navigationspunkte, die Untermenüs / Unterpunkte enthalten, diese Unterpunkte per Klick/Touch ausklappen / ausfahren bzw. bei erneutem Klick/Touch wieder einfahren. Eine Art Schalter.

    Ein Beispiel dazu ist hier zu sehen, wenn man auf die Referenzen klickt:
    Demo-Beispiel

  4. #4
    Contao-Fan
    Registriert seit
    03.01.2012.
    Beiträge
    813

    Standard

    Ist das überhaupt das richtige Template? Ich sehe dort keine Ausgabe von Listenpunkten, also <li>

    Und kannst du es nicht anders lösen, ohne die .toggle Klasse? Indem du im Javascript-Aufruf statt .toggle den Selektor ul.level_2 usw. angibst

  5. #5
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.745
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von dazzle89 Beitrag anzeigen
    Ist das überhaupt das richtige Template? Ich sehe dort keine Ausgabe von Listenpunkten, also <li>
    Das ist natürlich nicht das richtige Template. Wie oben geschrieben wird das im Template nav_default.html5 und nicht wie vom TO oben gepostetet in mod_navigation.html5 festgelegt.

    Zitat Zitat von Schnippel Beitrag anzeigen
    Wo genau müsste da die Anweisung eingebunden werden, damit die Listenpunkte mit Untermenüs die Klasse .toggle bekommen?
    Bei den Listenelementen in der Klasse und zwar für den aktiven als auch im inaktiven Zustand.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  6. #6
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Und kannst du es nicht anders lösen, ohne die .toggle Klasse? Indem du im Javascript-Aufruf statt .toggle den Selektor ul.level_2 usw. angibst
    Das probiere ich auch grad aus.

    Basierend auf folgendem Tutorial: https://blog.kulturbanause.de/2016/0...on-mit-jquery/

    Die Demo-Seite des Tutorial ist HIER

    Basierend auf dem Jquery-Code von dem Tutorial habe ich das vesucht auf das Contao-Navigations-Template mod_navigation anzupassen.
    Ich habe da folgenden Code, der aber nicht funtkioniert:

    Code:
    $('nav.mod_navigation > ul > li.submenu').click(function(e) {
     e.stopPropagation();
     $(this).toggleClass('sub-menu-open');
     var $el = $('ul',this);
      $('.mod_navigation > ul > li >.level_2').not($el).slideUp();
      $('.mod_navigation > ul > li >.level_2').not($el).parent().parent('li').removeClass('sub-menu-open');
     $el.stop(true, true).slideToggle(400);
    });
    Dieser Code liegt in der Datei files/js/touch.js
    welche ich dann in den Layout-Einstellungen unter dem Punkt "zusätzliche Head-Tags"
    wie folgt eingebunden habe:
    HTML-Code:
    <script src=”/files/js/touch.js"></script>
    Ich vermute mal, daß an dem von mir veränderten JS-Code etwas noch nicht stimmig ist.
    Wo könnte der Fehler liegen?
    Geändert von Schnippel (27.09.2017 um 14:18 Uhr)

  7. #7
    Contao-Fan
    Registriert seit
    03.01.2012.
    Beiträge
    813

    Standard

    Für mich sieht der JS-Code richtig aus, kann man aber erst genau sagen, wenn man z.B. einen Link zu deiner Seite hätte.

    Ist die Datei auch definitiv richtig eingebunden? Vielleicht ist ja der Pfad falsch. Das würde ich erstmal prüfen. UND ob jQuery eingebunden ist.

    Ansonsten das Template bearbeiten, wie von mlweb beschrieben.

  8. #8
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Betrifft Änderung im nav_default.html5:
    Bei den Listenelementen in der Klasse und zwar für den aktiven als auch im inaktiven Zustand
    Wäre die Einbindung so richtig?

    Code:
    <ul class="<?= $this->level ?>">
      <?php foreach ($this->items as $item): ?>
      
       <?php if (!empty($item['subitems'])) echo 'class="toggle"' ?> 
       
        <?php if ($item['isActive']): ?>
        
          <li class="<?= $item['class'] ?>"><strong class="<?= $item['class'] ?>"<?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?>
          
          <?php if (!empty($item['subitems'])) echo 'class="toggle"' ?> 
          
           itemprop="name"><?= $item['link'] ?></strong><?= $item['subitems'] ?>
          
          </li>
        <?php else: ?>
          <li<?php if ($item['class']) echo ' class="' . $item['class'] . '"'; ?>><a href="<?= $item['href'] ?: './' ?>" title="<?= $item['pageTitle'] ?: $item['title'] ?>"<?php if ($item['class']) echo ' class="' . $item['class'] . '"'; ?><?php if ($item['accesskey']) echo ' accesskey="' . $item['accesskey'] . '"'; ?><?php if ($item['tabindex']) echo ' tabindex="' . $item['tabindex'] . '"'; ?><?php if ($item['nofollow']) echo ' rel="nofollow"'; ?><?= $item['target'] ?><?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?> itemprop="url"><span itemprop="name"><?= $item['link'] ?></span></a><?= $item['subitems'] ?></li>
        <?php endif; ?>
      <?php endforeach; ?>
    </ul>

  9. #9
    Contao-Fan
    Registriert seit
    03.01.2012.
    Beiträge
    813

    Standard

    So ist es falsch. Du möchtest die Klasse doch dem <ul> zuordnen? Und das <ul> wird in der ersten Zeile geschlossen. Es gehört also in die erste Zeile, etwa so:

    Code:
    <ul class="<?= $this->level ?><?php if (!empty($item['subitems'])) echo " toggle"; ?> ">

  10. #10
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Das wird aber auch nicht funktionieren, da der $item erst eine Code-Zeile später in

    PHP-Code:
    <?php foreach ($this->items as $item): ?>
    festgelegt wird.

    Edit: Tippfehhler korrigiert
    Geändert von fiedsch (27.09.2017 um 15:05 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  11. #11
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Und wie genau (in welcher Zeile, an welcher Stelle) muß das eingebunden hier in dem Code (nav_default.html5)?

    PHP-Code:
    <ul class="<?= $this->level ?>">
      <?php foreach ($this->items as $item): ?>
        <?php if ($item['isActive']): ?>
          <li class="<?= $item['class'?>"><strong class="<?= $item['class'?>"<?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'?> itemprop="name"><?= $item['link'?></strong><?= $item['subitems'?></li>
        <?php else: ?>
          <li<?php if ($item['class']) echo ' class="' $item['class'] . '"'?>><a href="<?= $item['href'] ?: './' ?>" title="<?= $item['pageTitle'] ?: $item['title'?>"<?php if ($item['class']) echo ' class="' $item['class'] . '"'?><?php if ($item['accesskey']) echo ' accesskey="' $item['accesskey'] . '"'?><?php if ($item['tabindex']) echo ' tabindex="' $item['tabindex'] . '"'?><?php if ($item['nofollow']) echo ' rel="nofollow"'?><?= $item['target'?><?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'?> itemprop="url"><span itemprop="name"><?= $item['link'?></span></a><?= $item['subitems'?></li>
        <?php endif; ?>
      <?php endforeach; ?>
    </ul>

  12. #12
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.745
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich verwende so etwas ähnliches mit einem zusätzlichen Element und eigenem js innerhalb von li

    Code:
    ...
    <li class="<?= $item['class'] ?>"><strong class="<?= $item['class'] ?>"<?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?> itemprop="name"><?= $item['link'] ?><?php if (!empty($item['subitems'])) echo '<button class="dropdown_toggle" aria-expanded="false"><span class="invisible">Untermenü öffnen</span></button>'; ?></strong><?= $item['subitems'] ?></li>
    
    ...
    Die Anregung zu dieser Lösung stammt übrigens von Peter Müller.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  13. #13
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Die Anregung zu dieser Lösung stammt übrigens von Peter Müller.
    Handelt es sich dabei um das Tutorial bei Video2Brain:
    CSS: Responsive Flexbox-Layouts für Profis > Die etwas andere Dropdown-Navigation ?

    Also müsste ich das Contao-Template nav_default.html5 mit dem hier ROT markierten so wie zu sehen ergänzen,
    damit das Beispiel von dem Tutorial in Contao funktioniert?

    Code:
    <ul class="<?= $this->level ?>">
      <?php foreach ($this->items as $item): ?>
        <?php if ($item['isActive']): ?>
    
    <li class="<?= $item['class'] ?>"><strong class="<?= $item['class'] ?>"<?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?> itemprop="name"><?= $item['link'] ?>
    <?php if (!empty($item['subitems'])) echo '<button class="dropdown_toggle" aria-expanded="false"><span class="invisible">Untermenü öffnen</span></button>'; ?></strong><?= $item['subitems'] ?></li>
          
    
    
    
        <?php else: ?>
          <li<?php if ($item['class']) echo ' class="' . $item['class'] . '"'; ?>><a href="<?= $item['href'] ?: './' ?>" title="<?= $item['pageTitle'] ?: $item['title'] ?>"<?php if ($item['class']) echo ' class="' . $item['class'] . '"'; ?><?php if ($item['accesskey']) echo ' accesskey="' . $item['accesskey'] . '"'; ?><?php if ($item['tabindex']) echo ' tabindex="' . $item['tabindex'] . '"'; ?><?php if ($item['nofollow']) echo ' rel="nofollow"'; ?><?= $item['target'] ?><?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?> itemprop="url"><span itemprop="name"><?= $item['link'] ?></span></a><?= $item['subitems'] ?></li>
        <?php endif; ?>
      <?php endforeach; ?>
    </ul>

  14. #14
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.745
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Schnippel Beitrag anzeigen
    Handelt es sich dabei um das Tutorial bei Video2Brain:
    CSS: Responsive Flexbox-Layouts für Profis > Die etwas andere Dropdown-Navigation ?
    Ich meine ja.

    Zitat Zitat von Schnippel Beitrag anzeigen

    Also müsste ich das Contao-Template nav_default.html5 mit dem hier ROT markierten so wie zu sehen ergänzen,
    damit das Beispiel von dem Tutorial in Contao funktioniert?
    [/CODE]
    Im Prinzip ja, aber soweit ich mich erinnere habe ich das Beispiel etwas angepasst (css und js). Definitiv sind da ein paar Klassen anders als bei Peter Müller und ich habe auch das javascript an die Gegebenheiten des Projektes angepasst. Bei dem Projekt gab es noch ein paar Besonderheiten/Sonderwünsche zu erfüllen. Link kann ich aber nicht posten - Auftragsarbeit für eine Agentur.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




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

    Support Contao

    Standard

    Habe ich das jetzt richtig verstanden, du möchtest dort, wo die Klasse submenu ausgegeben wird zusätzlich toggle haben?

    Das ginge im nav_default so
    PHP-Code:
    ...
    <?php foreach ($this->items as $item): 
      
    $item['class'] = str_replace('submenu''submenu toggle'$item['class'] ); // nur diese Zeile ist neu
    ?>
    ...
    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

  16. #16
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Habe ich das jetzt richtig verstanden, du möchtest dort, wo die Klasse submenu ausgegeben wird zusätzlich toggle haben?
    Danke, die Lösung funktioniert.
    Damit wäre der erste Schritt getan, indem alle li mit .submenu jetzt die Klasse .toggle dazu bekommen.

    Jetzt sollen diese li, wenn auf sie geklickt wird, die Klasse .toggle-on dazu bekommen.
    Gleichzeitig sollen die Untermenüs bei Klick aufklappen, und die ul.level_2 die Klasse .toggled-on erhalten.

    Bei wiederholten Klick auf die li soll sich das Untermenü wieder schließen und die eben vergebenen Klassen .toggle-on / .toggled-on wieder verschwinden.

    Dazu hier ein Code, der aber irgendwie bei mir nicht funktioniert:

    Code:
    ( function( $ ) {
    	// Drastically modified from the function in the WordPress Twenty Fifteen theme
    	// Original source: https://github.com/WordPress/WordPress/blob/master/wp-content/themes/twentyfifteen/js/functions.js
    
    	$( '.toggle' ).click( function( e ) {
    		var _this = $( this );
    		e.preventDefault();
    		_this.toggleClass( 'toggle-on' );
    		_this.parent().next( 'ul.level_2' ).toggleClass( 'toggled-on' );
    		_this.attr( 'aria-expanded', _this.attr( 'aria-expanded' ) === 'false' ? 'true' : 'false' );
    		_this.html( _this.html() === '<span class="screen-reader-text">Untermenü öffnen</span>' ? '<span class="screen-reader-text">Untermenü schließen</span>' : '<span class="screen-reader-text">Untermenü öffnen</span>' );
    	} );
    
    })( jQuery );
    Dieser Code liegt in der Datei files/js/nav_toggle.js
    welche ich dann in den Layout-Einstellungen unter dem Punkt "zusätzliche Head-Tags"
    wie folgt eingebunden habe:

    Code:
    <script src=”/files/js/nav_toggle.js"></script>

    Woran kann das liegen, daß dies mit den hinzufügen der Klassen .toggle-on und .toggled-on nicht funktioniert?
    Das Ganze soll dann auch für die 3. Ebene mit ul.level_3 ebenfalls möglich sein.
    Wie liese sich sowas umsetzen?

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

    Support Contao

    Standard

    Wenn du selber programmierst, dann brauchst du auch, wie @dazzle89 oben bereits erwähnte, die Klasse toggle nicht.

    Ist zwar schön, dass du selber was programmieren möchtest, aber ich empfehle dir die Erweiterung [mobile_menu] zu benutzen. Andernfalls würde das hier in nem JS/jQuery Tutorial ausarten. Der Entwickler Kamil hat ja mehr oder weniger den gleichen Ansatz gehabt und das bereits programmiert 1. Und sowas kann lange dauern und wird auch immer wieder auf Bugs gecheckt. Wieso also das Gleiche nochmal machen, außer zum Lernen?

    Wenn du es lernen möchtest, dann schau dir jQuery an und spiele damit herum. Elemente finden, Gruppen von Elementen, get und set von Attributen, CSS ..., Eventlistener aufsetzen ... Du kannst direkt im FF mit den Devtools im Tab JS-Umgebung damit rumspielen. console.clear(); leert die Konsole und mit console.log(myVar); können Objekte in der Konsole gedebuggt werden.

    1 Bei mobile_menu kann man den obersten Punkt sogar als Seite benutzen - erster Klick öffnet das Dropdown, zweiter Klick geht zur Seite.
    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

  18. #18
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Zitat Zitat von Schnippel Beitrag anzeigen
    Woran kann das liegen, daß dies mit den hinzufügen der Klassen .toggle-on und .toggled-on nicht funktioniert?
    Z.B. weil

    • Dein JS einen Fehler hätte
    • Dein JS niicht gefunden wird
    • Dein JS nicht zu der HTML-Struktur passt, die Dir Contao erzeugt


    Wie findest Du das heraus? Verwende die Entwickler-Werkzeuge Deines Browsers und schau nach!
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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