Notsituation

Bei Notfällen oder Pannen können Sie eine SMS an unsere Notfall-Hotline senden

Telefon für den Bereitschaftsdienst (nur SMS)

+45 29 70 15 95

Senden Sie eine SMS mit den folgenden Informationen:

  • Ihr Name und Ihr Webshop
  • Beschreibung des Problems
  • Ihre Rückrufnummer

Anmerkungen: Dieser Service ist nur für kritische Situationen gedacht, in denen Ihr Webshop ausfällt oder schwerwiegende Probleme aufweist. Für regelmäßigen Support nutzen Sie bitte unsere normalen Supportkanäle.

Teilen Sie Ihre Feeds auf mehrere Seiten auf

So teilen Sie einen selbst erstellten XML-Feed von einer Landingpage auf mehrere Seiten auf. Der Parameter wird durch Ihre eigene Feed-Vorlage festgelegt.

Læsetid: ca. 11 minutter
Schopejer Entwickler

Wenn du deinen eigenen Feed über eine Landingpage erstellst, kann dieser sehr groß werden. Richtig groß. Einige Feed-Empfänger möchten es daher lieber in kleineren Portionen abrufen statt als eine einzige riesige Datei, und das nennt man Paginierung: Du teilst den Feed in mehrere Seiten auf, die nacheinander abgerufen werden.

Dieser Leitfaden erklärt, wie die Paginierung in selbst erstellten Feeds funktioniert, wie du sie in deiner Feed-Vorlage einrichtest und worauf du achten musst, wenn du die URLs beispielsweise an DataFeedWatch, Partner Ads oder das Google Merchant Center weiterleitest.

Das Wichtigste zuerst: Es gibt keinen festen Paginierungsparameter für selbst erstellte Feeds. Deine eigene Feed-Vorlage bestimmt, wie der Parameter heißt und wie viele Produkte auf einer Seite angezeigt werden. Shoporama leitet einfach alle Parameter aus der URL an die Vorlage weiter.

So ist ein selbst erstellter Feed aufgebaut

Ein selbst erstellter Feed besteht aus zwei Teilen:

  • Eine Landingpage, die festlegt, welche Produkte enthalten sind. Du findest sie unter „Inhalt“, „Landingpages“.
  • Eine XML-Vorlage in deinem Theme, die festlegt, wie der Feed aussieht. Den Dateinamen gibst du beim Bearbeiten der Landingpage im Feld „XML-Dateiname“ unter der Überschrift „Eigene XML“ ein.

Der Feed ist dann unter der Adresse der Landingpage mit der Endung .xml zu finden, z. B. https://dinshop.dk/mit-feed.xml.

Da es Ihre Vorlage ist, die den Inhalt erstellt, muss sie auch in der Lage sein, den Feed zu paginieren. Es gibt keine integrierte Paginierung, die automatisch aktiviert wird.

So paginierst du deinen Feed

Alle Parameter in der URL sind in der Vorlage über die Variable $get verfügbar. Wenn du z. B. ?page=2 abrufst, kann die Vorlage den Wert als $get.page lesen. Den Namen wählst du selbst: „page“, „Seite“, „Offset“ oder etwas ganz anderes – alles funktioniert gleichermaßen gut.

Nachfolgend findest du ein minimales Beispiel mit 500 Produkten pro Seite, bei dem die Seitenzählung bei 0 beginnt:

<{$per_page = 500}>
<{$page = $get.page|default:0}>
<{$offset = $page * $per_page}>

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<{foreach $landing_page->getProducts($per_page, $offset) as $product}>
  <item>
    <g:id><{$product->getProductId()}></g:id>
    <title><{$product->getName()|escape}></title>
  </item>
<{/foreach}>
</channel>
</rss>

Die beiden Zahlen, die Sie an getProducts() übergeben, geben die Anzahl der Produkte und die Anzahl der zu überspringenden Produkte an. Seite 0 überspringt 0, Seite 1 überspringt 500, Seite 2 überspringt 1000 und so weiter. Wenn eine Seite keine weiteren Produkte mehr zurückgibt, bist du am Ende angelangt.

Hinweis: In Feed-Vorlagen musst du $get verwenden. Wenn du $smarty.get schreibst, erhältst du keine Ausgabe, da Webshop-Vorlagen im sicheren Modus ausgeführt werden. Läuft dein Theme auf Smarty 2, müssen die Zuweisungen außerdem wie folgt geschrieben werden : <{assign var="page" value=$get.page}>.

Wie viele Produkte sollen pro Seite angezeigt werden?

Das legst du selbst in der Vorlage fest. Das Feld „Anzahl der Produkte auf der Landingpage“ steuert die Darstellung der Landingpage als normale HTML-Seite, wird jedoch nicht automatisch in deinem eigenen XML-Feed verwendet.

Ein sinnvoller Ausgangspunkt sind 300 bis 1000 Produkte pro Seite. Wenn du viele Varianten, umfangreiche Beschreibungen oder viele Bilder pro Produkt hast, wähle die niedrigere Zahl. Beachten Sie, dass eine Seite im Feed durchaus mehr Zeilen als Produkte enthalten kann, wenn Ihre Vorlage pro Variante eine Zeile schreibt.

Lade alle Seiten in einem Skript ab

Wenn du den Feed selbst von einem anderen Server abrufen musst, kannst du eine Schleife ausführen, bis eine Seite keine Produkte mehr enthält:

$page = 0;
while (true) {
    $url = "https://dinshop.dk/mit-feed.xml?page=".$page;
    $xml = file_get_contents($url);

    if (empty(trim($xml)) || stristr($xml, "<item>") === false) {
        break;
    }

    // Speichere oder verarbeite den Inhalt hier
    $page++;
}

Verwende das Tag, das ein Produkt in genau deinem Feed kennzeichnet. Im Beispiel ist es <item>, es könnte aber auch <product> oder etwas ganz anderes sein.

Achte auf die Verschiebung zwischen Seite 0 und Seite 1

Der häufigste Fehler in der Praxis ist, dass sich der Feed und der Empfänger nicht darüber einig sind, wo die Zählung beginnt. Wenn deine Vorlage bei 0 beginnt, während der Feed-Empfänger Seite 1, 2, 3 und die folgenden Seiten abruft, fehlen die ersten Produkte im Feed komplett, ohne dass jemand eine Fehlermeldung erhält.

Achten Sie daher auf zwei Dinge:

  • Die URL ohne Parameter entspricht der ersten Seite, da die Vorlage in der Regel auf 0 zurückfällt. Einige Feed-Empfänger rufen genau diese als erste Seite ab und beginnen dann bei 1.
  • Wenn Sie lieber ab 1 zählen möchten, ziehen Sie in der Vorlage 1 ab: <{$offset = ($page - 1) * $per_page}>. Dann passt es zu Empfängern, die immer bei Seite 1 beginnen.

Überprüfe nach der Einrichtung immer, ob das erste Produkt auf der ersten Seite tatsächlich das erste Produkt auf der Landingpage ist.

Geschwindigkeit: Der Feed wird automatisch im Hintergrund erstellt

Wenn du die Feed-URL ohne Parameter abrufst, liefert Shoporama eine fertig erstellte Datei. Diese wird automatisch im Hintergrund erstellt, sobald sich deine Produkte geändert haben, und sie wird auch gelöscht, wenn du Änderungen an der Landingpage selbst vornimmst. Daher ist der Abruf ohne Parameter sowohl schnell als auch ressourcenschonend, unabhängig davon, wie groß der Feed ist.

Wenn du Parameter mitschickst, kann die Antwort nicht aus dieser Datei stammen, da du dann etwas anderes als das gesamte Feed anforderst. Solche Abrufe werden daher vor Ort erstellt. Das ist völlig in Ordnung, wenn jede Seite nur einen Teil des Katalogs enthält, aber es ist auch der Grund dafür, dass es sich nicht lohnt, das Feed aufzuteilen, wenn der Empfänger es problemlos in einem Stück verarbeiten kann.

Tipp: Wenn dein Feed-Empfänger keine Seitenaufteilung benötigt, gib ihm die reine URL ohne Parameter. Das ist die schnellste und stabilste Art, einen großen Feed abzurufen.

Feeds, die nicht paginiert werden können

Die Seitenaufteilung gilt nur für Feeds, die Sie selbst mit einer XML-Vorlage erstellen. Zwei andere Feed-Typen in Shoporama können nicht aufgeteilt werden, und das ist auch nicht erforderlich:

  • Der Google-Shopping-Feed auf einer Landingpage (die Adresse endet auf .rss) enthält immer alle Produkte auf der Landingpage und wird automatisch im Hintergrund erstellt.
  • Produkt- Feeds unter „Produkte“ werden ebenfalls im Hintergrund erstellt und immer als eine einzige Datei bereitgestellt. Weitere Informationen findest du im Artikel „Erstelle deine eigenen Feeds“.

Seitenaufteilung auf Landingpages und im Blog

Normale Landingpages und der Blog Ihres Webshops verfügen hingegen über einen festen Parameter, der funktioniert, ohne dass Sie etwas tun müssen: ?p=, wobei die Zählung bei 0 beginnt.

https://dinshop.dk/min-landingsside        (entspricht ?p=0)
https://dinshop.dk/min-landingsside?p=1    (zweite Seite)
https://dinshop.dk/blog?p=1                (zweite Seite im Blog)

Auf Landingpages wird die Anzahl pro Seite über das Feld „Anzahl der Produkte“ gesteuert, jedoch maximal 500 auf einmal. Der Blog zeigt 10 Beiträge pro Seite an. Nur diese HTML-Seiten verwenden „?p=“. In Ihrem eigenen XML-Feed hat der Parameter keine Bedeutung, es sei denn, Ihre Vorlage liest ihn selbst aus.

Häufig gestellte Fragen

Welchen Parameter muss ich für meinen Feed verwenden?

Den, den deine Feed-Vorlage ausliest. Wenn du das Theme von einem Entwickler erstellen lassen hast, frag diesen oder schau in die XML-Datei, die im Feld „XML-Dateiname“ auf der Startseite angegeben ist. Die gängigsten sind „?page= “ und die Kombination aus „?limit= “ und „?offset=“.

Ich erhalte auf allen Seiten denselben Inhalt. Was ist falsch?

Dann liest deine Vorlage den Parameter nicht. Rufe zwei Seiten auf und vergleiche die ersten Produkte auf jeder Seite: Sind sie identisch, ignoriert die Vorlage die Seitenaufteilung und gibt jedes Mal den gesamten Katalog aus. Das muss in der Vorlage selbst korrigiert werden, wie im obigen Beispiel gezeigt. Alternativ kannst du den Feed auch einfach ohne Parameter als eine einzige Datei abrufen.

Beginnt die Seitenzählung bei 0 oder 1?

Das legt deine Vorlage fest. Das Standardbeispiel oben beginnt bei 0, wobei die URL ohne Parameter die erste Seite darstellt. Stelle sicher, dass der Feed-Empfänger an derselben Stelle beginnt, da sonst der erste Teil der Produkte übersprungen wird.

Woher weiß ich, dass ich alle Seiten abgerufen habe?

Wenn eine Seite keine Produkte mehr enthält, sind keine weiteren mehr vorhanden. Beende die Schleife an dieser Stelle. Du kannst die Vorlage auch die Gesamtanzahl mit $landing_page->getProductCount() ausgeben lassen, damit der Empfänger die Anzahl der Seiten im Voraus berechnen kann.

Erhalten ich Duplikate, wenn ein Produkt während des Vorgangs die Seite wechselt?

Das kann passieren, wenn Produkte während des Abrufs der Seiten hinzugefügt oder entfernt werden. Die Wahrscheinlichkeit ist gering, aber wenn du ganz sicher gehen willst, rufe alle Seiten kurz nacheinander ab oder entferne Duplikate anhand der Produkt-ID, nachdem du sie gesammelt hast. Beachten Sie, dass einige Feed-Tools Duplikate nicht selbst entfernen und dass eine doppelte Produkt-ID dazu führen kann, dass beispielsweise Meta den gesamten Feed ablehnt.

Kann ich eine einzige zusammengefasste URL an das Google Merchant Center senden?

Ja. Sende die Feed-URL ohne Parameter, dann erhältst du den gesamten Feed als eine Datei. Eine Aufteilung in einzelne Seiten ist nur erforderlich, wenn der Empfänger dies ausdrücklich verlangt.

Muss ich meinen Feed heute überhaupt aufteilen?

Selten. Da der Abruf ohne Parameter als fertige Datei bereitgestellt wird, lassen sich selbst sehr große Feeds schnell abrufen. Teilen Sie das Feed nur auf, wenn Ihr Empfänger dies verlangt oder wenn Sie das Feed in ein System einlesen, das eine einzige große Datei nicht verarbeiten kann.

Kann ich dasselbe für CSV oder JSON verwenden?

Das Feld auf der Landingpage heißt „XML-Dateiname“, aber die Vorlage kann genau das Format schreiben, das du möchtest, einschließlich CSV oder JSON. Wenn du einen echten CSV- oder JSON-Feed benötigst, ohne selbst eine Vorlage zu schreiben, sind Produktfeeds in der Regel der einfachere Weg.

Was mache ich, wenn mein Anzeigenpartner nicht mehrere URLs verarbeiten kann?

Dann gib ihm die URL ohne Parameter, die den gesamten Feed enthält. Wenn die Seiten letztendlich bei dir zusammengefasst werden müssen, denk daran, den XML-Header ab Seite zwei zu entfernen, damit die Datei weiterhin gültiges XML bleibt.

Benötigen Sie Hilfe? Kontaktieren Sie uns unter support@shoporama.dk.