Onepage_XH

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
lck
Posts: 1544
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Onepage_XH

Post by lck » Wed Jan 02, 2019 10:50 am

Den Fehler konnte ich jetzt beheben, indem ich den Menü-Aufruf mit $hc, 1 ergänzt habe (den Namen my_li ändere ich dann später noch, wenn's funktioniert)

Code: Select all

<?php echo my_li($hc, 1);?>
Aber, die ul wird weiterhin mit der ID ausgegeben.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

lck
Posts: 1544
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Onepage_XH

Post by lck » Wed Jan 02, 2019 11:09 am

lck wrote:
Wed Jan 02, 2019 10:50 am
Aber, die ul wird weiterhin mit der ID ausgegeben.
:) Lösung, diese Zeile ergänzen mit id="onepage_menu"

Code: Select all

return preg_replace('/<ul id="onepage_menu" class="menulevel1"/', '<ul class="onepage_menu menulevel1"', $html, 1);
Scheint alles zu passen. Vielleicht geht's auch noch eleganter/kürzer?
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

cmb
Posts: 13169
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Onepage_XH

Post by cmb » Wed Jan 02, 2019 3:25 pm

lck wrote:
Tue Jan 01, 2019 6:40 pm
Nur den BUG gefixt. Das document.getElementById("onepage_menu") scheint in dem Fall gar nicht geändert werden müssen zu getElementsByClassName("onepage_menu") :?
Das JS ist dazu gedacht, dynamisch die Menuitem-Klasse zu ändern (sdoc(s) vs doc(s). Weiß gar nicht, was passiert, wenn es mehrere gleiche IDs gibt; eventuell ist das JS Verhalten dann Brower spezifisch? Auf jeden Fall sollte da nachgebessert werden, eben auch weil die Klasse unter Umständen bei mehreren Menüs geändert werden sollte.
lck wrote:
Wed Jan 02, 2019 11:09 am
Scheint alles zu passen. Vielleicht geht's auch noch eleganter/kürzer?
Ich vermute, dazu müsste das in Onepage_XH nachgerüstet werden.
Christoph M. Becker – Plugins for CMSimple_XH

cmb
Posts: 13169
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Onepage_XH

Post by cmb » Wed Jan 02, 2019 4:24 pm

Ludwig, bitte probiere mal den folgenden Patch:

Code: Select all

 classes/Li.php |  2 +-
 onepage.js     | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/classes/Li.php b/classes/Li.php
index 68b6e34..909ead1 100644
--- a/classes/Li.php
+++ b/classes/Li.php
@@ -35,7 +35,7 @@ class Li extends XH_Li
 
         $html = parent::renderULStartTags($i);
         if ($l[$i] == 1) {
-            return preg_replace('/<ul class/', '<ul id="onepage_menu" class', $html, 1);
+            return preg_replace('/<ul class="/', '<ul id="onepage_menu" class="onepage_menu ', $html, 1);
         } else {
             return $html;
         }
diff --git a/onepage.js b/onepage.js
index 1469bfa..3b6525c 100644
--- a/onepage.js
+++ b/onepage.js
@@ -277,7 +277,7 @@
         }
 
         function adjustMenuClasses() {
-            var selectedId, menu, menuItems;
+            var selectedId, menus;
 
             function getSelectedId() {
                 var pages, page;
@@ -292,14 +292,16 @@
             }
 
             selectedId = getSelectedId();
-            menu = document.getElementById("onepage_menu");
-            menuItems = menu.getElementsByTagName("li");
-            map(menuItems, function (it) {
-                var anchor, id;
-
-                anchor = it.getElementsByTagName("a")[0];
-                id = anchor.href.split("#")[1];
-                it.className = id === selectedId ? "sdoc" : "doc";
+            menus = getElementsByClassName("onepage_menu");
+            map(menus, function (menu) {
+                var menuItems = menu.getElementsByTagName("li");
+                map(menuItems, function (it) {
+                    var anchor, id;
+    
+                    anchor = it.getElementsByTagName("a")[0];
+                    id = anchor.href.split("#")[1];
+                    it.className = id === selectedId ? "sdoc" : "doc";
+                });
             });
         }
 
(Zeilen mit - am Anfang löschen; Zeilen mit + am Anfang einfügen)

Aus Gründen der Abwärtskompatibilität habe ich #onepage_menu erhalten, obwohl dieses nun vom Plugin selbst nicht mehr benutzt würde.
Christoph M. Becker – Plugins for CMSimple_XH

lck
Posts: 1544
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Onepage_XH

Post by lck » Wed Jan 02, 2019 5:29 pm

cmb wrote:
Wed Jan 02, 2019 4:24 pm
Ludwig, bitte probiere mal den folgenden Patch:
Würde ich gerne machen, aber da gibt's ein Problem. In Onepage_XH 1.0beta2 onpage.js sind gewisse Teile gar nicht enthalten, diese finden sich nur in der Master-Version von onepage.js.
Beispiel, da geht's schon los:

Code: Select all

var selectedId, menu, menuItems;
Dann lade ich mir mal die Master-Version :?
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

cmb
Posts: 13169
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Onepage_XH

Post by cmb » Wed Jan 02, 2019 5:46 pm

lck wrote:
Wed Jan 02, 2019 5:29 pm
Dann lade ich mir mal die Master-Version :?
Oder probiere diesen Patch für Onepage_XH 1.0beta2:

Code: Select all

 classes/Li.php |  2 +-
 onepage.js     | 22 ++++++++++++----------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/classes/Li.php b/classes/Li.php
index bf526e9..5901326 100644
--- a/classes/Li.php
+++ b/classes/Li.php
@@ -41,7 +41,7 @@ class Onepage_Li extends XH_Li
 
         $html = parent::renderULStartTags($i);
         if ($l[$i] == 1) {
-            return preg_replace('/<ul class/', '<ul id="onepage_menu" class', $html, 1);
+            return preg_replace('/<ul class="/', '<ul id="onepage_menu" class="onepage_menu ', $html, 1);
         } else {
             return $html;
         }
diff --git a/onepage.js b/onepage.js
index b0ea97c..9f7adef 100644
--- a/onepage.js
+++ b/onepage.js
@@ -244,7 +244,7 @@
         }
 
         function adjustMenuClasses() {
-            var pages, i, selectedURL, menu, menuItems;
+            var pages, i, selectedURL, menus;
             
             pages = getElementsByClassName("onepage_page");
             for (i = pages.length - 1; i >= 0; i--) {
@@ -260,15 +260,17 @@
                 selectedURL = encodeURIComponent(pages[0].id);
             }
 
-            menu = document.getElementById("onepage_menu");
-            menuItems = menu.getElementsByTagName("li");
-            forEach(menuItems, function (it) {
-                var a, id;
-
-                a = it.getElementsByTagName("a")[0];
-                if (!a) return;
-                id = a.href.split("#")[1];
-                it.className = (id == selectedURL) ? "sdoc" : "doc";
+            menus = getElementsByClassName("onepage_menu");
+            forEach(menus, function (menu) {
+                var menuItems = menu.getElementsByTagName("li");
+                forEach(menuItems, function (it) {
+                    var a, id;
+    
+                    a = it.getElementsByTagName("a")[0];
+                    if (!a) return;
+                    id = a.href.split("#")[1];
+                    it.className = (id == selectedURL) ? "sdoc" : "doc";
+                });
             });
         }
 
Christoph M. Becker – Plugins for CMSimple_XH

lck
Posts: 1544
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Onepage_XH

Post by lck » Wed Jan 02, 2019 5:57 pm

Jetz habe ich schon die Masterversion umgebaut und getestet, läuft.
Aber das mit den doc und sdoc setzen funktioniert nicht, sollte doch, oder?
Ansonsten: die id onepage_menu ist ja noch vorhanden, da meckert halt der W3c Validator wieder bei doppelter ID.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

cmb
Posts: 13169
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Onepage_XH

Post by cmb » Wed Jan 02, 2019 7:59 pm

lck wrote:
Wed Jan 02, 2019 5:57 pm
Aber das mit den doc und sdoc setzen funktioniert nicht, sollte doch, oder?
Ja, sollte, und hat bei mir auch. Eventuell ist noch das alte JS im Browsercache?
lck wrote:
Wed Jan 02, 2019 5:57 pm
Ansonsten: die id onepage_menu ist ja noch vorhanden, da meckert halt der W3c Validator wieder bei doppelter ID.
Da ist halt abzuwägen, ob man die ID entfernt; bestehende Templates könnten diese unter Umständen als Selektor verwenden, und das sähe dann bei einer neuen Onepage_XH Version schlecht aus. BC break ist eigentlich bei Betas irrelevant, aber da 1.0beta2 schon so lange freigegeben ist … (mea culpa)
Christoph M. Becker – Plugins for CMSimple_XH

lck
Posts: 1544
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Onepage_XH

Post by lck » Thu Jan 03, 2019 10:15 am

cmb wrote:
Wed Jan 02, 2019 7:59 pm
lck wrote:
Wed Jan 02, 2019 5:57 pm
Aber das mit den doc und sdoc setzen funktioniert nicht, sollte doch, oder?
Ja, sollte, und hat bei mir auch. Eventuell ist noch das alte JS im Browsercache?
Funktioniert doch, habe es mal mit einem anderen Template getestet. Bei einem neueren Template mit horizontalem Slider funktioniert es nicht, da das switchen zwischen der Klasse doc und sdoc wohl sollabhängig und zwar in vertikaler Richtung ist.
cmb wrote:
Wed Jan 02, 2019 7:59 pm
Da ist halt abzuwägen, ob man die ID entfernt; bestehende Templates könnten diese unter Umständen als Selektor verwenden, und das sähe dann bei einer neuen Onepage_XH Version schlecht aus.
Ja, das muss vermieden werden. Aber dann bitte so wie vorher in der 1.0beta2 Version, also in der Li.php:

Code: Select all

return preg_replace('/<ul class/', '<ul id="onepage_menu" class', $html, 1);
Eine zusätzliche Klasse onepage_menu macht keinen Sinn und ist auch nicht nötig. Für das Problem mit der doppelten ID bei zweifachem Menüaufruf, habe ich ja jetzt eine Lösung per MyLi.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

frase
Posts: 2545
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH

Post by frase » Thu Jan 03, 2019 11:05 am

lck wrote:
Thu Jan 03, 2019 10:15 am
... da das switchen zwischen der Klasse doc und sdoc wohl sollabhängig und zwar in vertikaler Richtung ist.
Mal ganz abgesehen von eurer Diskussion oben:
Wie ich das verstehe, wird im aktuellen Master scrollabhängig dem aktiven Menüpunkt die Klasse "sdoc" verpasst.
(Habe ich gerade mal mit einem umgebauten fhs-simple probiert -> funktioniert.)
Das finde ich schonmal super!
Wäre es nicht sinnvoller, diese Klasse evtl. "current" (oder vielleicht "active") statt "sdoc" zu nennen? [1]
Oder gibt es da wieder Inkompatibilitäten (BC break)?

Nachtrag:
[1] Eventuell noch eindeutiger benennen, weil sonst Probleme mit anderen Elementen entstehen könnten.
"opCurrent" oder "opMenuCurrent" ...

Post Reply