Arbeit mit Popup-Ebenen

fuerteventura-2007 schrieb am 19.01.2017 um 22:57 Uhr

Hallo liebes Forum,
(oder sollte ich lieber gleich "Hallo BeRo" schreiben, weil er sich mit dem Thema schon mehrfach auseinandergesetzt hat? ;-))

Ich habe eine Website mit fester Seitengröße, auf der auf einer Seite mehr Content dargestellt werden all als auf die Seite passt. Wegen der festen Seitengröße und da wir Scrollen nicht mögen habe ich es über "Karteireiter" und Ebenen realisiert.

Karteireiter 1 ruft Ebene e1 auf
Karteireiter 2 ruft Ebene e2 auf
Karteireiter 3 ruft Ebene e3 auf

Damit beim Aufruf der Seite gleich Ebene e1 eingeblendet wird (und der Benutzer nicht fragend vor einer leeren Seite sitzt), habe ich im HTML-Body der Seite folgendes Script eingebaut (gefunden mit bestem Dank in diesem Forum ;-)):
<script>
javascript:xr_cpu(8)
</script>

Das klappt auch bestens!

Wenn ich jetzt aber erstmalig auf den Karteireiter 2 auf der Ebene e2 klicke, wird die Ebene e1 nicht ausgeblendet. Danach kann ich alle Ebenen durchklicken und alles funktioniert perfekt. Nur beim ersten Mal gibt es das Problem. Was kann ich tun, um dieses Problem zu lösen?

Und damit ich mal wieder etwas dazulerne noch eine ergänzende Frage:
Die Referenz auf die Ebene e1 (hier: xr_cpu(8)) ergibt sich offensichtlich durch eine interne Benamung aller Ebenen. Ich muss dazu sagen, dass jede Popup-Ebene noch eine eigene Mouse-Over-Ebene hat (für Buttons zum Vor- und Zurückblättern mit Mouse-Over-Effekt).
Dabei nimmt die interne Banamung offenbar keine Rücksicht darauf, in welcher Reihenfolge ich die Ebenen angelegt habe (in der Ebenen-Ansicht). Kann ich die Ebenen in diesem Script auch direkt mit ihrem Namen ansprechen? Das würde den Code etwas lesbarer machen und bei möglichen Erweiterungen vermeidbare Fehler ausschließen.

Ich bedanke mich schon mal im Voraus für die Unterstützung dieses tollen Forums.

Liebe Grüße
Michael

 

 

Kommentare

BeRo schrieb am 20.01.2017 um 16:34 Uhr

[...] habe ich [...] folgendes Script eingebaut [...]

<script> 
javascript:xr_cpu(8) 
</script>

Das ist prinzipiell i. O. Der doppelte Script Start ist aber überflüssig, er kann sogar Probleme machen...
So sollte es aussehen:

<script> 
xr_cpu(8); 
</script>

[...] Wenn ich jetzt aber erstmalig auf den Karteireiter 2 auf der Ebene e2 klicke, wird die Ebene e1 nicht ausgeblendet. [...]

Das Ausblenden ist ja auch eine separate Funktion, die eben auch separat gestartet werden muss...
Das kann mit einem Eintrag in einem Link Feld gemacht werden, z. B. so:

javascript:xr_ppc('xr_xp8');

Damit wird dann die geöffnete Ebene 8 geschlossen. Und wenn Du es ganz perfekt machen möchtest, hängst Du noch den Funktionsaufruf für das Öffnen der gewünschten, neuen Ebene an.
So kann das aussehen:

javascript:xr_ppc('xr_xp8'); xr_cpu(10);

Mit den gekoppelten Funktionsaufrufen wird die Ebene 8 geschlossen und anschließend die Ebene 10 geöffnet.

[...] Kann ich die Ebenen in diesem Script auch direkt mit ihrem Namen ansprechen? [...]

Ja, das geht.

Ausgenommen davon ist nur das Öffnen der Ebene 8, die Du beim Start benötigst. Alle anderen Ebenen können direkt beim Namen genannt werden.
Dazu schreibst Du in ein Link Feld z. B.

popup:close "e8" open "e1"

Damit schließt Du die Ebene mit dem Namen "e8" und öffnest die Ebene mit dem Namen "e1"

Da der Besucher Deiner Site wahlfrei auf einen beliebigen Kartenreiter klicken kann, müsstest Du jedem Link die komplette Liste aller anderen Ebenen zum Schließen mitgeben. Klickt jemand z. B. auf den Kartenreiter "e2" müssen alle anderen Ebenen, die eventuell noch geöffnet sind, geschlossen werden.
Das kann dann so aussehen:

popup:close "e1" close "e3" close "e4" close "e5" close "e6" close "e7" close "e8" open "e2"

Alternativ und besser wäre ein JScript, das Dir die Arbeit abnimmt alle offenen popup Ebenen zu schließen.
Lies Dir dazu mal diesen Thread durch, da habe ich das passendes Script, die JS Funktion "my_CloseAll()" vorgestellt.
Nachteil: Wenn Du die JS Funktion benutzt, kannst Du nicht gleichzeitig (im selben Funkitionsaufruf) die Ebenen beim Namen nennen. 😣

Also, an die Arbeit... 😙

Zuletzt geändert von BeRo am 20.01.2017, 16:37, insgesamt 2-mal geändert.

Auf den Tag genau gehen heute, am 14.08.2021, 10 Jahre online Support für die Community zu Ende.
Ich freue mich auf eine neue, berufliche Herausforderung, die sich gerade ergeben hat. Leider bleibt dann keine Zeit mehr für die Community übrig, aber Ihr seid bei den aktiven Mitgliedern in besten Händen.
Sicher schaue ich auch ab und zu nochmal rein... 🤓

fuerteventura-2007 schrieb am 21.01.2017 um 22:58 Uhr

Hallo BeRo,

und wie ich an die Arbeit gegangen bin 😇!

1. Danke für Deinen Hinweis zur korrekten Java-Script-Syntax... Ich sollte endlich mal vernünftig Java lernen.

2. Mit der Syntax popup:close "e1" close "e3" ... open "e2" habe ich nun die widerspenstige Popup-Ebene, die beim Seitenstart geladen wird, gebändigt. Ist ein bisschen mehr Arbeit, funktioniert aber einwandfrei. Und es gefällt mir, dass ich die Ebenen mit ihrem Namen ansprechen kann a- lles andere ist mir nicht geheuer und zu fehlerträchtig.

Ich habe jetzt nur noch eine Frage:
Die Ebenen habe ich mit der Eigenschaft "Popup automatisch schließen" eingestellt. Also führt jedes Öffnen einer neuen Ebene zum Schließen der davor geöffneten. Wie aber ist es zu erjklären, dass diese Eigenschaft offenbar nicht gilt, wenn - wie in meinem Beispiel - die Ebene e1 beim Laden der Seite per Script geöffnet wird? Oder fehlt da einfach ein Parameter im Script?

Hatte ich eigentlich schon erwähnt, dass ich endlich mal vernünftig Java lernen die sollte... ? 😂

Viele Grüße
Michael

 

BeRo schrieb am 21.01.2017 um 23:26 Uhr

[...] Also führt jedes Öffnen einer neuen Ebene zum Schließen der davor geöffneten [...]

Richtig.

Das gilt aber nur, wenn Du die popup Ebenen auf die "normale" Art öffnest, also mit einem vom WD angebotenen Link zum Öffnen der Ebene. Damit wird vom WD ein Flag gesetzt, das einer der JQ Funktionen, die der WD mitbringt, signalisiert, dass bei einem Klick die popup Ebene geschlossen werden soll.

Wird eine popup Ebene mit einem Script geöffnet, geht diese Eigenschaft verloren (das o.a. Flag wird nicht gesetzt). Jede so geöffnete popup Ebene muss daher mit einem Script (JS Funktion) geschlossen werden. Sie wird nur dann automatisch geschlossen, wenn die entsprechende Seite neu geladen wird, z. B. mit der Funktionstaste F5 oder mit einer JS reload Funktion.

[...] Ich sollte endlich mal vernünftig Java lernen [...]

Das wird Dir nur eingeschränkt helfen, weil das hier benötigte JavaScript keine Programmiersprache ist, wie Java (klick). 😉
JS ist viel einfacher zu lernen und für unsere Zwecke (HTML Seiten mit Funktionen einrichten) sehr viel besser geeignet, weil auf der Client Seite keine Installationen nötig sind.

Dann, auf gutes Gelingen... 😊

Auf den Tag genau gehen heute, am 14.08.2021, 10 Jahre online Support für die Community zu Ende.
Ich freue mich auf eine neue, berufliche Herausforderung, die sich gerade ergeben hat. Leider bleibt dann keine Zeit mehr für die Community übrig, aber Ihr seid bei den aktiven Mitgliedern in besten Händen.
Sicher schaue ich auch ab und zu nochmal rein... 🤓

fuerteventura-2007 schrieb am 22.01.2017 um 15:49 Uhr

Hallo BeRo,

inzwischen funktioniert alles wie es soll - herzlichen Dank für Deine Unterstützung!

Bei einem Punkt benötige ich allerdings noch einmal Deine Hilfe. Ich habe keine Syntax gefunden, mit der ich eine Ebene auf einer anderen als der aktuellen Seite direkt anspringen kann. Kann ich dem Befehl "popup:open "e2 (lock)" noch den Namen der Seite mitgeben, auf der sich diese Ebene befindet?

Viele Grüße
Michael Obser

BeRo schrieb am 22.01.2017 um 22:16 Uhr

[...] Kann ich dem Befehl "popup:open "e2 (lock)" noch den Namen der Seite mitgeben [...]

Nein, das ist leider nicht direkt machbar. 😑

Du kannst aber auf einem Umweg zum Ziel kommen. Dazu weist Du (mit JScript) einer Sitzungsvariablen einen Wert zu. Das kann z. B. auch der Name einer popup Ebene sein, die auf der nächsten Seite geöffnet werden soll.

Die Seite, auf der die benannte popup Ebene geöffnet werden soll, muss beim Öffnen eine JS Funktion ausführen, die prüft, ob der Sitzungsvariablen ein Wert mitgegeben wurde. Wenn ja, wird der Wert (der Name der Ebene) an die Funktion zum Öffnen einer popup Ebene übergeben und die benannte Ebene eingeblendet.

Wie so was prinzipiell geht, das habe ich u. a. hier beschrieben. Für Deinen Fall müssten die gezeigten Scriptlets natürlich angepasst (erweitert) werden... 😉

Auf den Tag genau gehen heute, am 14.08.2021, 10 Jahre online Support für die Community zu Ende.
Ich freue mich auf eine neue, berufliche Herausforderung, die sich gerade ergeben hat. Leider bleibt dann keine Zeit mehr für die Community übrig, aber Ihr seid bei den aktiven Mitgliedern in besten Händen.
Sicher schaue ich auch ab und zu nochmal rein... 🤓

fuerteventura-2007 schrieb am 11.02.2017 um 00:50 Uhr

Hallo BeRo,

ich bin ja ein absoluter Fan, wenn es um die Arbeit mit Ebenen geht. Aber hier stoße ich doch an meine Grenzen...

Ich schreibe diesen Beitrag, um das Thema abzuschließen und weil er vielleicht doch für den einen oder anderen Leser hilfreich ist. So könnte ich einmal etwas von dem zurückgeben, was mir in diesem Forum schon an wertvoller Hilfe zuteil geworden ist.

Ich habe mich letztlich dafür entschieden, statt der Ebenen einzelne Seiten anzulegen. Natürlich bedeutet das, dass ich das Menü entsprechend anpassen muss, um die jeweils aktive Seite im Menü entsprechend anzupassen. Mir scheint das aber unterm Strich der geringere Aufwand zu sein. Da es sich eh um eine mehrsprachige Seite handelt, kann ich ohnehin nicht mit einem durchgängigen Menü auf allen Seiten arbeiten. Ein bisschen zusätzliche Fleißarbeit eben. Dafür kann ich aber interne Verlinkungen ohne zusätzlichen Aufwand "mit Bordmitteln" realisieren. Und da diese häufig genutzt werden, spare ich letztlich doch enorm.

Sollte ich mit diesem Beitrag noch einmal eine kontroverse Diskussion zu diesem Thema angeregt haben, wäre mir das sehr recht ;-). Denn ich glaube, das von mir geschilderte Thema ist gar nicht soooo exotisch und treibt viele Benutzer des Magix WD um...

Viele Grüße
Michael