Search the FirstSpirit Knowledge Base
Hallo zusammen,
sobald man einen Absatz im ContentCreator hinzufügt, bearbeitet oder löscht kommt ist es des öfteren notwendig, die Seite neuzuladen. Das passiert einerseits durch den ContentCreator selbst und andererseits durch den Parameter "reloadPreview" in der Methode "editorId".
Bei einem Reload wird immer an den Seitenanfang gesprungen, was die Seitenpflege auf Dauer, abhängig von der Seitengröße, lästig macht und auch einen Zeitverlust bei größeren Pflegen mit sich bringt. Ich habe folgenden Artikel gefunden, in dem sich mit dem Thema schon einmal befasst wurde: Inedit bei Reload
Darin wurde besprochen, dass das zu dem Zeitpunkt nicht möglich war. Da der Artikel von 2015 ist, schließt das ja nicht aus, dass es heute möglich sein könnte
Ist es möglich, beim Neuladen der Seite an die selbe Stelle zu springen, an der man sich vor dem Reload befunden hat? Gibt es eventuell einen Weg über die Javascript-API einen Reload abzufangen und der URL einen Anker anzuhängen?
Viele Grüße
Martin
Hallo Martin,
ich habe es nicht ausprobiert, aber vielleicht lässt sich das mit ein wenig JavaScript-Magie erreichen.
Du könntest dich ans onscroll-Event hängen und die aktuelle Scroll-Position im Local Storage des Browsers oder als Cookie speichern. Außerdem hängst du dich ans onload-Event. Wenn es ausgelöst wird, prüfst du, ob eine Scroll-Position im Local Storage gespeichert ist und springst an diese Position.
Anstatt die Position "live" zu speichern, könntest du das natürlich auch periodisch alle x Millisekunden machen. Und man könnte im Local Storage auch den Zeitpunkt speichern, wann die Position das letzte Mal gespeichert wurde. Dann hast du die Möglichkeit einen "zu alten" Wert zu ignorieren. Das ganze lässt sich dann natürlich auch pro Seite speichern.
Ich habe es wie gesagt nicht ausprobiert, aber vielleicht bringt dich die Idee weiter. Im Internet findet man auch Beispiele, die diesen Ansatz aufgreifen.
Viele Grüße
Tim
Hallo Martin,
eine derartige OOB-Möglichkeit ist mir nicht bekannt. Da du den konkreten Use-Case allerdings nicht beschrieben hast ,könnte Dir vielleicht folgende Info weiterhelfen. Innerhalb der editorId kannst du nicht nur reloadPreview angeben, sondern potenziell auch reloadElement und somit nur das Austauschen eines Bereiches propagieren. Hilft dir das vielleicht schon bei einigen Anwendungsfällen weiter?
reloadElement: Dieser Parameter ist nur für die Darstellung im ContentCreator relevant.
Standardmäßig wird bei der Änderung auf einer Seite das Element mit der angegebenen „editorId“ neu geladen. Über „reloadElement“ kann hingegen die ID eines HTML-Elements übergeben werden, das nach einer Änderung der Seite geladen werden soll.
Die ID des gewünschten HTML-Elements kann dabei folgendermaßen übergeben werden:
reloadElement:"container"
wobei container der Bezeichner eines Elements ist. Dieser kann beispielsweise über <div id="container">definiert sein.
Viele Grüße,
Daniel
Hallo Daniel,
vielen für den Vorschlag. Der Parameter hilft uns in einigen Fällen weiter.
Die Sache ist, dass wir in manchen Fällen die Seite neu laden müssen, da es sich dabei um Slider handelt, deren Javascript-Aufrufe nicht in dem Absatz selbst liegen. Damit reicht ein Reload des Absatzes alleine leider nicht aus.
Bei den Reloads, die der ContentCreator selbstständig anstößt (beim Neu anlegen, Verschieben oder Löschen eines Absatzes) können wir damit leider auch nicht eingreifen.
Hast du dazu eventuell noch eine Idee?
Viele Grüße
Martin
Hallo Martin,
ich habe es nicht ausprobiert, aber vielleicht lässt sich das mit ein wenig JavaScript-Magie erreichen.
Du könntest dich ans onscroll-Event hängen und die aktuelle Scroll-Position im Local Storage des Browsers oder als Cookie speichern. Außerdem hängst du dich ans onload-Event. Wenn es ausgelöst wird, prüfst du, ob eine Scroll-Position im Local Storage gespeichert ist und springst an diese Position.
Anstatt die Position "live" zu speichern, könntest du das natürlich auch periodisch alle x Millisekunden machen. Und man könnte im Local Storage auch den Zeitpunkt speichern, wann die Position das letzte Mal gespeichert wurde. Dann hast du die Möglichkeit einen "zu alten" Wert zu ignorieren. Das ganze lässt sich dann natürlich auch pro Seite speichern.
Ich habe es wie gesagt nicht ausprobiert, aber vielleicht bringt dich die Idee weiter. Im Internet findet man auch Beispiele, die diesen Ansatz aufgreifen.
Viele Grüße
Tim
Hallo Tim,
den Ansatz habe ich bisher noch gar nicht in Betracht gezogen. Vielen Dank dafür.
Ich werde das bei nächster Gelegenheit mal ausprobieren und mich dann nochmal melden.
Viele Grüße
Martin
Hallo Martin,
benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Tim und Daniel bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Die Idee mit dem Anker finde ich übrigens ganz gut. Vielleicht könnte man da ein Feature Request draus machen.
Viele Grüße
Martin
Hallo Martin,
leider kam ich bisher noch nicht dazu, die Ideen umzusetzen/auszuprobieren. Sobald ich dazu komme, werde ich die Ergebnisse hier mitteilen.
Viele Grüße
Martin
Hallo Martin,
Vielleicht noch als Tipp: man kann im CC auch auf das Neuladen von Elementen gezielt reagieren. Siehe Preview (FirstSpirit Developer-API). Je nachdem wie euer JS aufgebaut ist, könnte man dort dann evtl. auch das JS zum (Neu-)Aufbau des Sliders triggern. Je nach konkretem Konstrukt kann man sich so ggf. das komplette Neuladen der Seite sparen.
Viele Grüße
Michael
Hallo zusammen,
entschuldigt die späte Antwort. Ich kam leider erst heute dazu, die Vorschläge auszuprobieren.
Das Verhalten ließ sich über einen Scroll-Listener und einen Reload-Listener anpassen. Über den Scroll-Listener merken wir uns die aktuelle Scroll-Position. Über den Reload-Listener lesen wir die letzte Scroll-Position aus und springen dorthin.
Vielen Dank für die vielen Ideen und beste Grüße
Martin