Ergebnis 1 bis 16 von 16

Thema: Aktives Akkordeon-Element mittels Hash-Wert in der URL steuern

  1. #1
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard Aktives Akkordeon-Element mittels Hash-Wert in der URL steuern

    Funktioniert ab Contao-Version 3.* (für Contao-Versionen bis einschließlich 3.2.* bitte ersten Punkt bei Variationen beachten).

    Kurzbeschreibung:
    Durch die Modifikation wird ...
    • ... durch die Angabe des Hash-Wertes eines Akkordeon-Elements in der URL festgelegt, welches Element zu Beginn aufgeklappt sein soll.
    • ... der Hash-Wert an das jeweils geöffnete Akkordeon-Element angepasst.
    • ..., sofern andere Links auf der Seite auf den Hash-Wert eines Akkordeon-Elementes verweisen, dieses auch bei Klick auf den Link geöffnet.
    • ... die Änderung des Hash-Wertes in der Browser-History gespeichert, sodass man mittels des Zurück- und Vorwärts-Buttons die Hash-Werte wieder aufrufen kann.

    Demo:
    https://europawochelauf.de/ablauf/ha....html#urkunden

    Vorgehen:
    1. j_accordion.html5 mit unten angefügtem Code erstellen.
    2. Akkordeon-Element wie gewohnt anlegen und dabei eine CSS-ID angeben (z. B. urkunden).
    3. Wird beim Aufruf der Seite nun diese CSS-ID als Hash-Wert übergeben (z. B. https://europawochelauf.de/ablauf/ha....html#urkunden), wird das entsprechende Akkordeon-Element direkt aufgeklappt. (Hinweis: Sofern kein oder ein ungültiger Hash-Wert übergeben wird, wird standardmäßig das erste Element geöffnet.)

    Variationen:
    Um eine der folgenden Variationen zu nutzen, müssen im Code die mit comment alteration # gekennzeichneten Zeilen auskommentiert (oder gelöscht) und bei den mit uncomment alteration # gekennzeichneten Zeilen der Kommentar entfernt werden:
    1. Verwendung des Skriptes bis einschließlich Contao 3.2.*.
    2. Beim Aufruf der Seite von einem separaten Link springt die Seite nicht zu dem zu Beginn geöffneten Element.
    3. Bei keinem oder einem ungültigen Hash-Wert wird kein Element aufgeklappt.
    4. Änderung des Hash-Wertes wird nicht in der Browser-History gespeichert.

    Code:
    HTML-Code:
    <script src="<?php echo TL_ASSETS_URL; ?>assets/jquery/ui/<?php echo $GLOBALS['TL_ASSETS']['JQUERY_UI']; ?>/jquery-ui.min.js"></script><!-- comment for alteration 1 -->
    <!-- <script src="<?php echo TL_ASSETS_URL; ?>assets/jquery/ui/<?php echo JQUERY_UI; ?>/jquery-ui.min.js"></script> --><!-- uncomment for alteration 1 -->
    <script>
    	(function($) {
    		$(document).ready(function() {
    			// var hash = window.location.hash.replace('#', '');
    			// if (hash && $('section#' + hash + '.ce_accordion').length) {
    			//	setTimeout(function() {
    			//		window.scrollTo(0, 0);
    			//	}, 1);
    			// } // uncomment block for alteration 2
    			var chosen = function() {
    				var hash = window.location.hash.replace('#', '');
    				if (hash === '') return null;
    				return document.getElementById(hash);
    			};
    			var active = 0; // comment for alteration 3
    			// var active = false; // uncomment for alteration 3
    			var element = chosen();
    			if (element !== null) {
    				active = $('section.ce_accordion').index(element);
    			}
    			$(document).accordion({
    				// Put custom options here
    				active: active,
    				heightStyle: 'content',
    				header: 'div.toggler',
    				collapsible: true,
    				create: function(event, ui) {
    					ui.header.addClass('active');
    				},
    				activate: function(event, ui) {
    					ui.newHeader.addClass('active');
    					ui.oldHeader.removeClass('active');
    					var id = ui.newHeader.parent().attr('id'),
    						hash = window.location.hash.replace('#', '');
    					if (id && id !== hash) {
    						history.pushState(null, null, window.location.pathname + '#' + id); // comment for alteration 4
    						// history.replaceState(null, null, window.location.pathname + '#' + id); // uncomment for alteration 4
    					}
    				}
    			});
    			$(window).on('hashchange', function() {
    				var element = chosen();
    				if (element !== null) {
    					$(element).children('div.toggler').trigger('click');
    				}
    			});
    		});
    	})(jQuery);
    </script>
    Geändert von Wangaz (10.07.2016 um 15:32 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    13.06.2013.
    Beiträge
    99

    Standard

    Danke für diesen Beitrag Wangaz, genau diese Funktion habe ich lange gesucht!
    Es wäre super wenn sich nun noch das Hashtag je nach geöffneten Akkordeon-Element live mit ändern würde, ist das möglich?

  3. #3
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Habe ich ergänzt. Außerdem wird, sofern andere Links auf der Seite auf den Hash-Wert eines Akkordeon-Elementes verweisen, dieses auch bei Klick auf den Link geöffnet.

  4. #4
    Contao-Nutzer
    Registriert seit
    13.06.2013.
    Beiträge
    99

    Standard

    Supergeil!

    Sollte eine Core Funktion sein meiner Meinung nach

    Wird gleich in meine Contao-Grundinstallation eingebaut!

    Gruß

  5. #5
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Gerne! Habe noch einen kleinen Fehler behoben (aktualisierte Version ist oben).

  6. #6
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Lächelndes Gesicht

    Kleiner Fehler behoben, wegen dem dem aktiven Header nicht die Klasse active zugewiesen wurde.

  7. #7
    Contao-Nutzer
    Registriert seit
    29.11.2010.
    Beiträge
    27

    Standard

    Genau danach habe ich auch schon länger gesucht.
    Bei mir (Contao 3.2.16) sind leider alle Accordions aufgeklappt, und sie lassen sich auch nicht schließen.

    In der DIV-Beschreibung des togglers steht ausser der Klasse "toggler" gar nichts.

    Hat jemand eine spontane Idee, woran das liegen könnte?

    Vielen Dank
    Geändert von therealspiff (18.02.2015 um 19:38 Uhr)

  8. #8
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Da fehlt wohl die Aktivierung des entsprechenden Templates im Layout, j_accordion bzw. moo_accordion
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  9. #9
    Contao-Nutzer
    Registriert seit
    29.11.2010.
    Beiträge
    27

    Standard

    So sieht es zwar aus, aber die Temples sind schon richtig eingebunden.

    Sobald ich das Original-Template überschreibe erhalte ich dieses Verhalten.

  10. #10
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Kannst Du uns den Link zum Anschauen (ggf. per PN) geben?

  11. #11
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Bis Contao 3.2.* muss die erste Zeile
    HTML-Code:
    <script src="<?php echo TL_ASSETS_URL; ?>assets/jquery/ui/<?php echo JQUERY_UI; ?>/jquery-ui.min.js"></script>
    lauten.
    Geändert von Wangaz (19.02.2015 um 08:28 Uhr)

  12. #12
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Weiteren Fehler behoben, der zu einem JavaScript-Fehler führte - vielen Dank an therealspiff!

  13. #13
    Contao-Nutzer
    Registriert seit
    29.11.2010.
    Beiträge
    27

    Standard

    Haha, wofür?
    Vielen Dank für das modifizierte Template.
    Jetzt funktioniert es super. Dieses Feature sollte wirklich standardmäßig implementiert werden.

  14. #14
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Weitere Variation ergänzt: Nicht zu dem zu Beginn geöffneten Element springen.

  15. #15
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Anpassungen gemäß Commit#086ac61 vorgenommen.

  16. #16
    Contao-Nutzer Avatar von Wangaz
    Registriert seit
    23.09.2011.
    Ort
    Hennef, Darmstadt & Saarbrücken
    Beiträge
    53
    Partner-ID
    7622

    Standard

    Fehlende Anpassung 4 wieder hinzugefügt.

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
  •