Shoporama mallar

Nedan hittar du information om hur du utvecklar ett Shoporama-tema.

En överblick

I allmänhet är ett Shoporama-tema en serie HTML-filer som finns i en mapp på vår ftp-server. Mallspråket i de enskilda filerna är Smarty, som nämns nedan.

Varje mall ger tillgång till ett antal objekt och metoder. Du kan läsa mer om dem i vår Mall-API.

Kontakta oss på support@shoporama.dk om du har några frågor.

Smarty

Motorn i vårt mallsystem är baserad på Smarty.

Vi har version 2.6 installerad av bakåtkompatibilitetsskäl, men vi underhåller den inte längre och vi rekommenderar att alla använder version 4.x. Versionen ställs in under inställningar för butiken.

Observera att denna dokumentation endast tar hänsyn till version 4.x.

Skillnaden mellan standard Smarty och vår är att vi använder <{ och }> som avgränsare. Dvs. syntaxen är:

<h1>Velkommen til <{$webshop->getName()|escape}></h1>

Tips och tricks

Granska innehållet

Hvis du er i tvivl om hvad en variabel er, eller hvad en funktion returerer, kan du køre den igennem var_dump. Hvis du har fat i et objekt vil du altid kunne se hvilke metoder der findes i vores Mall-API.

Du använder var_dump på följande sätt:

<{$order|var_dump}>
Kontrollera objekt

I vissa fall är det relevant att se till att om du använder en variabel som ett objekt, så är den också ett objekt. Annars kommer mallen inte att fungera. Vi ställer in några globala variabler som $product och$webshop och andra. För dessa variabler är det inte nödvändigt. De kan kontrolleras på något av följande sätt:

<{* Typisk tilstrækkelig *}>
<{if $profile}>
	<{$profile->getName()}>
<{/if}>

<{* Lidt grundigere *}>
<{if is_object($profile)}>
	<{$profile->getName()}>
<{/if}>

<{* Meget grundig *}>
<{if is_a($profile, "SafeProfile")}>
	<{$profile->getName()}>
<{/if}>
Felsökning

Om du vill se vilka variabler som finns tillgängliga på den sida du utvecklar kan du sätta Smarty i felsökningsläge och se variablerna i ett nytt fönster. Klistra in följande kod i din mall:

<{debug}>

Läs mer om Smarty4 här: Smarty 4 Dokumentation.

Filens struktur

Du får ftp-åtkomst till din shop och i roten av din katalog lägger du ditt tema. Namnet på mappen är namnet på temat.

Väg Funktionalitet
/{navn} Huvudmapp för ditt tema
/{navn}/components Mapp med komponenter för Page Builder
/{navn}/components/sections.json Lista över vilka avsnitt som kan infogas på vilka sidor
/{navn}/components/tags.json Taggar att använda i temat
/{navn}/components/sections Mapp för de enskilda sektionsfilerna
/{navn}/extensions Tillägg till Shoporamas inbyggda datatyper.
/{navn}/templates Mapp för mallar
/{navn}/templates/mails Mapp för e-postmallar

Namngivningen av filer i /{name}/templates är i allmänhet fri. Det finns dock några få undantag:

Väg Funktionalitet
/{navn}/templates/global.html Den överordnade sidan som innehåller strukturen för hela butiken. Själva innehållet infogas där denna mall visar <{$contents}>, som är en speciell variabel som kommer från index.html nedan. En mycket enkelglobal.html skulle kunna se ut så här:
<!DOCTYPE html>
<html>
<head>
	<title><{$webshop->getName()|escape}></title>
</head>

<body>

	<nav>
		<!-- Din navigation -->
	</nav>

	<div>
		<{$contents}>
	</div>

</body>

</html>
/{navn}/templates/index.html Den här mallen används för att visa innehållet i det du ser nu. D.v.s. en produkt, en landningssida eller korgen etc. Ett förslag på hur det kan se ut är följande:
<{if $inc}>

	<{include file=$inc}>

<{elseif $category}>

	<{include file="category.html"}>

<{elseif $landing_page}>

	<{include file="landing_page.html"}>

<{elseif $product}>

	<{include file="product.html"}>

<{elseif $page}>

	<{include file="page.html"}>

<{elseif $blog_post}>

	<{include file="blog_post.html"}>

<{/if}>
/{navn}/templates/printed_invoice.html Används från admin om du vill skriva ut en följesedel. Innehållet i ordern kommer alltid att finnas i variabeln $order.
/{navn}/templates/mails Mapp för e-postmallar. Måste innehålla följande filer:
Filens namn Innehåll Relevanta variabler
after_purchase.html Om du vill skicka ett e-postmeddelande till dina kunder en tid efter att de har gjort ett köp. $products, $order
basket_mail.html Mail som kan skickas automatiskt om kunden har angett sin e-postadress men inte checkat ut. $basket_url, $basket
in_stock_mail.html E-postmeddelande som kan skickas om en vara är tillbaka i lager och kunden har registrerat sig. $product
invoice_dropshipping.html E-post till dropshipping-leverantör. $products, $order
invoice.html Fakturan för ordern. $order
order_credit.html E-post om ordern är krediterad. $order
order_sent.html E-postmeddelande som skickas när ordern skickas. $order
payment_mail.html Om kunden har slutfört en order men inte slutfört betalningen. $payment_url, $order
product_review_mail.html E-post som kan skickas till kunden om man vill ha recensioner. $order
user-reset-password-mail.html E-post med länk för att återställa lösenord. För att få URL:en använder du $customer->getTokenUrl(). $customer
user-welcome-mail.html Välkomstmeddelande om kunden skapar ett konto i butiken. $customer
return_received.html E-postmeddelande som skickas till kunden när de skapar en retur via returcentret. $order_return

Allmän information om strukturen för e-postmallar

I princip är alla e-postmallar indelade i två delar. En del för ämnet och den andra delen för innehållet. Mallen delas upp genom att kontrollera om variabeln $subject är inställd . Om den är det ska mallen returnera ämnet. Annars ska den returnera innehållet. Ett exempel:

<{if $subject}>

	Emnet på mailen

<{else}>

	Indholdet af mailen

<{/if}>

Med undantag för de två e-postmeddelandena invoice.html ochinvoice_dropshipping.html där ämnet styrs via adminadmin och inte via mallen.

Bilder, stylesheets etc. i temat

Du kan placera dina bilder, stylesheets etc. var du vill, men vi rekommenderar att du använder en struktur som/{namn}/images och /{namn}/css. När du refererar till filerna använder du variabeln$theme_url som innehåller temats URL. Observera att den kan ändras, så du kan inte alltid skriva in URL:en manuellt i ditt tema. Men variabeln kommer alltid att fungera. Om du vill länka till bilden/{namn}/images/img.gif skriver du därför<img src="<{$theme_url}>/images/img.gif">.

Tillägg

Shoporama innehåller några olika datatyper. Till exempel produkter och kategorier. Dessa datatyper innehåller vissa fördefinierade fält som titel, beskrivning och pris. Det är möjligt att utöka de vanligaste datatyperna med egna fält. Extensions måste placeras i temat i filen /{name}/extensions/{datatype}.json, där de möjliga datatyperna är product, landing_page, category, static_page och blog_post .

Json-filen måste innehålla en array av grupper, där varje grupp innehåller ett antal fält. Formatet är enligt följande:

Fält Innehåll Typ
name Namn på gruppen av fält string
description Längre beskrivning string
fields Array av fält array
Fält Innehåll
title Titeln på fältet
description Längre beskrivning om tillämpligt
id ID för att extrahera värdet med
type En av följande typer: multi, list, text, richtext, longtext, number, bool, image, images, color
options Värden vars typ är antingen list eller multi. Formatet är
"options": {
	"foo": "Foo",
	"bar": "Bar",
	"baz": "Baz"
}
placeholder Möjlig platshållare
default Standardvärde

Nedan visas ett exempel på json i filen extensions/product.json:

[
	{
		"name": "Billeder",
		"description": "Her kan du tilføje billeder",
		"fields": [
			{
				"title": "Et enkelt billede",
				"id": "my-image",
				"type": "image"
			},
			{
				"title": "En serie af billeder",
				"id": "my-images",
				"type": "images"
			}
		]
	},
	{
		"name": "Indstillinger",
		"description": "Herunder kan du indstille diverse",
		"fields": [
			{
				"title": "my-setting",
				"description": "Vælg flere ..",
				"id": "tags",
				"type": "multi",
				"options": {
					"foo": "Foo",
					"bar": "Bar",
					"baz": "Baz"
				}
			}
		]
	}
]

Tillhandahåller följande gränssnitt:

För datatyper som stöder tillägg måste värdena hämtas via metoden getExtensionValue('ID'), där ID är ID från json-filen. Beroende på fältets datatyp kan innehållet returneras som en text, en array eller ett objekt:

Materiale: <{$product->getExtensionValue('materiale')}>

Eller..:

<{if $img = $product->getExtensionValue('img')}>
	<{$img->getSrc(50, 50, 'fit')}>
<{/if}>

Eller om du vill slingra dig genom bilder:

<{foreach $product->getExtensionValue('my-images') as $image}>
	<img src="<{$image->getSrc(50, 50, 'box')}>">
<{/foreach}>

Globala variabler

Variabel Innehåll
$webshop Generellt objekt som innehåller webbshoppen, men som också innehåller vissa funktioner för att extrahera olika data från webbshoppen. Läs mer om objektet Webshop. Exempel på hur $webshop används för att ta fram en lista med kategorier:
<{foreach $webshop->getCategories() as $category}>
	<{$category->getName()|escape}>
<{/foreach}>
$product Produktobjektet om du tittar på en produktsida
$category Category-objektet om en kategori visas
$landing_page Landningssida-objekt om du befinner dig på en landningssida
$page Objektet för den statiska sidan om du befinner dig i något av dessa
$blog_post Blogginläggsobjektet om du ser ett blogginlägg
$inc Namnet på den speciella - inte dynamiska - sida som körs. Värdena för detta kan vara return.html, order-return.html, return_received.html, also.html, search.html, basket.html, address.html, shipping.html, approve.html, payment.html, thanks.html, order.html, product_review.html, subscription.html, blog.html, user-sign-up.html, user-sign-in.html, user-sign-out.html, user-edit.html, user-reset-password.html, user-profile.html, user-orders.html, user-points.html, user-subscriptions.html, user-change-card.html, 404.html, 410.html.

När vi validerar innehållet kan du använda koden nedan för att styra visningen i en include-fil:

<{if $inc}>
	<{include file=$inc}>
<{/if}>
$shipping Den valda leveransmetoden
$pager_array Pager om den aktuella sidan innehåller sidrullning. Innehållet i matrisen är elementenmax, current, total, url och first_url.
$pager Personsökarobjekt.
$current_url Den absoluta URL:en för den aktuella sidan.
$top_url Relativ URL till den aktuella sidan.
$get En array med alla GET-variabler.
$post En array med alla POST-variabler.
$cookie En array med alla COOKIE-variabler.
$user_id ID för den butiksägare som är inloggad i admin. Denna variabel sätts om du följer en länk till butiken från admin.
$customer Kundobjekt om kunden är inloggad i butiken.
$remote_addr IP-adressen för den kund som tittar på sidan.
$admin_url URL till Shoporama-administratören
$selected_payment_gateway ID för den valda betalningsgatewayen.
$join_mailinglist En indikator om kunden har kryssat i att de vill prenumerera på nyhetsbrevet.
$basket_url URL till korgen och dess innehåll.
$products_matches ID:n för produkter som har matchat en rabatt eller kampanj
$campaign_ids ID:n på kampanjer om produkterna i korgen matchar en kampanj.
$campaigns Om det finns en aktiv kampanj.
$campaign_discount Rabatten från de aktiva kampanjerna.
$campaign_matches En matris med produkter som matchar en kampanj. Om det inte finns några produkter är variabeln null.
$unpaid_order Om kunden har en obetald order.
$unpaid_recurring_order Obetald prenumeration.
$basket Innehållet i korgen som en array, där de enskilda elementen är produkterna i korgen, med värdena:
Variabel Innehåll
.id Unikt ID på linjen
.product_id ID för produkten
.in_stock sant/falskt om produkten finns i lager
.product Produkten
.attributes produktattribut
.own_id Skunummer
.amount numret i korgen
.comment Eventuell kommentar
.bundle matris av produkten om produkten är en bunt

Exempel på hur ovanstående används:

<{foreach $basket as $row}>
	<{if $image = $row.product->getImage()}>
		<img src="<{$image->getSrc(50, 50, 'box')|escape}>">
	<{/if}>

	<{$row.amount}> x <{$row.product->getName()|escape}>

	i alt

	<{$row.product->getRealPrice($row.amount, $row.attributes)|number_format:2:",":"."}>
	<{$webshop->getCurrency()}>

<{/foreach}>

Kontrollera Template API för att se vilka metoder som är tillgängliga för de olika objekten.

$subscriptions Prenumerationer på korgar. Fungerar på samma sätt som $basket
$price Delsumman av korgens innehåll. Det vill säga utan frakt.
$shipping_price Fraktpriset för korgen.
$total_price Totalt pris för korgens innehåll.
$vat Moms på innehållet i korgen.
$basket_weight Korgens totala vikt (för t.ex. frakt).
$total_amount Totalt antal produkter i korgen.
$voucher Rabattkoden om det finns en sådan.
$voucher_discount Rabatten från rabattkoden.
$shipping_country Det valda leveranslandet.
$nofollow Anger om nofollow är inställt på sidan.
$meta_title Sidans titel.
$meta_description Beskrivning av sidan.
$canonical URL till sidans canonical.
$session_order Array med faktureringsadressen. Innehåller fältenname, company_name, vat_number, address, address2, zipcode,city, email, phone, ean_number, comments
$session_del Array med leveransadressen. Innehåller fälten:name, company_name, address,address2, zipcode, city
$session_extra Array med extra fält på ordern. Om ett fält postas medextra[test]=123, kommer $session_extra.test att vara123 och lagras på ordern.
$use_points Antal poäng som kunden har angett att de vill spendera på ordern.
$point_discount Hur många DKK (eller annan valuta) de använda poängen (från $use_points) motsvarar.
$earns Hur många poäng kunden tjänar genom att slutföra ordern.

Egenskaper för mall

Nedan visas de Shoporama-specifika funktioner som kan användas i mallar:

Funktionalitet Beskrivning
t

Det är möjligt att bygga in språkstöd i sina mallar. Inte klassiskt språkstöd, där man kan välja texten på flera språk, utan språkstöd där det är möjligt att ändra texten i admin. Det fungerar genom att texten packas in i ett <{t}>-block. Efter att mallen har renderats i webbläsaren kan texten sedan redigeras i admin. Exempel:

<{t}>Din kurv<{/t}>

Observera att om du ändrar texten i dina mallfiler så kommer den nya texten att visas i admin som en ny text. Det finns inga ID:n eller namn utöver innehållet, vilket gör texten unik.

Du kan ställa in section-attributet på blocket för att dela upp dina texter i mer hanterbara delar. Samt hint om du vill ge en ledtråd i admin när texten redigeras:

<{t section="basket" hint="Bruger i overskriften"}>Din kurv<{/t}>

Om du har variabelt innehåll som du vill skicka med utan att värdet finns i admin, kan du använda syntaxen nedan:

<{t amount=$total_amount price=$total_price|number_format:2:",":"." hint="Til kurven"}>
    Du har {amount} ting til {price} kroner i kurven.
<{/t}>

Om det passar bättre in i din struktur kan du också använda t som modifierare på dina variabler/funktioner:

<{$title = "Min titel her"}>
<{$title|t}>

Ovanstående kommer att visa följande i admin:

Argumentera Beskrivning
section Sektion för att dela in i admin
hint Hint används i admin som hjälptext
cache

Om en mall innehåller många tunga anrop som inte behöver uppdateras live - t.ex. varianter på produkter, menyer eller kategoriöversikter - innehåller Shoporama en cachefunktion som kan göra butiken mycket snabbare. De funktioner som används är cache respektive get_cache, som först markerar den del som ska cachas och senare hämtar den cachade datan. Ett exempel:

<{get_cache name="my_cache" ttl=3600 assign="c"}>

<{if $c}>

	Fra cache: <{$c}>

<{else}>

	Live:

	<{cache name="my_cache"}>
		<{$smarty.now}>
	<{/cache}>

<{/if}>

Cache-funktionen omsluter innehållet och tilldelar det det namn som anges i name. När innehållet ska extraheras används get_cache, som tar argumenten name, som användes tidigare, och ttl, som anger i sekunder hur gammalt innehållet kan vara. Om argumentet utelämnas är standardvärdet en timme.

Argumentera Beskrivning
name Används för att ange namnet på det cachade objektet. Det är möjligt att använda dynamiska namn från variabler.
get_cache

Funktion som returnerar det cachade innehållet från cachefunktionen.

Argumentera Beskrivning
name Namnet på det cachade objektet som används i cacheminnet.
ttl Tid att leva. Antal sekunder som cacheminnet måste vara giltigt.
assign Namnet på den variabla hubb som innehållet ska kopplas till.

Inställningar för tema

Det går att lägga till några allmänna inställningar i teman genom att lägga till entheme_settings.json i roten till temat och provocera fram något i stil med följande:

Strukturen är som följer:

Namn Innehåll Typ av data
info Namnet på temat string
features Array av funktioner som temat innehåller. Används endast för visning i admin. Endast användbart om temat är allmänt och flera användare kan välja det. Till exempel ["Funktion A", "Funktion B", "Funktion C"]. array
demo URL till eventuell demosida string
settings

Array av fält som kan redigeras:

array
Namn Innehåll Typ av data
.path ID för fält som ingår i variabeln som det första elementet när värdet hämtas. Om sökvägen är inställd på design kommer värdena att finnas i$settings.design.{fältnamn} string
.name Namn som visas i admin string
.description Beskrivning som visas i admin string
.fields

De enskilda fält som kan redigeras av användaren

array
Namn Innehåll Typ av data
.path ID för när värdet ska hämtas. Om sökvägen är inställd på colour och det överordnade fältet var design, kan fältet hämtas via $settings.design.colour string
.name Namn som visas i admin string
.description Beskrivning som visas i admin string
.default Standardvärde. Om fältet är tomt kommer detta värde att användas. string
.type Typ av fält. De giltiga typerna är:image,colour,string,bool,wysiwyg ochlist. string
.values Värden om typ är satt till list. Formater er følgende:
[
	{
		"name": "cheese",
		"value": "Ost"
	},
	{
		"name": "ham",
		"value": "Skinke"
	}
]
array

Exempel på filinnehåll

{
	"info": "Mit tema",
	"settings": [
		{
			"path": "design",
			"name": "Design",
			"description": "Indstillinger for dit design",
			"fields": [
				{
					"path": "logo",
					"name": "Toplogo",
					"description": "Upload dit logo her",
					"type": "image"
				},
				{
					"path": "background_color",
					"name": "Baggrundsfarve",
					"description": "Baggrundsfarven på shoppen",
					"type": "color"
				},
				{
					"path": "size",
					"name": "Bredde",
					"description": "Bredden på siden",
					"type": "list",
					"values": [
						{
							"name": "Afgrænset",
							"value": "boxed"
						},
						{
							"name": "Fuld bredde",
							"value": "fullwidth"
						}
					]
				}
			]
		},
		{
			"path": "contact",
			"name": "Kontaktoplysninger",
			"description": "Dine kontaktoplysninger der vises i temaet",
			"fields": [
				{
					"path": "mail",
					"name": "E-mail-adresse",
					"description": "Indtast din e-mail-adresse her",
					"type": "string"
				}
			]
		},
	]
}

Sidbyggare

Page Builder är ett verktyg för att bygga innehåll via sektioner från JSON-filer. Dessa sektioner kan placeras på olika sidor i webbshoppen. Vilka sidor de kan placeras på definieras i filen/{name}/components/sections.json. Innehållet i varje sektion definieras i en egen fil , som placeras i /{name}/components/sections/{section}.json.

Om du har gjort ovanstående kommer länken Design längst upp i admin automatiskt att leda tillPage Builder:

Byggnadsavsnitten är uppbyggda enligt följande:

Tråd Innehåll
/{navn}/components/sections.json

Innehåller en lista över sidtyper och en matris över vilka avsnitt som är tillåtna. Förutom sidtyper kan du också använda anpassade taggar.

{
	"Sidetype": ["sektionA", "sektionB"]
}

Följande sidtyper finns tillgängliga:

Typ av sida Beskrivning
product Produktsidor
category Kategori sidor
landing_page Landningssidor
static_page Statiska sidor
blog_post Blogginlägg
basket Kurvor
address Adress sida
shipping Sidan med frågor
approve Behörighetssida
thanks Den tacksida som kunden vanligtvis ser efter att beställningen har slutförts
search Sök sida
also Merförsäljningssidan, som kan användas om du visar en merförsäljningssida efter att kunden har lagt produkter i korgen
order Beställningssidan som visar beställningsinnehållet via en länk
#tags Valfria taggar som du skapar själv

Ett exempel på en sections.json där användaren kan lägga till avsnittenslider, photos och quiz på målsidor, men bara slider på produktsidor, och på #footer kan ett about-avsnitt läggas till skulle se ut så här :

{
	"landing_page": ["slider", "photos", "quiz"],
	"product":      ["slider"],
	"#footer":      ["about"]
}
/{navn}/components/tags.json Taggar används för platser som du hittar på själv, och som du kan dra ut som du vill. Du kan till exempel behöva en #footer som du drar ut och visar längst ner i butiken, eller en #xmas setup som du bara använder i december . Formatet för tags.json är:
{
	"tag1": "Beskrivelse ...",
	"tag2": "Beskrivelse ...",
	"tag3": "Beskrivelse ..."
}

De enskilda taggarna visas automatiskt i admin när användaren skapar en ny installation:

För att extrahera innehållet i taggar i temat används funktionengetBlocks() på följande sätt:

<{if $blocks = $webshop->getBlocks("#foo")}>
	<{foreach $blocks as $block=>$elements}>
		[...]
	<{/foreach}>
<{/if}>
/{navn}/components/sections I denna katalog placeras varje avsnitt i sin egen json-fil. Varje fil är uppkallad efter sektionens namn. Om avsnittet heter slider ska innehållet finnas i/{name}/components/sections/slider.json. Filernas struktur är som följer
Fält Beskrivning Typ
title Det namn som visas i admin string
description Beskrivning som visas i admin string
fields

En array av fält

array
Fält Beskrivning Typ
.id ID för fältet. Används när innehållet loopas igenom i temat string
.type Typ av innehåll. Giltiga typer är:lista,text,heltal,bild,bilder,bool,richtext,långtext,repeater,produkt,kategori ochlanding_page string
.options Används endast för fält av typen list och innehåller en rad olika alternativ, t.ex.
[...]
"options": {
	"hat": "Hat",
	"glasses": "Briller",
	"beard": "Skæg"
},
[...]
string
.title Titeln på fältet string
.description Beskrivning av fältet string
.max Maximalt antal fält som kan läggas till int
.required Om fältet är obligatoriskt bool
.placeholder Platshållare för admin string
.default Möjligt standardvärde för fältet string
.fields Används endast om typen är repeater och kan innehålla samma fält som sections. Ett förenklat exempel på en slider repeater kan vara:
[...]
"type": "repeater",
"fields": [
	{
		"id": "headline",
		"type": "text",
		"title": "Overskrift"
	},
	{
		"id": "img",
		"type": "image",
		"title": "Billedet"
	}
]
[...]
string
.field_title Används endast om typen är repeater och innehåller namnet på de enskilda elementen i repeatern string

Utsikt

Det finns olika strategier för att extrahera data. I grund och botten kommer det att finnas en$page_blocks på de sidor som matchar en inställning. Detta kan loopas igenom, eller så kan innehållet extraheras via $webshop->getBlocks('#foo'). Eller så kan innehållet nås via sektionsnamnet.

Som utgångspunkt rekommenderar vi att du placerar vyn för de enskilda avsnitten i separata filer , till exempel /{namn}/templates/sections/{section}.html. Då är det enkelt att loopa genom $page_blocksoch inkludera rätt vy på följande sätt:

<{if $page_blocks}>

	<{foreach $page_blocks as $section}>
		<{$type = $section._type}>

		<{if $webshop->templateExists("sections/$type.html")}>

			<{include file="sections/$type.html"}>

		<{/if}>

	<{/foreach}>

<{/if}>

Observera att typen av rad finns i variabeln _type.

Vi kallar avsnittet nedan för images - innehållet finns därför i/{name}/components/sections/images.json.

{
	"title": "Overskrift og billeder",
	"fields": [
		{
			"id": "headline",
			"type": "text",
			"title": "Overskrift"
		},
		{
			"id": "images",
			"type": "images",
			"title": "Billeder"
		}
	]
}

Detta ger följande gränssnitt i admin:

För att extrahera innehållet med ovanstående metod kan/{name}/templates/sections/images.html innehålla följande:

<h1><{$section.headline|escape}></h1>

<{foreach $section.images as $image}>
	<img src="<{$image->getSrc(150, 150, 'box')}>">
<{/foreach}>

När det gäller datatyp är det viktigt att vara medveten om vad de enskilda fälten innehåller. De kan vara antingensträngar, matriser eller objekt. Med andra ord bör du göra något liknande:

[...]
<{foreach $section as $name=>$val}>
	<{if is_array($val)}>
		Repeater eller bildserie
	<{elseif is_object($val)}>
		En bild
	<{else}>
		Text, siffror eller liknande
	<{/if}>
<{/foreach}>
[...]

Om du använder typerna product, category eller landing_page returneras det valda ID :t i temat, och du måste själv extrahera objektet med metoderna $webshop->getProductById(id),$webshop->getCategory( id) eller $webshop->getLandingPage( id ). Exempel på detta:

[...]
<{if $product = $webshop->getProductById($section.product_id)}>
	<{$product->getName()|escape}>
<{/if}>
[...]

Observera att det alltid är möjligt att använda var_dump för att undersöka vad variabeln innehåller och loopa igenom den på rätt sätt.

Utsikt

Baserat på den tidigare nämnda strukturen diskuteras de enskilda vyerna nedan. För att förstå de enskilda objekten och vilka metoder som finns tillgängliga rekommenderar vi att du tar en titt på vår Mall-API.

Ladda ner vårt Alaska-tema för att se exempel på de olika vyerna.

Våra produkter

Produktvyn kan ligga i product .html, men det är inte obligatoriskt . Det är alltid index.html som hanterar de enskilda vyerna . Vi rekommenderar dock att du använder denna struktur. För att veta att en produktvy körs, kontrollera om $product är närvarande.

Lägg till i korgen

Produkter läggs till i korgen genom att göra ett POST-anrop till valfri sida - vanligtvis bara den sida du redan visar, med argumenten product_id, attributes[{attribute_id}]={attribute_value_id} ochamount. Attributet bör endast läggas till om produkterna har varianter.

Ett enkelt exempel på hur man lägger till produkter i korgen kan vara:

<form action="" method="post">
	<input type="hidden" name="product_id" value="<{$product->getProductId()}>"/>
	<input type="number" name="amount" value="1" min="1"/>
	<input type="submit" value="Læg i kurv">
</form>

Med varianter:

<form action="" method="post">
	<input type="hidden" name="product_id" value="<{$product->getProductId()}>"/>

	<{foreach $product->getProfile()->getAttributeList() as $attribute}>
		<{if $attribute->getIsVariant() && $attribute->getDataType() == "valuelist"}>
			<select name="attributes[<{$attribute->getAttributeId()}>]">
				<{foreach $attribute->getValues() as $value}>
					<option value="<{$value->getAttributeValueId()}>">
						<{$attribute->getName()|escape}>: <{$value->getVal()|escape}>
					</option>
				<{/foreach}>
			</select>
		<{/if}>
	<{/foreach}>

	<input type="number" name="amount" value="1" min="1"/>
	<input type="submit" value="Læg i kurv">
</form>

Naturligtvis kan ovanstående göras mer komplicerat om du vill visa lagerstatus, buntar etc.

Landningssidor

Landningssidor innehåller en $landningpage och $products som är en matris med produkter som ska visas på sidan.

Om sidan kräver en personsökare, infoga den på följande sätt:

<{if $pager}>
	<{$pager->render()}>
<{/if}>

Kategorier

Kategorier innehåller en $category och $products som är en array av produkter som ska visas på sidan.

Om sidan kräver en personsökare, infoga den på följande sätt:

<{if $pager}>
	<{$pager->render()}>
<{/if}>

Statiska sidor

Statiska sidor kommer att innehålla en $page.

Blogg

Bloggen kan delas in i två sidor: blog.html och blog_post.html, där den första kan visa en lista över blogginlägg via

<{$blog_posts = $webshop->getBlogPosts()}>

Den faktiska visningen av de enskilda blogginläggen görs genom att titta på variabeln $blog_post.

Om listan med blogginlägg kommer från en kategori finns det också en $category för den kategorin .

Produktrecensioner

I product_review.html har du tillgång till $order, som är din beställning. Du kan bara granska produkter som du har köpt. Från ordern kan du hämta produkterna via $order->getOrderProducts(). För att spara produktrecensionerna måste du göra ett POST-anrop till samma sida med följande innehåll:

<{if $order}>
	<{if $get.voted}>
		Tak!
	<{else}>
		<form action="" method="post">
			<{foreach $order->getOrderProducts() as $product}>
				<{$product->getName()|escape}>
				Stjerner:
				<input type="number" min="1" max="5" name="rating[<{$product->getProductId()}>]">
				Anmeldelse
				<textarea name="description[<{$product->getProductId()}>]"></textarea>
			<{/foreach}>
			<input type="submit" value="Skriv anmeldelse"/>
		</form>
	<{/if}>
<{/if}>

$get.voted är sant när kunden har granskat.

För att länka till granskningssidan från din beställning använder du $order->getReviewUrl().

Sökningen fungerar genom att göra ett GET-anrop till /search där argumentet?search= måste vara din sökterm. Ett exempel:

<form action="/search">
	<input type="text" name="search" value="<{$get.search|escape}>"/>
	<input type="submit" value="Søg"/>
</form>

Produkter, kategorier, blogginlägg och landningssidor söks. För att visa resultatet måste du titta på de fyra variablerna$products, $categories, $blog_posts, $pages och $landing_pages.

Huruvida statiska sidor ska sökas måste aktiveras i admin.

Önskelista

Om dina kunder kan logga in i din butik kan du låta dem skapa önskelistor. De kan skapa hur många önskelistor som helst, och en önskelista har ett namn, en beskrivning och ett sortiment av produkter. Själva önskelistan har en publik adress så att dina kunder kan skicka en länk.

Önskelistan använder sig av följande mallar:

Mall URL Beskrivning Relevanta variabler
wishlist.html /wishlist Den offentliga önskelistan. $wishlist som innehåller önskelistan. Se metoder här.
user-wishlists.html /user-wishlists Användarens sida med önskelistor. Kräver inloggning. $customer->getWishlists() för att extrahera önskelistor.
user-wishlist.html /user-wishlist Den sida som används för att redigera önskelistan och produkterna $wishlist som innehåller önskelistan. Se metoder här.

För att skapa en önskelista måste en POST skickas från user-wishlists.html med namnfältet och en valfri beskrivning. Till exempel

<form action="" method="post">
    Navn
    <input type="text" name="name">

    Beskrivelse
    <textarea name="description"></textarea>

    <input type="submit" value="Opret">
</form>

Observera att du kan använda metoderna $wishlist->getRemoteUrl() och $wishlist->getEditUrl() för att skapa länkar för att visa och redigera önskelistorna.

I filen user-wishlist.html där önskelistan redigeras måste namn och beskrivning skickas somnamn, beskrivning och status, som kan vara antingen aktiv eller stängd. Själva produkterna, deras antal och eventuella kommentarer måste skickas som en array i följande format:

wishlist_product[{id}][name] = 'navn'
wishlist_product[{id}][comments] = 'kommentar'
wishlist_product[{id}][remove] = '1' // kun hvis produktet skal fjernes

Exempel på kod:

<{foreach $wishlist->getWishlistProducts() as $wp}>
    <{* Fordi der er forskel på produkter og ønskelisteprodukter }*>
    <{$product = $wp->getProduct()}>

    <input type="checkbox" name="wishlist_product[<{$wp->getWishlistProductId()}>][remove]" value="1">

    <a href="<{$product->getUrl()|escape}>"><{$product->getName()|escape}></a>

    <{if $variant = $wp->getVariantValue()}>
        <{$wp->getVariantName()|escape}>: <{$variant|escape}>
    <{/if}>

    <input type="number" name="wishlist_product[<{$wp->getWishlistProductId()}>][amount]" value="<{$wp->getAmount()}>">

    <textarea name="wishlist_product[<{$wp->getWishlistProductId()}>][comments]"><{$wp->getComments()|escape}></textarea>

<{/foreach}>

Om en variabel redigering skickas kommer sidan att återgå till samma redigeringssida igen. Annars kommer du att omdirigeras till översikten över önskelistan. För att ta bort önskelistan måste en variabel med namnetremove skickas. Till exempel: remove.

<input type="submit" name="remove" value="Slet" onclick="return confirm('Er du sikker?');">

För att lägga till produkter i en önskelista från butiken kan ett POST-anrop göras från valfri sida med fältenwishlist_id, product_id och ett valfritt attribute_value_id om produkten har en variant. Exempel:

<{if $product && $customer}>

    <{if $wishlists = $customer->getWishlists()}>

        <form action="" method="post">
            <input type="hidden" name="product_id" value="<{$product->getProductId()}>"/>

            <label>Vælg ønskeliste:</label>
            <select name="wishlist_id">
                <{foreach $wishlists as $wishlist}>
                    <option value="<{$wishlist->getWishlistId()}>">
                        <{$wishlist->getName()|escape}>
                    </option>
                <{/foreach}>
            </select>

            <{if $variant = $product->getVariant()}>
                <label>Vælg variant:</label>

                <select name="attribute_value_id">
                    <{foreach $variant->getValues() as $value}>
                        <option value="<{$value->getAttributeValueId()}>">
                            <{$variant->getName()|escape}>: <{$value->getVal()|escape}>
                        </option>
                    <{/foreach}>
                </select>
            <{/if}>

            <input type="submit" value="Tilføj til ønskeliste">
        </form>

    <{/if}>

<{/if}>

Returcenter

Returcentret gör det möjligt för dina kunder att själva skapa returer. Det måste aktiveras ibutiksinställningarna. När en kund har skapat en retur måste den godkännas i admin och en kreditnota kommer att skapas.

Returcentralen använder sig av följande mallar:

Mall URL Beskrivning Relevanta variabler
return.html /return Den sida där returen skapas $order innehåller den order som kunden vill returnera. Se metoder här.
order-return.html /order-return Den sida där returen visas i efterhand $order_return med avkastningen. Se metoder här.
return_received.html E-postmeddelande som skickas till kunden när de skapar en retur $order_return med avkastningen. Se metoder här.

Det finns två sätt för din kund att komma till retursidan. Det ena är att ange ordernumret och e-postadressen på beställningen. Det andra är genom att följa en direktlänk. Direktlänken extraheras från beställningen med hjälp av$order->getReturnUrl(). Till exempel

<{if $webshop->useReturnCenter() && !$order->getIsCreditNote()}>
	<a href="<{$order->getReturnUrl()|escape}>">Retuner varer</a>
<{/if}>

Som framgår av exemplet är det en god idé att kontrollera att ordern inte är en kreditnota och att handlaren har aktiverat returcentret. Exemplet kan användas var som helst där det finns en $order. Till exempel i kundens egen orderöversikt eller i e-postmeddelanden.

Om du inte använder login eller på annat sätt vill att kunden ska kunna söka efter sin order måste du implementera en sökning med ordernummer och e-postadress i return.html. Det är fälten webshop_order_id och email som ska POSTas till /return. Om ordern hittas kommer kunden att skickas till returen, om inte kommer$get.not_found att ställas in och du kan visa ett felmeddelande i temat. Ett minimalt formulär kan se ut så här:

<{if $get.not_found}>
    <p>Der blev ikke fundet nogen ordre.</p>
<{/if}>

<h1>Returcenter</h1>

<form method="post" action="">
    <input type="number" name="webshop_order_id" placeholder="Ordrenummer">
    <input type="email" name="email" placeholder="E-mail-adresse">

    <input type="submit" value="Søg">
</form>
Skapa en retur

I filen return.html måste en lista med orderrader extraheras och kunden kan välja vilka produkter som ska returneras och varför. Till skillnad från vanliga ordervyer måste returen innehålla en rad per orderrad.

<form action="" method="post">
    <{$line = 0}>

    <!-- Looper ordrelinjerne igennem -->
    <{foreach $order->getOrderProducts() as $product}>

        <!-- getReturned() returnerer antallet der tidligere er returneret -->
        <{$returned = $product->getReturned()}>

        <!-- Løkke for hver antal -->
        <{section name="i" loop=$product->getAmount()}>
            <{$line = $line+1}>

            <!-- Viser ikke flere end det er muligt at returnere -->
            <{if $line - $returned > 0}>

                <{$product->getName()|escape}>

                <{if $attributes = $product->getAttributes()}>
                    <{foreach $attributes as $attribute}>
                        <{$attribute.name}>: <{$attribute.val}>
                    <{/foreach}>
                <{/if}>

                <!-- Check hvilken pris der skal vises -->
                <{if $webshop->getUseCalculatedUnitPrice()}>
                    <{$webshop->getCurrency()}> <{$product->getCalculatedUnitPrice()|number_format:2:",":"."}>
                <{else}>
                    <{$webshop->getCurrency()}> <{$product->getUnitPrice()|number_format:2:",":"."}>
                <{/if}>

                <!-- Checkbox og en grund -->
                <input type="checkbox" name="return[<{$line}>]" value="<{$product->getOrderProductId()}>">Vælg
                <input type="text" name="reason[<{$line}>]" placeholder="Evt. årsag til returnering"/>

            <{/if}>
        <{/section}>

     <{/foreach}>
</form>

Det är möjligt att i admin ange en fast fraktmetod och ett fast pris. Om detta görs extraheras leveransmetoden via$webshop->getReturnShipping($country_id) och om priset är fast extraheras det via$webshop->getReturnShippingPrice($country_id). Exempel på:

<{if $return_shipping = $webshop->getReturnShipping($order->getDelCountryId())}>
    Varer skal returneres via <{$return_shipping->getName()|escape}>.

    <{if $price = $webshop->getReturnShippingPrice($order->getDelCountryId())}>
        Prisen er <{$price|number_format:2:",":"."}>
    <{else}>
        Prisen er <{$return_shipping->getCost()|number_format:2:",":"."}>
    <{/if}>
<{else}>
    <!-- Vis en liste over shoppens almindelige leveringsmetoder her -->
<{/if}>

Den valda leveransmetoden, om den är valfri, måste skickas som shipping_id.

Visning av avkastning

När returen är skapad kommer den att visas i order-return.html, som innehåller en $order_returnmed relevanta metoder.

/so

also.html är vår sida för merförsäljning. I grund och botten har du tillgång till $product, och därifrån kan du ge förslag till kunden. Det kan till exempel vara relevant att använda $product->getRelatedProducts(),$product->getAlsoBought() eller $webshop->getPopularProducts().

404

Används endast för att visa 404-sidor.

410

Används endast för att visa 410 sidor.

Captcha

En captcha infogas automatiskt när du försöker anmäla dig till nyhetsbrevet eller skriva kommentarer. Detta för att undvika spam. Det går att designa sidan själv i captcha.html, och den måste minst innehålla:

<form action="" method="post">
	<{$form}>

	<{if $error}>Fejl i koden<{/if}>

	<img src="<{$imgstr}>">

	Skriv indholdet at ovenstående felt:
	<input type="text" name="c">

	<input type="submit" value="OK">
</form>

Logga in

Det är möjligt att låta dina kunder logga in i butiken. Om de är inloggade kommer det att finnas en$customer som innehåller information om användaren. Alla sidor som redigerar, loggar in etc. måste skickas via POST till själva sidan.

Filens namn Beskrivning Relevanta variabler/parametrar i formuläret
/user-edit.html Används för att redigera kunddata. Det är möjligt att lägga till fält på kunden. Se mer under denna tabell. company, vat_number, name, email, phone, address, zipcode, city, country_id, shipping_name, shipping_address, shipping_zipcode, shipping_city, shipping_country_id, pass1, pass2.
/user-orders.html Kundens tidigare beställningar $my_orders
/user-points.html Kundens synvinkel $my_points
/user-profile.html Visning av kunddata $customer
/user-reset-password.html Används för återställning av lösenord email, password
/user-sign-in.html Inloggningssida. Använd redir om kunden behöver omdirigeras till en URL efter inloggning. email, password, redir
/user-sign-up.html Ett formulär som kunden använder för att registrera sig. name, email, phone, address, zipcode, city, company, vat_number, og country_id

Anpassade fält för kunden

I admin är det möjligt att definiera anpassade fält för dina användare. Dessa fält redigeras på följande sätt:

<{foreach $webshop->getCustomerFields() as $field}>
	<{if $field->getType() == "list"}>
		<{$field->getName()|escape}>
		<select name="field[<{$field->getCustomerFieldId()}>]">
			<{foreach $field->getValues() as $value}>
				<option <{if $field->getVal() == $value}>selected="selected"<{/if}> value="<{$value|escape}>">
					<{$value|escape}>
				</option>
			<{/foreach}>
		</select>
	<{elseif $field->getType() == "string"}>
		<{$field->getName()|escape}>
		<input type="text" name="field[<{$field->getCustomerFieldId()}>]" value="<{$field->getVal()|escape}>">
	<{/if}>
<{/foreach}>

Lojalitetsprogram

Lojalitetsprogrammet gör det möjligt för dina kunder att tjäna och spendera poäng när de slutför beställningar. Konfigurationen hanteras under Kunder > Lojalitetsprogram.

Du kan använda metoderna nedan för att kontrollera om butiken har aktiverat lojalitetsprogrammet och om kunden är inloggad och har tjänat poäng som de kan använda:

<{if $webshop->hasLoyaltyProgram() && $customer && $customer->getActivePoints()}>
	[Visning af point m.m.]
<{/if}>

För att visa hur många poäng kunden har tjänat in och hur många poäng kunden kan spendera på den aktuella ordern kan du använda följande kodexempel:

Du har optjent <{$customer->getActivePoints()|number_format:0:",":"."}> point.

<{if $points = $customer->getPointsAvailable()}>
	Du kan bruge <{$points|number_format:0:",":"."}> point på denne ordre.
<{else}>
	Du har ingen optjente point du kan bruge på denne ordre.
<{/if}>

Det fält som du POSTar till korgen och som anger hur många poäng kunden ska använda ska heta use_points och kan se ut så här:

<input type="number" name="use_points" value="<{$use_points}>" min="0" max="<{$customer->getPointsAvailable()}>"/>

Du kan använda $earns för att se hur mycket kunden tjänar på ordern:

Du optjener <{$earns|number_format:0:",":"."}> point på denne ordre.

Du kan använda exemplet nedan för att beskriva ditt lojalitetsprogram:

Du optjener <{$webshop->getLoyaltyProgramBasePoints()|number_format:0:",":"."}> point hver
gang du køber for 1 <{$webshop->getCurrency()}>. Når du betaler med point svarer
<{$webshop->getLoyaltyProgramBaseCost()|number_format:0:",":"."}> point til 1 <{$webshop->getCurrency()}>.

Om du vill skapa en sida med en poängöversikt kan du använda user-points.html, där du kan loopa genom $my_pointsoch presentera innehållet. Ta en titt på SafePoint-klassen för att se vilka metoder som finns tillgängliga.

Tips: Du kan utforma din orderöversikt med hjälp av följande CSS-klasser: points_used, points_earned och has_profile.

Kolla upp

Checkout-flödet är helt enkelt en serie html-sidor, var och en innehåller ett formulär som POSTAR vissa data till sig själv, och om nästa fält är inställt kommer Shoporama att vidarebefordra till nästa sida i flödet. Vanligtvis ställer du in knappen "Nästa" till name="nästa ". Du kan alltid länka till tidigare sidor i flödet. När kunden har angett sina uppgifter lagras dessa i två arrayer, $session_order och $session_del. Till exempel$session_order.name.

Filens namn Beskrivning Relevanta variabler/parametrar i formuläret
basket.html Visar innehållet i korgen. Enkelt exempel på hur $basket används:
<{foreach $basket as $line}>
	<{$line.amount}> x <{$line.product->getName()}>

	<{foreach $line.attributes as $a}>
		<{$a.name|escape}>: <{$a.value|escape}>
	<{/foreach}>
<{/foreach}>

För att ändra numret, POSTA det på följande sätt

[...]
<input name="amount[<{$line.id}>]" value="<{$line.amount}>" />
[...]

För att lägga till en rabattkod måste en voucher POSTAS med rabattkoden. Om rabattkoden är ogiltig kommer $get.wrong_voucher att finnas i mallen .

Leveranslandet kan ändras genom att POSTa en del_country_id med ID för leveranslandet.

$basket, $voucher, $voucher_discount, $campaign_ids, $campaign_discount, $price, $shipping_price, $total_price, $vat
address.html

Den sida där leveransinformationen anges.

Om mailinglist är satt till 1 är kunden prenumerant på nyhetsbrevet.

Om create_profileär satt till 1 skapas en profil för kunden så att denne kan logga in senare.

order_country_id, order_name, order_company_name, vat_number, ean_number, order_address, order_zipcode, order_city, email, phone, comments, del_name, del_company_name, del_address, del_zipcode, del_city, del_country_id, mailinglist, create_profile
shipping.html

Används för att välja leveransmetod.

De enskilda leveransmetoderna kan extraheras via$webshop->getShippings().

För att spara leveransmetoden måste enshipping_id POSTAS medID för den leveransmetoden. Om leveransmetoden har en paketbutik associerad med den, extraheras de via $shipping->getDeliveryShops(). Du kan välja leveransbutik på följande sätt:

[...]
<{if $shipping->getModule()}>
	<select name="shop">
		<{foreach $shipping->getDeliveryShops() as $shop}>
			<option value="<{$shop.number}>">
				<{$shop.name|escape}>
				<{$shop.street|escape}>
				<{$shop.zip|escape}>
				<{$shop.city|escape}>
			</option>
		<{/foreach}>
	</select>
<{/if}>
[...]
shipping_id, shop
approve.html

Sidan för godkännande. Används för att visa ordern.

Om butiken innehåller flera betalningsgateways kan dessa väljas på den här sidan. De hämtas via $webshop->getPaymentGateways() och skickas in via payment_gateway_idför att växla.

$basket, $shipping, payment_gateway_id
thanks.html Tack-sida. Används för att visa den order som har slutförts. $order

Ajax

Shoporama har två inbyggda ajax-anrop. Den ena kan extrahera produkter på olika sätt (filtrering) och den andra är en allmän och enkel sökning som söker efter produkter, kategorier och målsidor.

Filtrering

Filtreringen sker i filen /ajax som ligger i roten till alla butiker

Argument Beskrivning Exempel på ett exempel
atags En lista med taggar på attributvärden, attributvärden är inställningar på attributen på produkternas profiler. värdena på atags måste separeras med kommatecken, men tillåter grupperingar separerade med pipe som ett logisktOR.
ajax?atags=female,black|white
product_ids Lista över product_ids separerade efter pipe.
ajax?product_ids=1|2|3|4
price_range Returnerar produkter som faller inom ett prisintervall. Beloppen måste vara åtskilda med pip.
ajax?price_range=100|200
categories En pipseparerad lista med kategorier som produkterna ska finnas i. Om argumentet exclude=1 anges returneras en lista med produkter som inte har kategorierna.
ajax?categories=5|9|2
ajax?categories=5|9|2&exclude=1
sort Sorteringsordning. Värdena popular, weight, name,price, created kan ställas in. Om sorteringsordningen ska vara stigande eller fallande anges genom att sort_ordersätts till antingen asc (stigande) eller desc (fallande).
ajax?sort=price&sort_order=desc
attribute_values En lista med ID:n för de attributvärden som produkterna ska ha. Listan är separerad med pipe. Om argumentetexclude=1 anges returneras en lista med produkter som inte matchar.
ajax?attribute_values=9|8|12
suppliers Rörseparerad lista med leverantörs-ID:n.
ajax?suppliers=8|2
landing_pages Girl-separerad lista med ID:n för målsidor där produkter ska visas.
ajax?landing_pages=5|24
extension.{id} Om temat använder utökade fält kan produkter extraheras baserat på dem. Absoluta sökningar görs, så de fält som är mest meningsfulla att använda är bool, multi,number och list. Pipe-separerade värden kan användas om produkterna bara behöver matcha ett av värdena.
ajax?extension.foo=1&extension.tags=foo|bar
attribute_tags_in_stock Lista över taggar med attributvärden som måste finnas i lager. Listan kan vara pipe-separerad.
ajax?attribute_tags_in_stock=foo|bar
attribute_tags Lista över taggar som måste ställas in på produkterna. Listan kan vara pipe-separerad.
ajax?attribute_tags=foo|bar
attribute_tag Samma sak som attribute_tags men bara med en enda tagg.
ajax?attribute_tag=foo
force_categories En pipseparerad lista med kategori-ID:n som alla måste anges för produkterna.
ajax?force_categories=5|9|2
limit Max. antal produkter som ska returneras.
ajax?limit=10
offset Startposition i förhållande till var i listan med produkter du vill hämta från.
ajax?offset=100&limit=10
meta Pipe-separerad lista över extra fält som du vill se på produkterna i resultatet. Om du angermeta=_all returneras alla.
ajax?meta=foo|bar
ajax?meta=_all
only_in_stock_variants Ställs in på 1 eller 0 beroende på om varje produkt i resultatet endast ska innehålla varianter som finns i lager. Standardvärdet är 0.
ajax?only_in_stock_variants=1
include_meta Ställ in till 1 eller 0 beroende på om du vill ha ett extra metafält i resultatet som innehåller beskrivningar av produkterna i resultatet. Detta är information om vilka attribut, kategorier och varumärken som finns. Standardvärdet är 0.
ajax?include_meta=1
include_pagination Sätts till 1 eller 0 beroende på om du vill ha ett extra pagineringsfält i resultatet som innehåller pagineringsinformation. Fälten i matrisen är offset, limit, count, total. Standardinställningen är 0.
ajax?include_pagination=1
pretty Sätts till 1 eller 0 beroende på om json-svaret ska formateras snyggt eller inte.
ajax?pretty=1

Svaret från /ajax är en array i formatet nedan:

[
    {
        "product_id": 139735,
        "own_id": "skunumme",
        "name": "Produktnavn",
        "supplier_id": 0,
        "supplier_name": "",
        "category_ids": [
            3661,
            2113,
            2106,
            1973
        ],
        "category_names": [
            "Bob",
            "Forside",
            "Ged",
            "Giraf"
        ],
        "description": "<p>...</p>",
        "list_description": "",
        "profile_name": "Default m. variant",
        "allow_negative_stock": 1,
        "brand_name": "TESTBRAND",
        "sale_price": 0,
        "real_price": 80,
        "price": 80,
        "price_dk": "80,00",
        "approx_shipping": 0,
        "delivery_time": "",
        "delivery_time_not_in_stock": "",
        "url": "https://example.com/produkt",
        "stock": 0,
        "attr_stock": null,
        "variant_stock": [
            {
                "attribute_id": 2740,
                "attribute_value_id": 16287,
                "name": "S",
                "weight": 10,
                "cnt": 4
            },
            {
                "attribute_id": 2740,
                "attribute_value_id": 16289,
                "name": "L",
                "weight": 30,
                "cnt": 9
            }
        ],
        "stock_string_da": "Nej",
        "avg_rating": null,
        "thumbnail": "https://example.com/cache/1/9/6/9/bob-fit-200x200x90.png",
        "meta_values": [
            null
        ],
        "online_since": 1651685711,
        "has_campaigns": true,
		"campaign_info": [
            {
                "name": "Bob",
                "price_model": "cheapest_free",
                "min_product_count": 4,
                "price": 0,
                "percent": 0,
                "created": "2023-02-01 14:55:47",
                "expires": null
            }
        ]
    }
]

Av hastighetsskäl cachar vi svaret från ajax-filen, men i testmiljön kan du lägga till rebuild=1 som ett argument för att sidan ska byggas om. Vi rekommenderar att du inte gör detta i produktionsmiljön eftersom det kan sakta ner sidan avsevärt.

Sidan /ajax_search innehåller en allmän sökning efter produkter, kategorier och målsidor. Den kan till exempel användas för en autokomplettering i ditt sökfält. Den tar emot följande argument:

Argument Beskrivning Exempel på ett exempel
term Nyckelord.
ajax_search?term=ostemad
limit Max. antal resultat.
ajax_search?term=ostemad&limit=25
include En kommaseparerad lista över de datatyper som du vill söka efter. Värdena kan varaprodukter, kategorier, blog_posts, sidor och landing_pages.
ajax_search?term=ostemad&include=products,categories
pretty Sätts till 1 eller 0 beroende på om json-svaret ska formateras snyggt eller inte.
ajax_search?term=ostemad&pretty=1

Resultatet är en matris i formatet nedan:

[
    {
        "name": "Produkt et",
        "supplier": "",
        "description": "<p>...</p>",
        "price": 80,
        "sale_price": null,
        "normal_price": 80,
        "currency": "DKK",
        "price_dk": "80,00",
        "url": "https://example.com/produkt-et",
        "stock": 0,
        "stock_string_da": "Nej",
        "review_avg": 0,
        "thumbnail": "https://example.com/cache/1/9/8/4/box-100x100x90.png",
        "type": "product"
    },
    {
        "name": "Produkt to",
        "supplier": "",
        "description": "<p>...</p>",
        "price": 80,
        "sale_price": null,
        "normal_price": 80,
        "currency": "DKK",
        "price_dk": "80,00",
        "url": "https://example.com/produkt-to",
        "stock": 0,
        "stock_string_da": "Nej",
        "review_avg": 0,
        "thumbnail": "https://example.com/cache/1/9/6/9/bob-box-100x100x90.png",
        "type": "product"
    }
]

Denna webbplats använder cookies

Vi använder cookies för att anpassa innehåll och annonser, visa funktioner för sociala medier och analysera vår webbtrafik.

Information om din användning av vår webbplats delas också med våra partners inom sociala medier, annonsering och analys, som kan kombinera den med andra uppgifter från dina interaktioner med deras tjänster.

Läs mer om våra cookies