Seite neu laden bei Variantenwahl

Hallo zusammen,

wir nutzen für unsere Produktvarianten Varianten Metafelder mit individuellem Inhalt.

Allerdings aktualisieren sich diese Metafelder nicht automatisch, wenn eine neue Variante ausgewählt wird – stattdessen ist ein Neuladen der Seite nötig. Wir möchten eine schnelle Lösung finden und das automatische Neuladen der Seite einrichten, sobald eine andere Variante gewählt wird, um die Metafelder entsprechend zu aktualisieren.

Bis jetzt konnte ich keinen Beitrag finden, der einen geeigneten Code für unser Theme (Impact) bereitstellt.

Könnte uns jemand dabei unterstützen, indem er einen grundlegenden Code zur Verfügung stellt, der das Neuladen der Seite erzwingt? Und könntet ihr uns auch sagen, wo genau wir diesen Code einfügen müssen?

Vielen Dank im Voraus!

Hey @lsievers

Wenn du es selber programmieren möchtest dann bitte immer in einer Themekopie/Testumgebung zuerst testen und zusammen mit einem Experten/Programmierer denn du möchtest dein tolles Impact Theme (eins der besten!) ja nicht zerschießen. Du kannst ein Backup deines Themes erstellen, bevor man den Code bearbeitet, oder den Code wiederherstellen, falls dies nötig sein sollte. Du könntest auch einen unserer Experten engagieren indem du denen eine E-Mail rüberschießt. Unsere Experten antworten meist sehr schnell.

Änderungen zu deinem Theme Code können auch 1) die Page Loading Speeds negativ beeinflussen und 2) dein Theme aus den Theme Updates ausschließen. Das folgende ist Theme-abhängig, ohne Gewähr und dient lediglich dazu dich in die richtige Richtung zu weisen!

Um das Neuladen der Seite bei der Auswahl einer anderen Produktvariante zu erzwingen, könntest du ein kleines JavaScript-Snippet verwenden. Dieses Skript fängt die Auswahländerung ab und veranlasst die Seite, sich neu zu laden, um die Metafelder entsprechend zu aktualisieren. Der Code könnte etwa so aussehen:

document.addEventListener('DOMContentLoaded', function() {
  const variantSelect = document.querySelector('.variant-select'); // Ersetze '.variant-select' mit der tatsächlichen Klasse deines Varianten-Auswahl-Elements
  if (variantSelect) {
    variantSelect.addEventListener('change', function() {
      location.reload(); // Erzwingt das Neuladen der Seite
    });
  }
});

Diesen Code solltest du in die theme.js Datei deines Shopify-Themes einfügen oder, falls dein Theme dies unterstützt, in einen Abschnitt für benutzerdefinierte Skripte im Theme-Editor hinzufügen. Beachte bitte, dass der Klassenselektor .variant-select entsprechend der tatsächlichen Klassennamen in deinem Theme angepasst werden muss.

Hoffe das hilft dir weiter - lass wissen falls nicht! :wink:


Warum nicht etwas Gamification in das Shop einbauen, um deinen Kunden etwas Fun im Shop anzubieten? Gerne kann ich bei Interesse Tipps dazu geben!

Hast du weitere Fragen zum Shop? Gebe einfach ein Suchbegriff oben in der Suchleiste der Community Landingpage ein, denn das Thema haben wir sehr wahrscheinlich schon besprochen. Halte bitte Ausschau in deiner E-Mail auf Notifications zu Antworten auf deine Fragen in der Community.

Hey @Gabe

vielen Dank für deine ausführliche Antwort und die Tipps.

Der Code funktioniert perfekt! Vielen Dank, das erleichtert unsere Arbeit aktuell enorm.

Viele Grüße! :blush:

Das ist :musical_notes: in meinen :ear: . Freut mich, dass das geklappt hat… :wink:

Moin @Gabe !
Wie immer: vielen Dank für deinen Input!

Ich habe vermutet, dass deine Lösung auch mein Problem lösen könnte, jedoch hat das leider nicht funktioniert.
Hier erstmal der Link zu unserer Produktseite: https://formulize.de/products/products-whey-your-chocolate-dream-protein-600g?variant=47641205965128

Hier sieht man einen Vaterartikel mit verschiedenen Varianten.
Man kann die Varianten anklicken, jedoch bleibt der Artikelname des Vaterartikels gleich.

Mein Wunsch wäre, dass beim Anklicken der Variante auch alle dazugehören Informationen auf der Seite neu geladen werden (URL, Artikelname, Produktbeschreibung etc.). Dazu habe ich jede Variante mit den jeweiligen Meta-Fields als einzelnen Artikel angelegt. Jetzt fehlt mir noch die “Verbindung” zwischen den Artikeln.

Hier hast du ein konkretes Beispiel von den Jungs von Vetain: https://vetain.de/products/vegan-protein-kakao
Da kann man auf die jeweilige Variante klicken und alles andere (URL, Artikelname, Produktbeschreibung etc.) wird direkt aufgerufen.

Genau das möchte ich ebenfalls umsetzen. Ich bin mir ziemlich sicher, dass du die Lösung dafür parat hast!

Danke im Voraus! Ein schönes Wochenende

Christian

Hey @christianfrmlz

Haha ich wünschte ich könnte die Lösung schnell raushauen aber das wird etwas an Coding in einer Testumgebung auf deiner Seite verlangen. Eins steht fest - ein Refresh der Seite um die korrekten Angaben anzuzeigen ist keine gute UX und sollte nicht passieren. Hast du eine App wie Variant Image Automator erwägt? Die kann so etwas und vielleicht spart sie dir 'ne Menge Zeit, Arbeit und Entwicklungskosten.

Ansonsten wird das etwas AJAX verlangen. In deinem Beispiel wo es funzt, gibt es einen initialen Page Refresh bevor die Seite dann in den Browser gecacht wird, was auch nicht unbedingt die beste Lösung ist.

Somit um die PDP und den Produkttitel automatisch zu aktualisieren, wenn eine neue Variante ausgewählt wird, ohne die Seite neu zu laden, AJAX verwenden. Ein JavaScript-Snippet wie das folgende sollte den Artikelname, die URL und die Produktbeschreibung dynamisch aktualisieren können:

document.addEventListener('DOMContentLoaded', function() {
 const variantSelectors = document.querySelectorAll('.product-variant__input');

 variantSelectors.forEach(function(variantSelector) {
   variantSelector.addEventListener('change', function(event) {
     const selectedVariantId = event.target.value;

     // Hier die URL der Produktvariante abrufen
     const variantURL = `/products/products-whey-your-chocolate-dream-protein-600g?variant=${selectedVariantId}`;

     // AJAX Anfrage senden, um die neue Variante abzurufen
     fetch(variantURL)
       .then(response => response.text())
       .then(data => {
         const parser = new DOMParser();
         const htmlDocument = parser.parseFromString(data, 'text/html');

         // Titel aktualisieren
         const newTitle = htmlDocument.querySelector('.product__title').innerHTML;
         document.querySelector('.product__title').innerHTML = newTitle;

         // Beschreibung aktualisieren
         const newDescription = htmlDocument.querySelector('.product__description').innerHTML;
         document.querySelector('.product__description').innerHTML = newDescription;

         // URL ohne Neuladen der Seite ändern
         window.history.pushState({}, '', variantURL);
       })
       .catch(error => console.error('Error:', error));
   });
 });
});

Stelle sicher, dass die HTML-Elemente die richtigen Klassen haben, um von diesem JavaScript-Snippet angesprochen zu werden. Überprüfe auch, ob die Klassennamen im HTML mit denen im JavaScript übereinstimmen. Im obigen Beispiel wird angenommen, dass die Variantenauswahl-Inputs die Class .product-variant__input haben und dass der Titel und die Beschreibung die Klassen .product__title und .product__description haben.

Mit diesem Code sollte die Seite nicht neu geladen werden, sondern nur die relevanten Informationen (Titel, Beschreibung, URL) werden dynamisch aktualisiert, wenn der Benutzer eine neue Variante auswählt.

Super, danke für den Code. Den wird sich mein Kollege mal genauer anschauen! :slightly_smiling_face:

Gestern hat mir der Support diese App empfohlen: Variant Title King: Color, SKU.

Das Problem bei der App war, dass der Vaterartikelname vorhanden bleibt und der Name der jeweiligen Variante einfach hinzukommt (siehe Screenshots im Anhang). Zudem wurde die Beschreibung nicht aktualisiert. Evtl. muss man auch etwas in der App anpassen, sodass die Beschreibung der jeweiligen Variante angezeigt wird.

Das gleiche Problem habe ich ebenfalls bei deiner App-Empfehlung, Variant Image Automator, festgestellt.

Beide Apps sind vom gleichen Entwickler.

FYI: Jeden einzelnen Artikel habe ich bewusst so angelegt, damit unser Shop größer wirkt.

Vielleicht gibt es auch eine andere Möglichkeit, die einfacher ist?

Hab ein schönes Wochenende und bis bald!

Hey @Gabe , könntest du das für uns in einer Testumgebung umsetzen, wenn wir dir eine zur Verfügung stellen?

Hey @christianfrmlz

Leider nein da ich nur der Moderator hier bin, aber poste das in unserem Expertenforum und es wird sich ein Programmierer melden der das für euch machen kann.

Gib da bitte auch alle Infos aus diesem Leitfaden hier.

VG,