Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle,
Zitat:
Was ich auch nicht verstanden habe, was eine individuelle CSS-Id für jeden Reiter bewirken soll.
Das ermöglicht erst das gezielte Öffnen eines Tabs, wenn man die Seite verlinkt und einen Ankernamen (fragment identifier, hash) mitgibt. In meinem Beispiel oben haben die 4 Panele die Ids pane-text, pane-links, pane-form und pane-gallery. Rufe ich dann "Reiter.html#pane-form" auf, dann wird der 3. Reiter aufgeklappt, egal ob ein Cookie gesetzt ist (evtl. für ein anderes Tab) oder nicht. Dies Feature ist im Original TabControl bereits eingebaut und meine Cookie-Verbesserung ändert das nicht, Ankernamen haben Vorrang vor dem Cookie.
Schaltet der Besucher nun, ohne mit dem Formular zu interagieren, auf den 2. Reiter "Links" um, folgt einem der dort vorhandenen Links und drückt dann den Back-Button, dann wird die Reiter-Seite wieder angezeigt. Dabei sind 2 Fälle zu unterscheiden:
- Euer Code, der location.hash NICHT verändert: da der Ankername noch immer #pane-form lautet, wird das Cookie (das auf pane-links zeigt) ignoriert und der Besucher sieht wieder das Formular, statt der Links, von woher er kam.
- Mein Code, der location.hash ändert: der Ankername ist # (oder #something), kein Panel hat eine solche Id und deshalb wird der Ankername nicht ausgewertet. Stattdessen tut das Cookie seine Wirkung und der Links-Reiter ist offen.
Interagiert der Besucher mit dem Formular oder der Galerie, dann wird der Anker beim Reload gelöscht und nur das Cookie zeigt Wirkung.
Zitat:
Weil es auf einer Seite mehrere Tab-Gruppen geben kann. Dann kann doch ein #something nichts bringen ...
Gutes Argument. Ich habe den Code nochmal überarbeitet (siehe Anhang). Er erwartet jetzt, dass auch das Reiter-Element (Betriebsart Reitergruppe) eine CSS Id bekommt. Dann wird location.hash beim Reload auf diese Id gesetzt. Das führt dazu, dass der Browser zu den Reitern springt, diese also gerade eben sichtbar sind (wenn die Seite nach unten genug Platz hat). Das passiert auch nicht bei jedem Umschalten der Reiter, wie im alten Code, sondern nur noch beim ersten Reload (und nur wenn ein gültiger Anker gesetzt war). Und es funktioniert auch mit mehreren Reitergruppen, weil immer die ID des zur Gruppe gehörigen DIVs herangezogen wird. Die Reitergruppen können in ein und dem selben Artikel sein (funktional verbunden, Öffnen eines Reiters schließt die Reiter auch der anderen Gruppe(n)), oder in mehreren Artikeln im selben oder verschiedenen Layoutbereichen.
Noch eine Bemerkung zu location.hash: ich würde ja am liebsten den hash komplett löschen ... aber das geht nicht, aus mir unerfindlichen Gründen, in keinem Browser und keiner Browserversion. Daran haben sich offenbar schon viele andere Programmierer die Zähne ausgebissen.
Deshalb halte ich das jetzt implementierte Verfahren für das beste Verhalten und es funktioniert auch in den meisten Browsern (Opera, Firefox, IE, Safari) ... nur Google Chrome schießt quer: obwohl der modifizierte hash in der URL korrekt angezeigt wird zaubert Chrome bei einem Back (nach Folgen eines Links) den alten hash wieder hervor und der Besucher landet im falschen Tab, so als ob das Verändern des hash nie stattgefunden hätte. Nach stundenlanger Recherche und Experimenten kann ich nur sagen: Scheiß drauf, Google sollte sich schämen. Safari, der ja auch die WebKit Engine benutzt, verhält sich richtig, der Fehler liegt also vermutlich nicht im WebKit.
Über Test-Berichte, auch mit mehreren Reitergruppen, und vor allem auch mal mit Links in den Panelen, würde ich mich freuen.
LG, Georg
PS1: ich gehe auch davon aus: wer JS erlaubt, der erlaubt auch Cookies
PS2: ich habe bisher nicht mit ineinander verschachtelten Reitergruppen experimentiert. Im Gegensatz zu verschachtelten Akkordeons halte ich das auch nicht für sooo sinnvoll. Auch denke ich, dass der Autor von TabControl so etwas nicht wirklich vorgesehen hat. Zumindest das Feature der Öffnung von Reitern durch Ankernamen würde ja nur für die äußere Ebene funktionieren. Um auch die innere Ebene gezielt zu öffnen bräuchte es Code, der automatisch auch die äußere Ebene an der richtigen Stelle öffnet. Wäre theoretisch natürlich möglich, ich finde aber keinen diesbezüglichen Code. Falls also jemand verschachtelte Reitergruppen verwendet, bitte melden.
PS3: wäre schön, wenn sich auch mal der Entwickler von TabControl kurz äußern würde.
Liste der Anhänge anzeigen (Anzahl: 1)
@soweit_ok
Eigenschaften des CE ... siehe Anhang.
Lass uns bitte hier diskutieren http://www.contao-community.de/showt...ntrol-Autoplay