Shoporama-maler

Nedenfor finner du informasjon om hvordan du utvikler et Shoporama-tema.

På et øyeblikk

Generelt er et Shoporama-tema en serie HTML-filer som ligger i en mappe på ftp-serveren vår. Malspråket i de enkelte filene er Smarty, som er nevnt nedenfor.

Hver mal gir tilgang til en rekke objekter og metoder. Du kan lese mer om dem i vår Mal-API.

Kontakt oss på support@shoporama.dk hvis du har spørsmål.

Smarty

Motoren i malsystemet vårt er basert på Smarty.

Vi har versjon 2.6 installert av hensyn til bakoverkompatibilitet, men vi vedlikeholder den ikke lenger, og vi anbefaler at alle bruker versjon 4.x. Versjonen angis under innstillinger for butikken.

Vær oppmerksom på at denne dokumentasjonen kun tar hensyn til versjon 4.x.

Forskjellen mellom standard Smarty og vår er at vi bruker <{ og }> som skilletegn . Dvs. syntaksen er:

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

Tips og triks

Undersøk innholdet

Hvis du er usikker på hva en variabel er eller hva en funksjon returnerer, kan du kjøre den gjennom var_dump. Hvis du har et objekt, vil du alltid kunne se hvilke metoder som er tilgjengelige i mal-API-et vårt.

Du bruker var_dump på følgende måte:

<{$order|var_dump}>
Sjekk objekter

I noen tilfeller er det relevant å forsikre seg om at hvis du bruker en variabel som et objekt, er den også et objekt. Ellers vil ikke malen fungere. Vi angir noen globale variabler som $product og$webshop og andre. For disse variablene er det ikke nødvendig. De kan kontrolleres på en av følgende måter:

<{* 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}>
Feilsøking

Hvis du vil se hvilke variabler som er tilgjengelige på siden du utvikler, kan du sette Smarty i feilsøkingsmodus og se variablene i et nytt vindu. Lim inn følgende kode i malen din:

<{debug}>

Les mer om Smarty4 her: Smarty 4-dokumentasjon.

Filstruktur

Du får ftp-tilgang til butikken din, og i roten av katalogen legger du temaet ditt. Navnet på mappen er navnet på temaet.

Sti Funksjonalitet
/{navn} Hovedmappen for temaet ditt
/{navn}/components Mappe med komponenter for Page Builder
/{navn}/components/sections.json Liste over hvilke seksjoner som kan settes inn på hvilke sider
/{navn}/components/tags.json Tagger som skal brukes i temaet
/{navn}/components/sections Mappe for de enkelte seksjonsfilene
/{navn}/extensions Utvidelser til Shoporamas innebygde datatyper.
/{navn}/templates Mappe for maler
/{navn}/templates/mails Mappe for e-postmaler

Navngivningen av filer i /{name}/templates er generelt fri. Det finnes imidlertid noen få unntak:

Sti Funksjonalitet
/{navn}/templates/global.html Den overordnede siden som inneholder strukturen for hele butikken. Selve innholdet settes inn der denne malen viser <{$contents}>, som er en spesiell variabel som kommer fra index.html nedenfor . En veldig enkelglobal.html kan se slik ut:
<!DOCTYPE html>
<html>
<head>
	<title><{$webshop->getName()|escape}></title>
</head>

<body>

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

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

</body>

</html>
/{navn}/templates/index.html Denne malen brukes til å vise innholdet i det du ser nå. Dvs. et produkt, en landingsside eller handlekurven etc. Et forslag til hvordan den kan se ut, er som følger:
<{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 Brukes fra admin hvis du vil skrive ut en følgeseddel. Innholdet i bestillingen vil alltid ligge i variabelen $order.
/{navn}/templates/mails Mappe for e-postmaler. Må inneholde følgende filer:
Filnavn Innhold Relevante variabler
after_purchase.html Hvis du ønsker å sende kundene dine en e-post en stund etter at de har foretatt et kjøp. $products, $order
basket_mail.html E-post som kan sendes automatisk hvis kunden har oppgitt e-postadressen sin, men ikke sjekket ut. $basket_url, $basket
in_stock_mail.html E-post som kan sendes hvis en vare er tilbake på lager og kunden har registrert seg. $product
invoice_dropshipping.html E-post til dropshipping-leverandør. $products, $order
invoice.html Fakturaen for bestillingen. $order
order_credit.html Send e-post hvis bestillingen er kreditert. $order
order_sent.html E-post sendes når bestillingen er sendt. $order
payment_mail.html Hvis kunden har fullført en bestilling, men ikke gjennomført betalingen. $payment_url, $order
product_review_mail.html E-post som kan sendes til kunden hvis du ønsker anmeldelser. $order
user-reset-password-mail.html E-post med lenke til tilbakestilling av passord. For å få URL-en bruker du $customer->getTokenUrl(). $customer
user-welcome-mail.html Velkomst-e-post hvis kunden oppretter en konto i butikken. $customer
return_received.html E-post som sendes til kunden når de oppretter en retur via retursenteret. $order_return

Generell informasjon om strukturen til e-postmaler

I utgangspunktet er alle e-postmaler delt inn i to deler. En del for emnet og en annen del for innholdet. Malen deles inn ved å sjekke om variabelen $subject er satt. Hvis den er det, skal malen returnere emnet. Hvis ikke, skal den returnere innholdet. Et eksempel:

<{if $subject}>

	Emnet på mailen

<{else}>

	Indholdet af mailen

<{/if}>

Med unntak av de to e-posteneinvoice .html oginvoice_dropshipping.html der emnet styres viaadmin og ikke via malen.

Bilder, stilark osv. i temaet

Du kan plassere bilder, stilark osv. hvor du vil, men vi anbefaler at du bruker en struktur som/{navn}/images og /{navn}/css. Når du refererer til filene, bruker du variabelen$theme_url, som inneholder URL-adressen til temaet. Merk at den kan endres, så du kan ikke alltid skrive inn URL-adressen manuelt i temaet ditt. Men variabelen vil alltid fungere. Hvis du vil lenke til bildet/{navn}/images/img.gif, skriver du derfor<img src="<{$theme_url}>/images/img.gif">.

Utvidelser

Shoporama inneholder noen forskjellige datatyper. For eksempel produkter og kategorier. Disse datatypene inneholder noen forhåndsdefinerte felt, for eksempel tittel, beskrivelse og pris. Det er mulig å utvide de vanligste datatypene med egne felt. Utvidelser må plasseres i temaet i filen /{name}/extensions/{datatype}.json, der de mulige datatypene er produkt, landing_page, kategori, statisk_side og blogginnlegg.

Json-filen må inneholde en matrise med grupper, der hver gruppe inneholder et antall felt. Formatet er som følger:

Felt Innhold Type
name Navn på gruppen av felt string
description Lengre beskrivelse string
fields Array av felt array
Felt Innhold
title Tittelen på feltet
description Lengre beskrivelse hvis aktuelt
id ID for å trekke ut verdien med
type En av følgende typer: multi, list, text, richtext, longtext, number, bool, image, images, color
options Verdier som enten er av typen liste eller multi. Formatet er
"options": {
	"foo": "Foo",
	"bar": "Bar",
	"baz": "Baz"
}
placeholder Mulig plassholder
default Standardverdi

Nedenfor ser du et eksempel 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"
				}
			}
		]
	}
]

Tilbyr følgende grensesnitt:

For datatyper som støtter utvidelser, må verdiene hentes via metoden getExtensionValue('ID'), der ID er ID-en fra json-filen . Avhengig av datatypen til feltet kan innholdet returneres som en tekst, en matrise eller et objekt:

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

Eller..:

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

Eller hvis du vil gå gjennom bilder i en loop:

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

Globale variabler

Variabel Innhold
$webshop Generelt objekt som inneholder nettbutikken, men som også inneholder noen funksjoner for å hente ut ulike data fra nettbutikken. Les mer om nettbutikk-objektet. Eksempel på hvordan $webshop brukes til å hente ut en liste med kategorier:
<{foreach $webshop->getCategories() as $category}>
	<{$category->getName()|escape}>
<{/foreach}>
$product Produktobjektet hvis du ser på en produktside
$category Kategoriobjektet hvis en kategori vises
$landing_page Landingssideobjekt hvis du er på en landingsside
$page Objektet for den statiske siden hvis du er i en av disse
$blog_post Blogginnleggsobjektet hvis du ser et blogginnlegg
$inc Navnet på den spesielle - ikke dynamiske - siden som kjøres. Verdiene for dette kan være 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 validerer innholdet, kan du bruke koden nedenfor til å kontrollere visningen i en include-fil:

<{if $inc}>
	<{include file=$inc}>
<{/if}>
$shipping Den valgte forsendelsesmetoden
$pager_array Pager hvis den gjeldende siden inneholder siderulling. Innholdet i matrisen er elementenemax, current, total, url og first_url.
$pager Personsøkerobjekt.
$current_url Den absolutte URL-en til den aktuelle siden.
$top_url Relativ URL til den aktuelle siden.
$get En matrise med alle GET-variabler.
$post En matrise med alle POST-variabler.
$cookie En matrise med alle COOKIE-variabler.
$user_id ID-en til butikkeieren som er logget inn i admin. Denne variabelen settes hvis du følger en kobling til butikken fra admin.
$customer Kundeobjekt hvis kunden er logget inn i butikken.
$remote_addr IP-adressen til kunden som ser på siden.
$admin_url URL til Shoporama-administrator
$selected_payment_gateway ID-en til den valgte betalingsgatewayen.
$join_mailinglist En indikator for om kunden har krysset av for at de ønsker å abonnere på nyhetsbrevet.
$basket_url URL til kurven og innholdet i den.
$products_matches ID-er for produkter som har matchet en rabatt eller kampanje
$campaign_ids ID-er på kampanjer hvis produktene i kurven samsvarer med en kampanje.
$campaigns Hvis det er en aktiv kampanje.
$campaign_discount Rabatten fra de aktive kampanjene.
$campaign_matches En matrise med produkter som matcher en kampanje. Hvis det ikke finnes noen produkter, er variabelen null.
$unpaid_order Hvis kunden har en ubetalt ordre.
$unpaid_recurring_order Ubetalt abonnement.
$basket Innholdet i kurven som en matrise, der de enkelte elementene er produktene i kurven, med verdiene:
Variabel Innhold
.id Unik ID på linjen
.product_id ID-en til produktet
.in_stock true/false hvis produktet er på lager
.product Produktet
.attributes produktegenskaper
.own_id sku-nummeret
.amount nummeret i kurven
.comment Mulig kommentar
.bundle matrise for produktet hvis produktet er en pakke

Eksempel på hvordan ovenstående brukes:

<{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}>

Sjekk mal-API-et for å se hvilke metoder som er tilgjengelige for de ulike objektene.

$subscriptions Kurvabonnementer. Fungerer på samme måte som $basket
$price Delsummen av innholdet i handlekurven. Det vil si uten frakt.
$shipping_price Fraktprisen for kurven.
$total_price Totalpris for innholdet i kurven.
$vat MVA på innholdet i kurven.
$basket_weight Kurvens totalvekt (for f.eks. frakt).
$total_amount Totalt antall produkter i kurven.
$voucher Rabattkoden, hvis det finnes en.
$voucher_discount Rabatten fra rabattkoden.
$shipping_country Det valgte leveringslandet.
$nofollow Angir om nofollow er angitt på siden.
$meta_title Tittelen på siden.
$meta_description Beskrivelse av siden.
$canonical URL til sidens kanoniske URL.
$session_order Array med faktureringsadressen. Inneholder feltenenavn, firmanavn, momsnummer, adresse, adresse2, postnummer,by, e-post, telefon, e_nummer, kommentarer
$session_del Array med leveringsadressen. Inneholder feltene:navn, firmanavn, adresse,adresse2, postnummer, by
$session_extra Array med ekstra felt på bestillingen. Hvis et felt POSTes medextra[test]=123, vil $session_extra.test være123 og lagres på bestillingen .
$use_points Antall poeng kunden har oppgitt at de ønsker å bruke på bestillingen.
$point_discount Hvor mange DKK (eller annen valuta) de brukte poengene (fra $use_points) tilsvarer.
$earns Hvor mange poeng kunden tjener ved å fullføre bestillingen.

Funksjoner i malen

Nedenfor finner du Shoporama-spesifikke funksjoner som kan brukes i maler:

Funksjonalitet Beskrivelse
t

Det er mulig å bygge inn språkstøtte i malene dine. Ikke klassisk språkstøtte, der du kan velge tekst på flere språk, men språkstøtte der det er mulig å endre teksten i admin. Det fungerer ved at teksten pakkes inn i en <{t}>-blokk. Etter at malen er gjengitt i nettleseren, kan teksten redigeres i admin. Eksempel:

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

Merk at hvis du endrer teksten i malfilene dine, vil den nye teksten vises som en ny tekst i admin. Det finnes ingen ID-er eller navn bortsett fra innholdet, noe som gjør teksten unik.

Du kan angi seksjonsattributtet på blokken for å dele opp tekstene dine i mer håndterbare deler. I tillegg til hint hvis du vil gi et hint i admin når teksten redigeres:

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

Hvis du har variabelt innhold som du vil sende med uten at verdien ligger i admin, kan du bruke syntaksen nedenfor:

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

Hvis det passer bedre inn i strukturen din, kan du også bruke t som en modifikator på variablene/funksjonene dine:

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

Ovennevnte vil vise følgende i admin:

Argumenter Beskrivelse
section Seksjon for å dele inn i admin
hint Hint brukes i admin som hjelpetekst
cache

Hvis en mal inneholder mange tunge anrop som ikke trenger å oppdateres i sanntid - for eksempel varianter på produkter, menyer eller kategorioversikter - inneholder Shoporama en hurtigbufringsfunksjon som kan gjøre butikken mye raskere. Funksjonene som brukes er henholdsvis cache og get_cache, som først markerer delen som skal bufres, og senere henter de bufrede dataene. Eksempel:

<{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-funksjonen pakker inn innholdet og tildeler det navnet som er angitt i name. Når innholdet skal hentes ut, brukes get_cache, som tar argumentene name, som brukt tidligere , og ttl, som angir i sekunder hvor gammelt innholdet kan være. Hvis argumentet utelates, er standardverdien én time.

Argumenter Beskrivelse
name Brukes til å angi navnet på det bufrede elementet. Det er mulig å bruke dynamiske navn fra variabler.
get_cache

Funksjon som returnerer bufret innhold fra hurtigbufferfunksjonen.

Argumenter Beskrivelse
name Navnet på det bufrede elementet slik det brukes i hurtigbufferen.
ttl Time To Live. Antall sekunder hurtigbufferen må være gyldig.
assign Navnet på den variable huben som innholdet skal tilordnes til.

Temainnstillinger

Det er mulig å legge til noen generelle innstillinger i temaene ved å legge til entheme_settings.json i roten av temaet og provosere noe som følger:

Strukturen er som følger:

Navn Innhold Datatype
info Navnet på temaet string
features En rekke funksjoner som temaet inneholder. Brukes bare for visning i admin. Bare nyttig hvis temaet er generelt og flere brukere kan velge det. For eksempel ["Funksjon A", "Funksjon B", "Funksjon C"]. array
demo URL til en mulig demoside string
settings

Array av felt som kan redigeres:

array
Navn Innhold Datatype
.path ID for feltene som er inkludert i variabelen som det første elementet når verdien hentes. Hvis banen er satt til design, vil verdiene ligge i$settings.design.{feltnavn}. string
.name Navn som vises i admin string
.description Beskrivelse som vises i admin string
.fields

De enkelte feltene som kan redigeres av brukeren

array
Navn Innhold Datatype
.path ID-en for når verdien skal hentes. Hvis banen er satt til farge og det overordnede feltet var design, kan feltet hentes via $settings.design.colour string
.name Navn som vises i admin string
.description Beskrivelse som vises i admin string
.default Standardverdi. Hvis feltet er tomt, brukes denne verdien. string
.type Typen av feltet. Gyldige typer er:bilde,farge,streng,bool,wysiwyg ogliste. string
.values Verdier hvis type er satt til liste. Formater er følgende:
[
	{
		"name": "cheese",
		"value": "Ost"
	},
	{
		"name": "ham",
		"value": "Skinke"
	}
]
array

Eksempel på filinnhold

{
	"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"
				}
			]
		},
	]
}

Sidebygger

Page Builder er et verktøy for å bygge innhold via seksjoner fra JSON-filer. Disse seksjonene kan plasseres på forskjellige sider i nettbutikken. Hvilke sider de kan plasseres på, defineres i filen/{name}/components/sections.json. Innholdet i hver seksjon defineres i en egen fil , som plasseres i /{name}/components/sections/{section}.json.

Hvis du har gjort det ovennevnte, vil Design-lenken øverst i administrasjonen automatisk føre tilSidebygger:

Strukturen i bygningsdelene er som følger:

Wire Innhold
/{navn}/components/sections.json

Inneholder en liste over sidetyper og en matrise over hvilke seksjoner som er tillatt. I tillegg til sidetyper kan du også bruke egendefinerte tagger.

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

Følgende sidetyper er tilgjengelige:

Sidetype Beskrivelse
product Produktsider
category Kategorisider
landing_page Landingssider
static_page Statiske sider
blog_post Blogginnlegg
basket Kurver
address Adresse side
shipping Spørsmålssiden
approve Autorisasjonsside
thanks Takke-siden som kunden vanligvis ser etter at bestillingen er fullført
search Søk side
also Oppsalgssiden, som kan brukes hvis du viser en oppsalgsside etter at kunden har lagt produkter i handlekurven
order Bestillingssiden som viser bestillingsinnholdet via en lenke
#tags Valgfrie tagger du lager selv

Et eksempel på en sections.json der brukeren kan legge til seksjoneneglidebryter, bilder og quiz på destinasjonssider, men bare glidebryter på produktsider, og på #footer kan en om-seksjon legges til , vil se slik ut:

{
	"landing_page": ["slider", "photos", "quiz"],
	"product":      ["slider"],
	"#footer":      ["about"]
}
/{navn}/components/tags.json Tagger brukes til plasseringer som du finner opp selv, og som du kan dra ut som du vil. Du kan for eksempel ha behov for en #footer som du drar ut og viser nederst i butikken, eller et #xmas-oppsett som du bare bruker i desember . Formatet for tags.json er
{
	"tag1": "Beskrivelse ...",
	"tag2": "Beskrivelse ...",
	"tag3": "Beskrivelse ..."
}

De enkelte taggene vises automatisk i admin når brukeren oppretter et nytt oppsett:

For å hente ut innholdet i taggene i temaet brukes funksjonengetBlocks() på følgende måte:

<{if $blocks = $webshop->getBlocks("#foo")}>
	<{foreach $blocks as $block=>$elements}>
		[...]
	<{/foreach}>
<{/if}>
/{navn}/components/sections I denne katalogen er hver seksjon plassert i sin egen json-fil. Hver fil er oppkalt etter navnet på seksjonen. Hvis seksjonen heter slider, skal innholdet ligge i/{name}/components/sections/slider.json. Strukturen i filene er som følger
Felt Beskrivelse Type
title Navnet som vises i admin string
description Beskrivelse som vises i admin string
fields

En rekke felt

array
Felt Beskrivelse Type
.id ID-en til feltet. Brukes når innholdet loopes gjennom i temaet string
.type Innholdstype. Gyldige typer er:liste,tekst,heltall,bilde,bilder,bool,richtext,longtext,repeater,produkt,kategori oglanding_page. string
.options Brukes bare for felt av typen liste, og inneholder en rekke alternativer, for eksempel
[...]
"options": {
	"hat": "Hat",
	"glasses": "Briller",
	"beard": "Skæg"
},
[...]
string
.title Tittelen på feltet string
.description Beskrivelse av feltet string
.max Maksimalt antall felt som kan legges til int
.required Om feltet er obligatorisk bool
.placeholder Plassholder for admin string
.default Mulig standardverdi for feltet string
.fields Brukes bare hvis typen er repeater og kan inneholde de samme feltene som seksjoner. Et forenklet eksempel på en glidebryterrepeater kan være:
[...]
"type": "repeater",
"fields": [
	{
		"id": "headline",
		"type": "text",
		"title": "Overskrift"
	},
	{
		"id": "img",
		"type": "image",
		"title": "Billedet"
	}
]
[...]
string
.field_title Brukes bare hvis typen er repeater og inneholder navnet på de enkelte elementene i repeateren string

Utsikt

Det finnes ulike strategier for å hente ut data. I utgangspunktet vil det være en$page_blocks på sidene som samsvarer med et oppsett. Denne kan sløyfes gjennom, eller innholdet kan hentes ut via $webshop->getBlocks('#foo'). Eller innholdet kan nås via seksjonsnavnet.

Som et utgangspunkt anbefaler vi å plassere visningen av de enkelte seksjonene i separate filer, for eksempel /{navn}/templates/sections/{section}.html. Da er det enkelt å loope gjennom $page_blocksog inkludere den riktige visningen på følgende måte:

<{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}>

Merk at typen av raden finnes i variabelen _type.

Vi kaller seksjonen nedenfor for images - innholdet ligger derfor i/{name}/components/sections/images.json.

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

Dette gir følgende grensesnitt i admin:

For å hente ut innholdet ved hjelp av metoden ovenfor kan/{navn}/templates/sections/images.html inneholde følgende:

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

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

Når det gjelder datatype, er det viktig å være klar over hva de enkelte feltene inneholder. De kan enten værestrenger, matriser eller objekter. Med andre ord bør du gjøre noe lignende:

[...]
<{foreach $section as $name=>$val}>
	<{if is_array($val)}>
		Repeater eller serie av bilder
	<{elseif is_object($val)}>
		Ett bilde
	<{else}>
		Tekst, tall eller lignende
	<{/if}>
<{/foreach}>
[...]

Hvis du bruker typene product, category eller landing_page, returneres den valgte ID-en i temaet , og du må selv hente ut objektet med metodene $webshop->getProductById(id),$webshop->getCategory( id) eller $webshop->getLandingPage(id). Eksempel:

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

Merk at det alltid er mulig å bruke var_dump til å undersøke hva variabelen inneholder og loope gjennom den på riktig måte.

Utsikt

Basert på den tidligere nevnte strukturen, er de enkelte visningene omtalt nedenfor. For å forstå de enkelte objektene og hvilke metoder som er tilgjengelige, anbefaler vi at du tar en titt på vår Mal-API.

Last ned Alaska-temaet vårt for å se eksempler på de ulike visningene.

Våre produkter

Produktvisningen kan ligge i product .html, men dette er valgfritt . Det er alltid index.html som håndterer de enkelte visningene. Vi anbefaler imidlertid å bruke denne strukturen. For å vite at en produktvisning kjører, sjekk om $product er til stede .

Legg i handlekurven

Produkter legges til i handlekurven ved å foreta et POST-kall til en hvilken som helst side - vanligvis bare den siden du allerede viser, med argumentene product_id, attributes[{attribute_id}]={attribute_value_id} ogamount. Attributtet skal bare legges til hvis produktene har varianter.

Et enkelt eksempel på hvordan du legger til produkter i handlekurven, kan være

<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>

Ovennevnte kan selvfølgelig gjøres mer komplisert hvis du ønsker å vise lagerstatus, pakker osv.

Landingssider

Landingssider inneholder en $landingpage og $products, som er en matrise med produkter som skal vises på siden.

Hvis siden krever en personsøker, setter du den inn på følgende måte:

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

Kategorier

Kategorier inneholder en $category og $products, som er en matrise med produkter som skal vises på siden.

Hvis siden krever en personsøker, setter du den inn på følgende måte:

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

Statiske sider

Statiske sider vil inneholde en $page.

Blogg

Bloggen kan deles inn i to sider: blog.html og blog_post.html, der den første kan hente en liste over blogginnlegg via

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

Selve visningen av de enkelte blogginnleggene gjøres ved å se på variabelen $blog_post.

Hvis listen over blogginnlegg kommer fra en kategori, finnes det også en $category med den kategorien.

Produktanmeldelser

I product_review.html har du tilgang til $order, som er bestillingen din . Du kan bare se gjennom produkter du har kjøpt. Fra bestillingen kan du hente produktene via $order->getOrderProducts(). For å lagre produktomtalene må du foreta et POST-kall til den samme siden med følgende innhold:

<{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 er sant når kunden har vurdert.

For å lenke til vurderingssiden fra bestillingen din , bruker du $order->getReviewUrl().

Søket fungerer ved å gjøre et GET-kall til /search, der argumentet?search= må være søkeordet ditt. Et eksempel:

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

Det søkes etter produkter, kategorier, blogginnlegg og destinasjonssider. For å vise resultatet må du se på de fire variablene$produkter, $kategorier, $blogginnlegg, $sider og $landingssider.

Om statiske sider skal søkes på, må aktiveres i admin.

Ønskeliste

Hvis kundene dine kan logge inn i butikken din, kan du la dem opprette ønskelister. De kan opprette så mange ønskelister de vil, og en ønskeliste har et navn, en beskrivelse og et utvalg av produkter. Selve ønskelisten har en offentlig adresse, slik at kundene dine kan sende en lenke.

Ønskelisten bruker følgende maler:

Mal URL Beskrivelse Relevante variabler
wishlist.html /wishlist Den offentlige ønskeliste-siden. $wishlist som inneholder ønskelisten. Se metoder her.
user-wishlists.html /user-wishlists Brukerens ønskeliste-side. Krever innlogging. $customer->getWishlists() for å hente ut ønskelister.
user-wishlist.html /user-wishlist Siden som brukes til å redigere ønskelisten og produktene $wishlist som inneholder ønskelisten. Se metoder her.

For å opprette en ønskeliste må det sendes en POST fra user-wishlists.html med navnefeltet og en valgfri beskrivelse . For eksempel

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

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

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

Merk at du kan bruke metodene $wishlist->getRemoteUrl() og $wishlist->getEditUrl() til å opprette lenker for å vise og redigere ønskelistene.

I filen user-wishlist.html der ønskelisten redigeres, må navn og beskrivelse sendes somnavn, beskrivelse og status, som enten kan være aktiv eller lukket. Selve produktene, antallet og eventuelle kommentarer må sendes som en matrise i følgende format:

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

Eksempel på kode:

<{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}>

Hvis en variabelredigering sendes, vil siden gå tilbake til den samme redigeringssiden igjen. I motsatt fall vil du bli omdirigert til oversikten over ønskelisten. For å slette ønskelisten må en variabel med navnetremove sendes. For eksempel

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

For å legge til produkter på en ønskeliste fra butikken, kan det gjøres et POST-kall fra en hvilken som helst side med feltenewishlist_id, product_id og en valgfri attributt_value_id hvis produktet har en variant. Eksempel:

<{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}>

Retursenter

Retursenteret gjør det mulig for kundene dine å opprette returer selv. Det må aktiveres ibutikkinnstillingene. Når en kunde har opprettet en retur, må den godkjennes i administrasjonen, og det opprettes en kreditnota.

Retursenteret bruker følgende maler:

Mal URL Beskrivelse Relevante variabler
return.html /return Siden der returen opprettes $order inneholder bestillingen kunden ønsker å returnere. Se metoder her.
order-return.html /order-return Siden der returen deretter vises $order_return med avkastningen. Se metoder her.
return_received.html E-post som sendes til kunden når de oppretter en retur $order_return med avkastningen. Se metoder her.

Det er to måter kunden kan gå inn på retursiden på. Den ene er ved å oppgi bestillingsnummeret og e-postadressen på bestillingen. Den andre er ved å følge en direkte lenke. Den direkte koblingen hentes fra bestillingen ved hjelp av$order->getReturnUrl(). For eksempel

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

Som det fremgår av eksempelet, er det lurt å sjekke at bestillingen ikke er en kreditnota, og at forhandleren har aktivert retursenteret. Eksemplet kan brukes overalt der det finnes en $ordre. For eksempel i kundens egen ordreoversikt eller i e-poster.

Hvis du ikke bruker innlogging eller på annen måte ønsker at kunden skal kunne søke etter bestillingen sin, må du implementere et søk med ordrenummer og e-postadresse i return.html.Det er feltene webshop_order_id og e-post som skal POSTES til /return. Hvis bestillingen blir funnet, vil kunden bli sendt til retur, hvis ikke vil$get.not_found bli satt, og du kan vise en feilmelding i temaet. Et minimalt skjema kan se slik ut:

<{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>
Opprette en retur

I filen return.html må det hentes ut en liste over ordrelinjer, og kunden kan velge hvilke produkter som skal returneres og hvorfor. I motsetning til vanlige ordrevisninger må returen inneholde én linje per ordrelinje.

<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 er mulig å angi en fast fraktmetode og pris i admin. Hvis dette gjøres, hentes fraktmetoden ut via$webshop->getReturnShipping($country_id), og hvis prisen er fast, hentes den ut via$webshop->getReturnShippingPrice($country_id). Eksempel:

<{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 valgte leveringsmetoden, hvis den er valgfri, må sendes som shipping_id.

Visning av avkastning

Når returen er opprettet, vises den i order-return.html, som inneholder en $order_returnmed de relevante metodene .

/so

also.html er vår mersalgsside. I utgangspunktet har du tilgang til $product, og derfra kan du komme med forslag til kunden. For eksempel kan det være relevant å bruke $product->getRelatedProducts(),$product->getAlsoBought(), eller $webshop->getPopularProducts().

404

Brukes kun til å vise 404-sider.

410

Brukes kun til å vise 410 sider.

Captcha

En captcha legges automatisk inn når du prøver å melde deg på nyhetsbrevet eller skrive kommentarer. Dette er for å unngå spam. Det er mulig å designe siden selv i captcha.html, og den må som et minimum inneholde:

<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>

Logg inn

Det er mulig å la kundene dine logge inn i butikken. Hvis de er innlogget, vil det finnes en$customer som inneholder informasjon om brukeren. Alle sider som redigerer, logger inn osv. må sendes inn via POST til selve siden.

Filnavn Beskrivelse Relevante variabler/parametere i skjemaet
/user-edit.html Brukes til å redigere kundedata. Det er mulig å legge til felt på kunden. Se mer under denne tabellen. 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 tidligere bestillinger $my_orders
/user-points.html Kundens synspunkt $my_points
/user-profile.html Visning av kundedata $customer
/user-reset-password.html Brukes for tilbakestilling av passord email, password
/user-sign-in.html Innloggingsside. Bruk redir hvis kunden må omdirigeres til en URL etter pålogging. email, password, redir
/user-sign-up.html Et skjema som kunden bruker for å registrere seg. name, email, phone, address, zipcode, city, company, vat_number, og country_id

Egendefinerte felt for kunden

Det er mulig å definere egendefinerte felt for brukerne dine i administrator. Disse feltene redigeres på følgende måte:

<{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 gjør det mulig for kundene dine å tjene og bruke poeng når de fullfører bestillinger. Oppsettet administreres under Kunder > Lojalitetsprogram.

Du kan bruke metodene nedenfor for å sjekke om butikken har aktivert lojalitetsprogrammet, og om kunden er logget inn og har opptjent poeng som de kan bruke:

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

Du kan bruke følgende kodeeksempel for å vise hvor mange poeng kunden har opptjent, og hvor mange poeng han eller hun kan bruke på den aktuelle bestillingen:

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}>

Feltet du legger inn i kurven for å angi hvor mange poeng kunden skal bruke, skal hete use_points og kan se slik ut:

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

Du kan bruke $earns for å se hvor mye kunden tjener på bestillingen:

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

Du kan bruke eksemplet nedenfor for å beskrive lojalitetsprogrammet ditt:

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()}>.

Hvis du vil lage en side med poengoversikt , kan du bruke user-points.html, der du kan løpe gjennom $my_pointsog presentere innholdet . Ta en titt på SafePoint-klassen for å se hvilke metoder som er tilgjengelige.

Tips: Du kan style ordreoversikten ved å bruke følgende CSS-klasser: points_used, points_earned og has_profile.

Sjekk ut

Sjekk ut-flyten er ganske enkelt en serie html-sider, som hver inneholder et skjema som POSTER noen data til seg selv, og hvis neste-feltet er angitt, vil Shoporama videresende til neste side i flyten. Vanligvis vil du sette "Neste"-knappen til name="next". Du kan alltid lenke til tidligere sider i flyten. Når kunden har lagt inn opplysningene sine, lagres disse i to arrayer, $session_order og $session_del. For eksempel$session_order.name.

Filnavn Beskrivelse Relevante variabler/parametere i skjemaet
basket.html Viser innholdet i kurven. Enkelt eksempel på hvordan $basket brukes:
<{foreach $basket as $line}>
	<{$line.amount}> x <{$line.product->getName()}>

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

For å endre nummeret, POST det på følgende måte

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

For å legge til en rabattkode må en kupong POSTES med rabattkoden. Hvis rabattkoden er ugyldig, vil $get.wrong_voucher være til stede i malen .

Leveringslandet kan endres ved å POSTe en del_country_id med ID-en til leveringslandet.

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

Siden der leveringsinformasjonen legges inn.

Hvis mailinglist er satt til 1, abonnerer kunden på nyhetsbrevet.

Hvis create_profileer satt til 1, opprettes det en profil for kunden slik at de kan logge inn senere.

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

Brukes til å velge leveringsmetode.

De enkelte leveringsmetodene kan hentes ut via$webshop->getShippings().

For å lagre fraktmetoden må enshipping_id POSTes med ID-en til den aktuelle fraktmetoden. Hvis fraktmetoden har en tilknyttet pakkeshop, hentes de ut via $shipping->getDeliveryShops(). Du kan velge leveringsbutikk på følgende måte:

[...]
<{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

Autorisasjonssiden. Brukes til å vise bestillingen.

Hvis butikken inneholder flere betalingsgatewayer, kan disse velges på denne siden. De hentes via $webshop->getPaymentGateways() og sendes inn via payment_gateway_idfor å bytte.

$basket, $shipping, payment_gateway_id
thanks.html Takk-siden. Brukes til å vise bestillingen som er fullført. $order

Ajax

Shoporama har to innebygde ajax-kall. Det ene kan trekke ut produkter på forskjellige måter (filtrering), og det andre er et generelt og enkelt søk som søker etter produkter, kategorier og destinasjonssider.

Filtrering

Filtreringen ligger i filen /ajax som ligger i roten til alle butikkene

Argument Beskrivelse Eksempel på et eksempel
atags En liste over tagger på attributtverdiene, attributtverdiene er innstillinger på attributtene i produktprofilene. verdiene på atags må være atskilt med komma, men tillater grupperinger atskilt med pipe som et logiskELLER.
ajax?atags=female,black|white
product_ids Liste over product_ids separert med pipe.
ajax?product_ids=1|2|3|4
price_range Returnerer produkter som faller innenfor et prisintervall. Beløpene må skilles fra hverandre med en pipe.
ajax?price_range=100|200
categories En pipeseparert liste over kategorier produktene skal være i. Hvis argumentet exclude=1 er angitt, returneres en liste over produkter som ikke har kategoriene .
ajax?categories=5|9|2
ajax?categories=5|9|2&exclude=1
sort Sorteringsrekkefølgen. Verdiene popular, weight, name,price, created kan angis. Om sorteringsrekkefølgen skal være stigende eller synkende, angis ved å sette sort_ordertil enten asc (stigende) eller desc (synkende).
ajax?sort=price&sort_order=desc
attribute_values En liste med ID-er for attributtverdiene som produktene skal ha. Listen er separert med pipe. Hvis argumentetexclude=1 er angitt, returneres en liste over produkter som ikke samsvarer.
ajax?attribute_values=9|8|12
suppliers Rørseparert liste med leverandør-ID-er.
ajax?suppliers=8|2
landing_pages Girl-separert liste over landingsside-ID-er for produkter som skal vises på.
ajax?landing_pages=5|24
extension.{id} Hvis temaet bruker utvidede felt, kan produkter hentes ut basert på dem. Det gjøres absolutte søk, så de feltene som gir mest mening å bruke, er bool, multi,number og list. Pipe-separerte verdier kan brukes hvis produktene bare skal matche én av verdiene.
ajax?extension.foo=1&extension.tags=foo|bar
attribute_tags_in_stock Liste over tagger på attributtverdier som må være på lager. Listen kan være pipe-separert.
ajax?attribute_tags_in_stock=foo|bar
attribute_tags Liste over tagger som må angis på produktene. Listen kan være pipe-separert.
ajax?attribute_tags=foo|bar
attribute_tag Samme som attribute_tags, men bare med én enkelt tag.
ajax?attribute_tag=foo
force_categories En pipeseparert liste med kategori-ID-er som alle må være angitt på produktene.
ajax?force_categories=5|9|2
limit Maks. antall produkter som skal returneres.
ajax?limit=10
offset Startposisjon i forhold til hvor i produktlisten du ønsker å hente fra.
ajax?offset=100&limit=10
meta Pipe-separert liste over ekstra felt du ønsker å se på produktene i resultatet. Hvis du angirmeta=_all, returneres alle.
ajax?meta=foo|bar
ajax?meta=_all
only_in_stock_variants Settes til 1 eller 0, avhengig av om hvert produkt i resultatet kun skal inneholde varianter som er på lager. Standardinnstillingen er 0.
ajax?only_in_stock_variants=1
include_meta Angis til 1 eller 0, avhengig av om du vil ha et ekstra metafelt i resultatet som inneholder beskrivelser av produktene i resultatet. Dette er informasjon om hvilke attributter, kategorier og merker som finnes. Standardinnstillingen er 0.
ajax?include_meta=1
include_pagination Settes til 1 eller 0, avhengig av om du vil ha et ekstra pagineringsfelt i resultatet som inneholder informasjon om paginering. Feltene i matrisen er offset, limit, count, total. Standardinnstillingen er 0.
ajax?include_pagination=1
pretty Settes til 1 eller 0, avhengig av om json-svaret skal formateres pent eller ikke.
ajax?pretty=1

Svaret fra /ajax er en matrise i formatet nedenfor:

[
    {
        "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 hensyn til hastigheten mellomlagrer vi svaret fra ajax-filen, men i testmiljøet kan du legge til rebuild=1 som et argument for at siden skal gjenoppbygges . Vi anbefaler at du ikke gjør dette i produksjonsmiljøet, da det kan gjøre siden betydelig tregere.

Siden /ajax_search inneholder et generelt søk etter produkter, kategorier og destinasjonssider. Den kan for eksempel brukes til autofullføring i søkefeltet. Den tar følgende argumenter:

Argument Beskrivelse Eksempel på et eksempel
term Nøkkelord.
ajax_search?term=ostemad
limit Maks. antall resultater.
ajax_search?term=ostemad&limit=25
include En kommaseparert liste over datatyper du vil søke i. Verdiene kan væreprodukter, kategorier, blogginnlegg, sider og landingssider.
ajax_search?term=ostemad&include=products,categories
pretty Settes til 1 eller 0, avhengig av om json-svaret skal formateres pent eller ikke.
ajax_search?term=ostemad&pretty=1

Resultatet er en matrise i formatet nedenfor:

[
    {
        "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"
    }
]

Dette nettstedet bruker informasjonskapsler

Vi bruker informasjonskapsler til å tilpasse innhold og annonser, vise funksjoner i sosiale medier og analysere nettrafikken vår.

Informasjon om din bruk av nettstedet vårt deles også med våre partnere innen sosiale medier, annonsering og analyse, som kan kombinere den med andre data fra din interaksjon med deres tjenester.

Les mer om informasjonskapslene våre