Dela upp dina flöden på flera sidor
Så här delar du upp ett egenbyggt XML-flöde från en landningssida på flera sidor. Parametern bestäms av din egen flödesmall.
Om du skapar ditt eget flöde via en landningssida kan det bli väldigt stort. Riktigt stort. Vissa feed-mottagare vill därför hämta det i mindre portioner istället för som en enda jättestor fil, och det kallas paginering: du delar upp feedet i flera sidor som hämtas en i taget.
Den här guiden förklarar hur paginering fungerar i självbyggda flöden, hur du ställer in det i din flödesmall och vad du bör tänka på när du skickar vidare URL:erna till exempelvis DataFeedWatch, Partner Ads eller Google Merchant Center.
Det viktigaste först: Det finns ingen fast pagineringsparameter för egenbyggda feeds. Det är din egen feedmall som avgör vad parametern heter och hur många produkter som finns på en sida. Shoporama vidarebefordrar helt enkelt alla parametrar från URL:en till mallen.
Så här fungerar ett egenbyggt feed
Ett egenbyggt feed består av två delar:
- En landningssida som avgör vilka produkter som ska ingå. Du hittar den under Innehåll, Landningssidor.
- En XML-mall i ditt tema som bestämmer hur flödet ser ut. Filnamnet skriver du in i fältet XML-filnamn under rubriken Egen XML när du redigerar landningssidan.
Feeden finns sedan på landningssidans adress med .xml tillagt i slutet, t.ex. https://dinshop.dk/mit-feed.xml.
Eftersom det är din mall som bygger upp innehållet är det också den som måste kunna dela upp flödet. Det finns ingen inbyggd sidindelning som aktiveras automatiskt.
Så här paginerar du ditt flöde
Alla parametrar i URL:en är tillgängliga i mallen via variabeln $get. Om du till exempel hämtar ?page=2 kan mallen läsa värdet som $get.page. Du väljer själv namnet: page, side, offset eller något helt annat fungerar lika bra.
Nedan följer ett enkelt exempel med 500 produkter per sida, där sidräkningen börjar vid 0:
<{$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>
De två siffrorna som du skickar till getProducts() är antalet produkter och hur många som ska hoppas över. Sida 0 hoppar över 0, sida 1 hoppar över 500, sida 2 hoppar över 1000 och så vidare. När en sida inte returnerar fler produkter har du nått slutet.
Observera: I feed-mallar måste du använda $get. Om du skriver $smarty.get får du inget resultat, eftersom webbshop-mallar körs i säkert läge. Om ditt tema körs på Smarty 2 måste tilldelningarna dessutom skrivas som <{assign var="page" value=$get.page}>.
Hur många produkter ska det finnas per sida?
Det bestämmer du själv i mallen. Fältet Antal produkter på landningssidan styr visningen av landningssidan som en vanlig HTML-sida, men det används inte automatiskt i ditt eget XML-flöde.
En rimlig utgångspunkt är 300 till 1 000 produkter per sida. Om du har många varianter, omfattande beskrivningar eller många bilder per produkt, välj då det lägre antalet. Tänk på att en sida i flödet kan innehålla fler rader än produkter om din mall skriver en rad per variant.
Hämta alla sidor i ett skript
Om du själv ska hämta flödet från en annan server kan du köra en loop tills en sida inte längre innehåller några produkter:
$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;
}
// spara eller bearbeta innehållet här
$page++;
}
Använd den tagg som markerar en produkt i just ditt flöde. I exemplet är det <item>, men det kan också vara <product> eller något helt annat.
Var uppmärksam på skillnaden mellan sida 0 och sida 1
Det vanligaste felet i praktiken är att flödet och mottagaren inte är överens om var räkningen börjar. Om din mall börjar vid 0, medan feedmottagaren hämtar sida 1, 2, 3 och så vidare, saknas de första produkterna i feedet helt utan att någon får ett felmeddelande.
Var därför uppmärksam på två saker:
- URL:en utan parameter motsvarar den första sidan, eftersom mallen vanligtvis återgår till 0. Vissa feedmottagare hämtar just den som första sida och börjar sedan vid 1.
- Om du hellre vill räkna från 1, dra då bort 1 i mallen: <{$offset = ($page - 1) * $per_page}>. Då stämmer det med mottagare som alltid börjar på sida 1.
Kontrollera alltid efter konfigurationen att den första produkten på första sidan faktiskt är den första produkten på landningssidan.
Hastighet: flödet byggs automatiskt i bakgrunden
Om du hämtar feed-URL:en utan parametrar levererar Shoporama en färdigbyggd fil. Den byggs automatiskt i bakgrunden när dina produkter har ändrats, och den rensas också när du redigerar själva landningssidan. Därför är hämtningen utan parametrar både snabb och skonsam, oavsett hur stort feedet är.
Om du skickar med parametrar kan svaret inte hämtas från den filen, eftersom du då begär något annat än hela feedet. Den typen av hämtningar genereras därför på plats. Det är helt okej när varje sida endast innehåller en del av katalogen, men det är också anledningen till att det inte lönar sig att dela upp feedet om mottagaren utan problem kan ta emot det i ett stycke.
Tips: Om din feedmottagare inte behöver sidindelning, ge dem den rena URL:en utan parametrar. Det är det snabbaste och mest stabila sättet att hämta en stor feed.
Flöden som inte kan pagineras
Sidindelning gäller endast flöden som du själv skapar med en XML-mall. Två andra flödestyper i Shoporama kan inte delas upp, och det behövs inte heller:
- Google Shopping-feeden på en landningssida (adressen som slutar på .rss) innehåller alltid alla produkter på landningssidan och skapas automatiskt i bakgrunden.
- Produkt feeds under Produkter skapas också i bakgrunden och levereras alltid som en samlad fil. Läs mer i artikeln Skapa dina egna feeds.
Sidindelning på landningssidor och blogg
Vanliga landningssidor och din webbutiks blogg har däremot en fast parameter som fungerar utan att du behöver göra något: ?p=, där räkningen börjar på 0.
https://dinshop.dk/min-landingsside (samma som ?p=0)
https://dinshop.dk/min-landingsside?p=1 (andra sidan)
https://dinshop.dk/blog?p=1 (andra sidan i bloggen)
På landningssidor styrs antalet per sida av fältet Antal produkter, dock högst 500 åt gången. Bloggen visar 10 inlägg per sida. Det är endast dessa HTML-sidor som använder ?p=. I ditt eget XML-flöde har parametern ingen betydelse, såvida inte din mall själv läser av den.
Vanliga frågor
Vilken parameter ska jag använda för mitt flöde?
Den som din feed-mall läser. Om du har låtit en utvecklare skapa temat, fråga dem eller titta i den XML-fil som nämns i fältet XML-filnamn på startsidan. De vanligaste är ?page= och kombinationen ?limit= och ?offset=.
Jag får samma innehåll på alla sidor. Vad är fel?
Då läser din mall inte parametern. Hämta två sidor och jämför de första produkterna på varje sida: om de är identiska ignorerar mallen sidindelningen och visar hela katalogen varje gång. Detta måste korrigeras i själva mallen, som visas i exemplet ovan. Alternativt kan du helt enkelt hämta flödet utan parametrar som en enda fil.
Börjar sidräkningen vid 0 eller 1?
Det bestäms av din mall. Standardexemplet ovan börjar vid 0, där den parameterlösa URL:en är den första sidan. Se till att feedmottagaren börjar på samma ställe, annars hoppas den första delen av produkterna över.
Hur vet jag att jag har hämtat alla sidor?
När en sida inte längre innehåller några produkter finns det inga fler. Avsluta slingan där. Du kan också låta mallen skriva ut det totala antalet med $landing_page->getProductCount(), så att mottagaren kan räkna ut antalet sidor i förväg.
Får jag dubbletter om en produkt byter sida under tiden?
Det kan hända om produkter läggs till eller tas bort medan du hämtar sidorna. Sannolikheten är liten, men om du vill vara helt säker bör du hämta alla sidor i snabb följd eller ta bort dubbletter utifrån produkt-id efter att du har samlat in dem. Observera att vissa feedverktyg inte själva tar bort dubbletter, och att ett upprepat produkt-id kan leda till att t.ex. Meta avvisar hela feedet.
Kan jag skicka en samlad URL till Google Merchant Center?
Ja. Skicka feed-URL:en utan parametrar, så får du hela feedet som en enda fil. Sidindelning är endast nödvändig om mottagaren uttryckligen begär det.
Behöver jag överhuvudtaget dela upp mitt feed idag?
Sällan. Eftersom den parameterfria hämtningen levereras som en färdig fil går det snabbt att hämta även mycket stora feeds. Dela upp den endast om mottagaren kräver det, eller om du hämtar feedet till ett system som inte klarar av en enda stor fil.
Kan jag använda samma sak för CSV eller JSON?
Fältet på landningssidan heter XML-filnamn, men mallen kan skriva precis det format du vill, inklusive CSV eller JSON. Om du behöver ett riktigt CSV- eller JSON-flöde utan att själv skriva en mall är Produktflöden oftast den enklare vägen.
Vad gör jag om min annonspartner inte kan hantera flera URL:er?
Ge dem då den parameterfria URL:en som innehåller hela flödet. Om sidorna slutligen ska sammanställas hos dig själv måste du komma ihåg att ta bort XML-rubriken från sida två och framåt, så att filen förblir giltig XML.
Behöver du hjälp? Kontakta oss på support@shoporama.dk.
Relaterade artiklar
Skapa dina egna flöden
Guide till hur du bygger dina egna produktflöden i CSV-, XML- eller JSON-format med Shoporamas anpassade flödesfunktion.
Konfigurera Google Shopping-feed
Guide till hur man konfigurerar Google Shopping-feeden i Shoporama: kategorier, anpassade etiketter, produkt-ID och katalogmatchning samt lands-...
Priceshape feed
Guide till hur du sätter upp en Priceshape-feed på din Shoporama-webbshop via en XML-fil och en landningssida.
Inkludera färg och storlek i Partner Ads-flödet
Guide till hur du lägger till färg, storlek och kön i ditt Partner Ads-flöde i Shoporama via produktprofiler och extra fält.
Bilder på landningssidor
Så här laddar du upp bilder till en Shoporama-landningssida och visar dem korrekt i ditt tema med getImages() och getSrc().
Blogg länkad till din butik
Komplett guide till bloggfunktionen i Shoporama - skapa inlägg, schemalägg publicering, länka produkter, optimera för sökmotorer och använd...
Relaterade funktioner
Anpassade flöden
Skapa anpassade produktfeeds i XML, JSON eller CSV. Välj fält, filtrera produkter, expandera varianter och dela upp feeds i sidor.
Flöden
Färdiga feeds för Google Shopping, Pricerunner, Partner Ads, Kelkoo och TradeTracker. Eller bygg dina egna anpassade feeds i XML eller CSV.