Hilfe bei DropDown-Menü

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Holger
Site Admin
Posts: 2897
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany
Contact:

Hilfe bei DropDown-Menü

Post by Holger » Thu Sep 13, 2018 9:36 am

Hallo zusammen,

für ein Relaunch unter Beibehaltung der Optik, aber nun mit XH 1.7.2 :) , habe ich mir noch einmal Gedanken über ein DropDown-Menü machen müssen. Die Elternelemente des Menüs sollen alle nicht auf Seiten verweisen, sondern lediglich das Menü öffnen. Also so, wie es zum Beispiel auch bei den Dropdowns in Bootstrap ist. Ich finde das sehr elegant, weil damit die größten "Probleme" mit Touch-Geräten Geschichte sind.
Die nötige li() - Methode war auch schnell gemacht; alle Menüpunkte, die Child-Elemente haben, bekommen jetzt einfach href="#" onclick="return false;".

Es gibt also nun "Seiten", die ausschließlich dazu da sind, einen entsprechenden Menüpunkt anzulegen. Inhalte sollen über diese Einträge nicht ausgeliefert werden. Der Ansatz verursacht jetzt natürlich diverse kleine Problemchen:
  • wenn schon die erste Seite ($s === 0) Kindelemente hat, kommt beim Seitenaufruf ohne Parameter natürlich die inhaltslose Seite. Hier muss also, wenn nicht im Admin-Mode, zur ersten veröffentlichten ( !hide() ) Seite umgeleitet werden.
  • Da man praktisch jede dieser speziellen Seiten auch einfach per Adressleiste aufrufen kann, sollte für diesen Fall, wenn nicht im Admin-Mode, ein 404 geworfen werden.
  • Das ganze soll dynamisch, ohne manuell gesetzte Umleitungen und über mehrere Menüebenen funktionieren.
  • Als Schmankerl soll der User noch einen kleinen Hinweis bekommen, wenn er im Editor solch eine "Spezial" - Seite lädt.
Lauffähig habe ich das halbwegs, zumal Umleiten der ersten Seite im konkreten Fall einfach ohne weitere Abfrage gemacht werden konnte. Das ganze basiert aber auf wüstem jonglieren mit $s und $l in diversen verschachtelten if - Abfragen und in Abhängigkeit von XH_ADM.

Geht das denn aktuell nicht eleganter? Beim kurzen Blick auf XH\Pages kam mir aber noch nicht wirklich die Erleuchtung :? .

LG
Holger

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

Re: Hilfe bei DropDown-Menü

Post by frase » Thu Sep 13, 2018 10:28 am

Hi Ho,
du weißt, dass ich dir bei einer solchen Programmierung nicht helfen kann ... :cry:

Gedanken habe ich mir aber schonmal über ähnliche Sachen gemacht.
Dabei bin ich darauf gekommen, dass es vielleicht in XH einen neuen SEITEN-TYP geben sollte.

Das heißt:
Hat eine Seite Unterseiten, dann sollte man im Pagemanager anklicken können "Nur-Link-Seite" (oder ähnlich).
Es wird dann eine Seite "Nur als Link" (im Menü) generiert - also ohne Inhalt.
Ein neuer Split-Kommentar wäre nötig.
Wird die Seite aufgerufen oder angeklickt, passiert nichts anderes, als ob die Seite angezeigt würde und das Menü verhält sich entsprechend und zeigt die Untermenüpunkte an.
Das ginge dann auch für Nicht-Dropdown-Menüs.
Was allerdings passieren soll, wenn eine solche Seite die erste ist - weiß ich noch nicht.

Das wird dir nicht helfen - ich weiß - passt aber doch genau hierher.

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

Re: Hilfe bei DropDown-Menü

Post by cmb » Thu Sep 13, 2018 10:47 am

Holger wrote:
Thu Sep 13, 2018 9:36 am
Geht das denn aktuell nicht eleganter? Beim kurzen Blick auf XH\Pages kam mir aber noch nicht wirklich die Erleuchtung :? .
Vielleicht geht etwas in dieser Art:

Code: Select all

<?php

function findLeaf(XH\Pages $pages, $n) {
    $children = $pages->children($s);
    if (empty($children)) {
        return $n;
    } else {
        return findLeaf($pages, $children[0]);
    }
}

$newIndex = findLeaf(new XH\Pages, $s);
if ($newIndex !== $s) {
    // redirect or whatever
}
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: Hilfe bei DropDown-Menü

Post by lck » Sun Sep 16, 2018 11:04 am

cmb wrote:
Thu Sep 13, 2018 10:47 am
Holger wrote:
Thu Sep 13, 2018 9:36 am
Geht das denn aktuell nicht eleganter? Beim kurzen Blick auf XH\Pages kam mir aber noch nicht wirklich die Erleuchtung :? .
Vielleicht geht etwas in dieser Art:
...
@Holger: Gibt es da schon eine Lösung? Mich und bestimmt auch andere würde das auch interessieren.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

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

Re: Hilfe bei DropDown-Menü

Post by cmb » Sun Sep 16, 2018 2:55 pm

Folgende cmsimple/userfuncs.php funktioniert mit Einschränkungen wohl:

Code: Select all

<?php

function findLeaf(XH\Pages $pages, $index) {
    $children = $pages->children($index);
    if (empty($children)) {
        return $index;
    } else {
        return findLeaf($pages, $children[0]);
    }
}

XH_afterPluginLoading(function () {
    global $s;

    $pages = new XH\Pages;
    $newIndex = findLeaf($pages, $s);
    if ($newIndex !== $s && !XH_ADM) {
        header('Location: ' . CMSIMPLE_URL . '?' . $pages->url($newIndex), true, 302);
        exit;
    }
});
Was fehlt, ist das Ergänzen zusätzlicher Query-Parameter (z.B. &print). Die 302 Weiterleitung ist suboptimal, aber ein 301 geht wohl nicht, weil dann auch der Admin weiter geleitet würde. :?

Wir sollten vielleicht über Franks Vorschlag mal genauer nachdenken.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

Holger
Site Admin
Posts: 2897
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany
Contact:

Re: Hilfe bei DropDown-Menü

Post by Holger » Mon Sep 17, 2018 6:52 pm

Ihr seid schnell, wie immer :D .
cmb wrote:
Thu Sep 13, 2018 10:47 am
Vielleicht geht etwas in dieser Art
Nicht nur vielleicht. Sehr elegant und viel verständlicher. Ich habe es noch nicht getestet, ein Blick auf den Code sagt mir aber das es die passende Lösung für die "Problemchen" ist. Danke, Christoph, für die Nachhilfe!
lck wrote:
Sun Sep 16, 2018 11:04 am
@Holger: Gibt es da schon eine Lösung?
Ich konnte noch nicht danach schauen, will die Geschichte aber diese Woche abschließen. Die fertig ausgearbeitete Lösung stelle ich dann gerne hier vor.
cmb wrote:
Sun Sep 16, 2018 2:55 pm
Was fehlt, ist das Ergänzen zusätzlicher Query-Parameter (z.B. &print). Die 302 Weiterleitung ist suboptimal, aber ein 301 geht wohl nicht, weil dann auch der Admin weiter geleitet würde. :?

Wir sollten vielleicht über Franks Vorschlag mal genauer nachdenken.
Alle erforderlichen Codeschnipsel wollte ich eigentlich über das Template bereit stellen. Zu diesem Zeitpunkt sind die Plugins ja bereits geladen und XH_afterPluginLoading daher nicht nötig.
Aber warum sollte eine 301 Weiterleitung, im Fall der Umleitung der ersten Seite, denn falsch sein? Im Admin-Mode wird doch eh nichts weitergeleitet. Und für die anderen Eltenseiten, die direkt per Adressleiste aufrufbar bleiben, wollte ich eigentlich einen 404 werfen, da es die Seite so ja auch nicht gibt. Und bei den Query-Parametern bin ich nicht sicher, ob das wirklich bzgl. der umgeleiteten Seiten nötig bzw. sinnvoll ist :? . Im Zweifelsfall übernehme ich sie wohl besser...

Bzgl. Franks Vorschlag: ich bin nicht sicher, wie das mit einer Standard-Navigation funktionieren soll, da ja tatsächlich eine Seite aufgerufen wird, auch wenn nur des Menü nun den Ast mit den Unterseiten anzeigen soll. Welcher Seiteninhalt wird dann nach dem Request angezeigt? Der vorherige funktioniert ja nur dann, wenn bereits eine Seite geöffnet war.
Den Sinn der Sache verstehe ich nicht, wenn es sich nicht um ein Dropdown Menü handelt.
Allerdings könnte man den zusätzlichen Splitkommentar sparen, denke ich. Ein passendes Pagedata-Feld wäre auch eine mögliche (manuelle) Lösung. Auch eventuelle Seitenumleitungen ließen sich mittels Pageparams verwalten.
Aktuell brauche (und bevorzuge) ich aber eine automatische Lösung.

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

Re: Hilfe bei DropDown-Menü

Post by cmb » Mon Sep 17, 2018 8:46 pm

Holger wrote:
Mon Sep 17, 2018 6:52 pm
Aber warum sollte eine 301 Weiterleitung, im Fall der Umleitung der ersten Seite, denn falsch sein? Im Admin-Mode wird doch eh nichts weitergeleitet.
Weil die URLs für Admin- und Nicht-Admin gleich sind. Wurde erst einmal der Nicht-Admin per 301 weitergeleitet, dann leitet der Browser vermutlich auch den Admin gleich weiter.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: Hilfe bei DropDown-Menü

Post by frase » Tue Sep 18, 2018 6:50 am

Holger wrote:
Mon Sep 17, 2018 6:52 pm
Bzgl. Franks Vorschlag: ich bin nicht sicher, wie das mit einer Standard-Navigation funktionieren soll, da ja tatsächlich eine Seite aufgerufen wird, auch wenn nur des Menü nun den Ast mit den Unterseiten anzeigen soll. Welcher Seiteninhalt wird dann nach dem Request angezeigt? Der vorherige funktioniert ja nur dann, wenn bereits eine Seite geöffnet war.
Den Sinn der Sache verstehe ich nicht, wenn es sich nicht um ein Dropdown Menü handelt.
Allerdings könnte man den zusätzlichen Splitkommentar sparen, denke ich. Ein passendes Pagedata-Feld wäre auch eine mögliche (manuelle) Lösung. Auch eventuelle Seitenumleitungen ließen sich mittels Pageparams verwalten.
War von mir nur eine dunkle Gedankenwolke, die mich schon öfters bewegt hat. Keinesfalls zuende gedacht.
Nur ein Link im Menü, der bei Klick die jeweils aktuelle Seite neu lädt und das Untermenü anzeigt.
Oder - falls das vom Templatedesigner vorgesehen ist: Kein Neuladen, sondern nur Untermenü öffnen.
Geht aber nicht, wenn es die erste Seite ist.
Vielleicht ist es eine Anregung für euch.

Holger
Site Admin
Posts: 2897
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany
Contact:

Re: Hilfe bei DropDown-Menü

Post by Holger » Tue Sep 18, 2018 9:49 am

cmb wrote:
Mon Sep 17, 2018 8:46 pm
Weil die URLs für Admin- und Nicht-Admin gleich sind. Wurde erst einmal der Nicht-Admin per 301 weitergeleitet, dann leitet der Browser vermutlich auch den Admin gleich weiter.
Hmm, klar, der Browser cached die 301 - Weiterleitung, zumindest während der Sitzung :( .
Da es sich konkret aber nur um den Sonderfall "erste Inhaltsseite mit Unterseiten" handelt, könnte man im Admin-Mode ja vielleicht einfach einen zufälligen URL-Parameter an die Weiterleitung mit anhängen. Damit müsste dann der eigentlich richtige 301-Status doch verwendbar sein?
Oder nimmt man, der Einfachheit halber, doch gleich 302 :? .

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

Re: Hilfe bei DropDown-Menü

Post by lck » Tue Sep 18, 2018 10:40 am

Holger wrote:
Tue Sep 18, 2018 9:49 am
Da es sich konkret aber nur um den Sonderfall "erste Inhaltsseite mit Unterseiten" handelt, ...
Mal so ein Gedanke. Wenn es nur darum geht, erste Seite hat Unterseiten, so könnte man der ersten Seite eine Seite voranstellen, die veröffentlicht und in der Navigation/Menü nicht angezeigt wird. Beim Aufrufen der Website würde diese dann angezeigt. Um die Startseite dann auch wieder anzeigen zu können, wenn man sich gerade irgendwo auf einer anderen Seite befindet, könnte man im Logo, Webseitennamen oder dergleichen verlinken auf eben diese mit "./". Ich glaube so ist es auch mittlerweile bei den meisten Seiten, die solch ein Menü haben.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

Post Reply