Nachfolgend finden Sie Informationen über die Entwicklung eines Shoporama-Themas.
Im Allgemeinen besteht ein Shoporama-Thema aus einer Reihe von HTML-Dateien, die sich in einem Ordner auf unserem FTP-Server befinden. Die Vorlagensprache in den einzelnen Dateien ist Smarty, die unten erwähnt wird.
Jede Vorlage ermöglicht den Zugriff auf eine Reihe von Objekten und Methoden. Sie können mehr über sie in unserem Vorlagen-API.
Wenden Sie sich an support@shoporama.dk, wenn Sie Fragen haben.
Die Engine unseres Template-Systems basiert auf Smarty.
Wir haben aus Gründen der Abwärtskompatibilität die Version 2.6 installiert, aber wir pflegen sie nicht mehr und empfehlen, dass jeder die Version 4.x verwendet. Die Version wird unter Einstellungen für den Shop eingestellt.
Bitte beachten Sie, dass diese Dokumentation nur die Version 4.x berücksichtigt.
Der Unterschied zwischen Standard-Smarty und unserem System besteht darin, dass wir <{
und }>
als Begrenzungszeichen verwenden. D.h. die Syntax ist:
<h1>Velkommen til <{$webshop->getName()|escape}></h1>
Wenn Sie sich nicht sicher sind, was eine Variable ist oder was eine Funktion zurückgibt, können Sie sie durch var_dump
laufen lassen. Wenn Sie ein Objekt haben, können Sie immer sehen, welche Methoden in unserer Vorlagen-API verfügbar sind.
Sie verwenden var_dump
auf die folgende Weise:
<{$order|var_dump}>
In einigen Fällen ist es wichtig sicherzustellen, dass eine Variable, die Sie als Objekt verwenden, auch ein Objekt ist. Andernfalls wird die Vorlage nicht funktionieren. Wir setzen einige globale Variablen wie $product
,$webshop
und andere. Für diese Variablen ist es nicht notwendig. Sie können auf eine der folgenden Arten überprüft werden:
<{* 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}>
Wenn Sie sehen wollen, welche Variablen auf der Seite, die Sie entwickeln, verfügbar sind, können Sie Smarty in den Debug-Modus versetzen und die Variablen in einem neuen Fenster sehen. Fügen Sie den folgenden Code in Ihre Vorlage ein:
<{debug}>
Lesen Sie hier mehr über Smarty4: Smarty 4 Dokumentation.
Pfad | Funktionsweise |
---|---|
/{navn} |
Hauptordner für Ihr Thema |
/{navn}/components |
Ordner mit Komponenten für Page Builder |
/{navn}/components/sections.json |
Liste der Abschnitte, die auf welchen Seiten eingefügt werden können |
/{navn}/components/tags.json |
Tags zur Verwendung im Thema |
/{navn}/components/sections |
Ordner für die Dateien der einzelnen Abschnitte |
/{navn}/extensions |
Erweiterungen zu Shoporamas eingebauten Datentypen. |
/{navn}/templates |
Ordner für Vorlagen |
/{navn}/templates/mails |
Ordner für Mailvorlagen |
Die Benennung von Dateien in /{name}/templates
ist im Allgemeinen frei. Es gibt jedoch ein paar Ausnahmen:
Pfad | Funktionsweise | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/{navn}/templates/global.html |
Die übergeordnete Seite, die die Struktur des gesamten Shops enthält. Der Inhalt selbst wird dort eingefügt, wo diese Vorlage <{$contents}> anzeigt , das ist eine spezielle Variable, die aus der index.html unten stammt. Eine sehr einfacheglobal.html könnte wie folgt aussehen:
<!DOCTYPE html> <html> <head> <title><{$webshop->getName()|escape}></title> </head> <body> <nav> <!-- Din navigation --> </nav> <div> <{$contents}> </div> </body> </html> |
|||||||||||||||||||||||||||||||||||||||
/{navn}/templates/index.html |
Diese Vorlage wird verwendet, um den Inhalt von "Was-du-jetzt- siehst" anzuzeigen. D.h. ein Produkt, eine Landing Page oder der Warenkorb usw. Ein Vorschlag, wie es aussehen könnte, ist folgender:
<{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 |
Wird von der Verwaltung verwendet, wenn Sie einen Lieferschein drucken möchten. Der Inhalt der Bestellung wird immer in der Variablen $order stehen. |
|||||||||||||||||||||||||||||||||||||||
/{navn}/templates/mails |
Ordner für E-Mail-Vorlagen. Muss die folgenden Dateien enthalten:
Allgemeine Informationen über den Aufbau von MailvorlagenIm Grunde genommen sind alle E-Mail-Vorlagen in zwei Teile unterteilt. Ein Teil für den Betreff und der andere Teil für den Inhalt. Die Aufteilung der Vorlage erfolgt durch die Überprüfung, ob die Variable <{if $subject}> Emnet på mailen <{else}> Indholdet af mailen <{/if}> Mit Ausnahme der beiden E-Mails |
Sie können Ihre Bilder, Stylesheets usw. platzieren, wo immer Sie wollen, aber wir empfehlen, eine Struktur wie/{name}/images
und /{name}/css
zu verwenden. Wenn Sie auf die Dateien verweisen, verwenden Sie die Variable$theme_url
, die die URL des Themes enthält. Beachten Sie, dass sie sich ändern kann, so dass Sie die URL nicht immer manuell in Ihr Thema eingeben können. Aber die Variable wird immer funktionieren. Wenn Sie also auf das Bild/{name}/images/img.gif
verlinken wollen, geben Sie<img src="<{$theme_url}>/images/img.gif"> ein.
Shoporama enthält einige verschiedene Datentypen. Zum Beispiel, Produkte und Kategorien. Diese Datentypen enthalten einige vordefinierte Felder wie Titel, Beschreibung und Preis. Es ist möglich, die gängigsten Datentypen mit eigenen Feldern zu erweitern. Die Erweiterungen müssen im Theme in der Datei /{name}/extensions/{datatype}.json
abgelegt werden, wobei die möglichen Datentypen product
, landing_page
, category
, static_page
und blog_post
sind.
Die Json-Datei muss ein Array
von Gruppen enthalten, wobei jede Gruppe eine Reihe von Feldern enthält. Das Format ist wie folgt:
Feld | Inhalt | Typ | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
name |
Name der Gruppe von Feldern | string |
||||||||||||||||
description |
Längere Beschreibung | string |
||||||||||||||||
fields |
Array von Feldern | array |
||||||||||||||||
|
Nachstehend finden Sie ein Beispiel für die json-Datei 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" } } ] } ]
Bietet die folgende Schnittstelle:
Bei Datentypen, die Erweiterungen unterstützen, müssen die Werte über die Methode getExtensionValue('ID')
abgerufen werden, wobei ID
die ID aus der json-Datei ist. Je nach Datentyp des Feldes kann der Inhalt als Text, Array oder Objekt zurückgegeben werden:
Materiale: <{$product->getExtensionValue('materiale')}>
Oder:
<{if $img = $product->getExtensionValue('img')}> <{$img->getSrc(50, 50, 'fit')}> <{/if}>
Oder wenn Sie Bilder in einer Schleife durchlaufen wollen:
<{foreach $product->getExtensionValue('my-images') as $image}> <img src="<{$image->getSrc(50, 50, 'box')}>"> <{/foreach}>
Variabel | Inhalt | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$webshop |
Allgemeines Objekt, das den Webshop enthält, aber auch einige Funktionen zum Extrahieren verschiedener Daten aus dem Webshop enthält. Lesen Sie mehr über das Webshop-Objekt. Beispiel, wie $webshop verwendet wird, um eine Liste von Kategorien zu erhalten:<{foreach $webshop->getCategories() as $category}> <{$category->getName()|escape}> <{/foreach}> |
||||||||||||||||||||
$product |
Das Produktobjekt, wenn Sie eine Produktseite anzeigen | ||||||||||||||||||||
$category |
Das Category-Objekt, wenn eine Kategorie angezeigt wird | ||||||||||||||||||||
$landing_page |
Landing Page-Objekt, wenn Sie sich auf einer Landing Page befinden | ||||||||||||||||||||
$page |
Das Objekt für die statische Seite, wenn Sie sich in einem der folgenden Bereiche befinden | ||||||||||||||||||||
$blog_post |
Das Blogpost-Objekt, wenn Sie einen Blogpost sehen | ||||||||||||||||||||
$inc |
Der Name der speziellen - nicht dynamischen - Seite, die gerade ausgeführt wird. Die Werte hierfür können sein 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 .
Da wir den Inhalt validieren, können Sie den folgenden Code verwenden, um die Anzeige in einer Include-Datei zu steuern: <{if $inc}> <{include file=$inc}> <{/if}> |
||||||||||||||||||||
$shipping |
Die gewählte Versandart | ||||||||||||||||||||
$pager_array |
Pager, wenn die aktuelle Seite einen Seitenbildlauf enthält. Der Inhalt des Arrays besteht aus den Elementenmax , current , total , url und first_url . |
||||||||||||||||||||
$pager |
Pager-Objekt. | ||||||||||||||||||||
$current_url |
Die absolute URL der aktuellen Seite. | ||||||||||||||||||||
$top_url |
Relative URL zur aktuellen Seite. | ||||||||||||||||||||
$get |
Ein Array mit allen GET-Variablen. | ||||||||||||||||||||
$post |
Ein Array mit allen POST-Variablen. | ||||||||||||||||||||
$cookie |
Ein Array mit allen COOKIE-Variablen. | ||||||||||||||||||||
$user_id |
Die ID des Shop-Besitzers, der in der Verwaltung angemeldet ist. Diese Variable wird gesetzt, wenn Sie einem Link zum Shop vom Admin folgen. | ||||||||||||||||||||
$customer |
Kundenobjekt, wenn der Kunde im Shop eingeloggt ist. | ||||||||||||||||||||
$remote_addr |
Die IP-Adresse des Kunden, der die Seite betrachtet. | ||||||||||||||||||||
$admin_url |
URL zur Shoporama-Verwaltung | ||||||||||||||||||||
$selected_payment_gateway |
Die ID des ausgewählten Zahlungs-Gateways. | ||||||||||||||||||||
$join_mailinglist |
Eine Anzeige, ob der Kunde angekreuzt hat, dass er den Newsletter abonnieren möchte. | ||||||||||||||||||||
$basket_url |
URL zum Korb und seinem Inhalt. | ||||||||||||||||||||
$products_matches |
IDs von Produkten, für die ein Rabatt oder eine Werbeaktion gewährt wurde | ||||||||||||||||||||
$campaign_ids |
IDs zu Kampagnen, wenn die Produkte im Warenkorb einer Kampagne entsprechen. | ||||||||||||||||||||
$campaigns |
Wenn es eine aktive Kampagne gibt. | ||||||||||||||||||||
$campaign_discount |
Der Rabatt aus den aktiven Kampagnen. | ||||||||||||||||||||
$campaign_matches |
Ein Array von Produkten, die zu einer Kampagne passen. Wenn es keine Produkte gibt, ist die Variable null. | ||||||||||||||||||||
$unpaid_order |
Wenn der Kunde eine unbezahlte Bestellung hat. | ||||||||||||||||||||
$unpaid_recurring_order |
Unbezahltes Abonnement. | ||||||||||||||||||||
$basket |
Der Inhalt des Warenkorbs als Array, wobei die einzelnen Elemente die Produkte im Warenkorb sind, mit den Werten:
Beispiel für die Verwendung der obigen Angaben: <{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}> Überprüfen Sie die Vorlagen-API, um zu sehen, welche Methoden für die verschiedenen Objekte verfügbar sind. |
||||||||||||||||||||
$subscriptions |
Warenkorb-Abonnements. Funktioniert auf die gleiche Weise wie $basket |
||||||||||||||||||||
$price |
Die Zwischensumme des Warenkorbinhalts. Das heißt, ohne Versand. | ||||||||||||||||||||
$shipping_price |
Der Versandpreis des Warenkorbs. | ||||||||||||||||||||
$total_price |
Gesamtpreis des Warenkorbinhalts. | ||||||||||||||||||||
$vat |
Mehrwertsteuer auf den Inhalt des Warenkorbs. | ||||||||||||||||||||
$basket_weight |
Das Gesamtgewicht des Korbes (z. B. für Fracht). | ||||||||||||||||||||
$total_amount |
Gesamtzahl der Produkte im Warenkorb. | ||||||||||||||||||||
$voucher |
Den Rabattcode, wenn es einen gibt. | ||||||||||||||||||||
$voucher_discount |
Der Rabatt aus dem Rabattcode. | ||||||||||||||||||||
$shipping_country |
Das ausgewählte Lieferland. | ||||||||||||||||||||
$nofollow |
Zeigt an, ob nofollow auf der Seite gesetzt ist. | ||||||||||||||||||||
$meta_title |
Der Titel der Seite. | ||||||||||||||||||||
$meta_description |
Beschreibung der Seite. | ||||||||||||||||||||
$canonical |
URL zum kanonischen Wert der Seite. | ||||||||||||||||||||
$session_order |
Array mit der Rechnungsadresse. Enthält die Feldername , company_name , vat_number , address , address2 , zipcode ,city , email , phone , ean_number , comments |
||||||||||||||||||||
$session_del |
Array mit der Lieferadresse. Enthält die Felder:name , company_name , address ,address2 , zipcode , city |
||||||||||||||||||||
$session_extra |
Array der zusätzlichen Felder in der Bestellung. Wenn ein Feld mitextra[test]=123 gepostet wird, ist $session_extra.test gleich 123 und wird in der Bestellung gespeichert. |
||||||||||||||||||||
$use_points |
Anzahl der Punkte, die der Kunde für die Bestellung ausgeben möchte. | ||||||||||||||||||||
$point_discount |
Wie viele DKK (oder andere Währung) die verwendeten Punkte (aus $use_points ) entsprechen. |
||||||||||||||||||||
$earns |
Wie viele Punkte der Kunde durch den Abschluss der Bestellung erhält. |
Nachfolgend finden Sie die Shoporama-spezifischen Funktionen, die in Vorlagen verwendet werden können:
Funktionsweise | Beschreibung | ||||||||
---|---|---|---|---|---|---|---|---|---|
t |
Es ist möglich, Sprachunterstützung in Ihre Vorlagen zu integrieren. Keine klassische Sprachunterstützung, bei der Sie den Text in mehreren Sprachen auswählen können, sondern eine Sprachunterstützung, bei der es möglich ist, den Text im Adminbereich zu ändern. Das funktioniert, indem der Text in einen <{t}>Din kurv<{/t}> Wenn Sie den Text in Ihren Vorlagendateien ändern, wird der neue Text in der Verwaltung als neuer Text angezeigt. Es gibt keine anderen IDs oder Namen als den Inhalt, was den Text einzigartig macht. Sie können das Attribut <{t section="basket" hint="Bruger i overskriften"}>Din kurv<{/t}> Wenn Sie einen variablen Inhalt haben, den Sie senden möchten, ohne dass der Wert in admin steht, können Sie die folgende Syntax verwenden: <{t amount=$total_amount price=$total_price|number_format:2:",":"." hint="Til kurven"}> Du har {amount} ting til {price} kroner i kurven. <{/t}> Wenn es besser in Ihre Struktur passt, können Sie <{$title = "Min titel her"}> <{$title|t}> In der Verwaltung wird dann folgendes angezeigt:
|
||||||||
cache |
Wenn ein Template viele umfangreiche Aufrufe enthält, die nicht live aktualisiert werden müssen - wie Produktvarianten, Menüs oder Kategorieübersichten - enthält Shoporama eine Caching-Funktion, die den Shop deutlich schneller machen kann. Die verwendeten Funktionen sind <{get_cache name="my_cache" ttl=3600 assign="c"}> <{if $c}> Fra cache: <{$c}> <{else}> Live: <{cache name="my_cache"}> <{$smarty.now}> <{/cache}> <{/if}> Die Funktion
|
||||||||
get_cache |
Funktion, die den zwischengespeicherten Inhalt von der
|
Es ist möglich, einige allgemeine Einstellungen zu Themes hinzuzufügen, indem man einetheme_settings.json
im Stammverzeichnis des Themes hinzufügt und etwas wie das Folgende ausführt:
Die Struktur ist wie folgt:
Name | Inhalt | Datentyp | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
info |
Der Name des Themas | string |
|||||||||||||||||||||||||||||||||||||||
features |
Eine Reihe von Funktionen, die das Thema enthält. Wird nur für die Anzeige in der Verwaltung verwendet. Nur nützlich, wenn das Thema allgemein ist und mehrere Benutzer es auswählen können. Zum Beispiel ["Merkmal A", "Merkmal B", "Merkmal C"] |
array |
|||||||||||||||||||||||||||||||||||||||
demo |
URL zur möglichen Demo-Seite | string |
|||||||||||||||||||||||||||||||||||||||
settings |
Array von Feldern, die bearbeitet werden können: |
array |
|||||||||||||||||||||||||||||||||||||||
Beispiel für den Inhalt einer Datei{ "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" } ] }, ] } |
Page Builder ist ein Werkzeug zum Erstellen von Inhalten über Abschnitte aus JSON-Dateien. Diese Abschnitte können auf verschiedenen Seiten des Webshops platziert werden. Auf welchen Seiten sie platziert werden können, wird in der Datei/{name}/components/sections.json
definiert. Der Inhalt jeder Sektion wird in einer eigenen Datei definiert, die sich in /{name}/components/sections/{section}.json befindet.
Wenn Sie dies getan haben, führt der Link " Design" oben in der Verwaltung automatisch zumPage Builder:
Die Struktur der Gebäudeabschnitte ist wie folgt:
Draht | Inhalt | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/{navn}/components/sections.json |
Enthält eine Liste von Seitentypen und ein Array mit den zulässigen Abschnitten. Zusätzlich zu den Seitentypen können Sie auch benutzerdefinierte Tags verwenden. { "Sidetype": ["sektionA", "sektionB"] } Die folgenden Seitentypen sind verfügbar:
Ein Beispiel für eine { "landing_page": ["slider", "photos", "quiz"], "product": ["slider"], "#footer": ["about"] } |
|||||||||||||||||||||||||||||||||||||||||||||||||||
/{navn}/components/tags.json |
Tags werden für Orte verwendet, die Sie selbst erfinden und die Sie nach Belieben herausziehen können, z. B. einen #footer , den Sie herausziehen und unten im Shop anzeigen, oder ein #xmas-Setup , das Sie nur im Dezember verwenden. Das Format für tags.json ist:
{ "tag1": "Beskrivelse ...", "tag2": "Beskrivelse ...", "tag3": "Beskrivelse ..." } Die einzelnen Tags erscheinen automatisch in der Verwaltung, wenn der Benutzer eine neue Einrichtung erstellt: Um den Inhalt der Tags im Thema zu extrahieren, wird die FunktiongetBlocks() wie folgt verwendet: <{if $blocks = $webshop->getBlocks("#foo")}> <{foreach $blocks as $block=>$elements}> [...] <{/foreach}> <{/if}> |
|||||||||||||||||||||||||||||||||||||||||||||||||||
/{navn}/components/sections |
In diesem Verzeichnis wird jeder Abschnitt in einer eigenen json-Datei abgelegt. Jede Datei ist nach dem Namen des Abschnitts benannt. Wenn der Abschnitt slider heißt, sollte sich der Inhalt in/{name}/components/sections/slider.json befinden. Die Struktur der Dateien ist wie folgt
|
Es gibt verschiedene Strategien für die Extraktion von Daten. Grundsätzlich gibt es eine$page_blocks
auf den Seiten, die einem Setup entsprechen. Dieser kann in einer Schleife durchlaufen werden, oder der Inhalt kann über $webshop->getBlocks('#foo')
extrahiert werden. Oder der Inhalt kann über den Abschnittsnamen abgerufen werden.
Als Ausgangspunkt empfehlen wir, die Ansicht der einzelnen Abschnitte in separaten Dateien abzulegen, z. B. /{name}/templates/sections/{section}.html.
Dann ist es einfach, eine Schleife durch $page_blocks
zu ziehen und die richtige Ansicht wie folgt einzubinden:
<{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}>
Beachten Sie, dass der Typ der Zeile in der Variablen _type
steht.
Wir nennen den Abschnitt unten images
- der Inhalt befindet sich also in/{name}/components/sections/images.json.
{ "title": "Overskrift og billeder", "fields": [ { "id": "headline", "type": "text", "title": "Overskrift" }, { "id": "images", "type": "images", "title": "Billeder" } ] }
Dies ergibt die folgende Schnittstelle in der Verwaltung:
Um den Inhalt mit der obigen Methode zu extrahieren, kann/{name}/templates/sections/images.html
folgendes enthalten:
<h1><{$section.headline|escape}></h1> <{foreach $section.images as $image}> <img src="<{$image->getSrc(150, 150, 'box')}>"> <{/foreach}>
Wenn es um den Datentyp geht, ist es wichtig zu wissen, was die einzelnen Felder enthalten. Sie können entweder eineZeichenkette
, ein Array
oder ein Objekt
sein. Mit anderen Worten, Sie sollten etwas Ähnliches tun:
[...] <{foreach $section as $name=>$val}> <{if is_array($val)}> Wiederholer oder Bildfeld <{elseif is_object($val)}> Ein Bild <{else}> Text, Zahlen oder Ähnliches <{/if}> <{/foreach}> [...]
Wenn Sie die Typen product
, category
oder landing_page
verwenden, wird die ausgewählte ID im Theme zurückgegeben, und Sie müssen das Objekt selbst mit den Methoden $webshop->getProductById(id)
,$webshop->getCategory(id)
oder $webshop->getLandingPage(id)
extrahieren. Beispiel:
[...] <{if $product = $webshop->getProductById($section.product_id)}> <{$product->getName()|escape}> <{/if}> [...]
Beachten Sie, dass es immer möglich ist, var_dump
zu verwenden, um zu untersuchen, was die Variable enthält, und sie korrekt zu durchlaufen.
Basierend auf der zuvor erwähnten Struktur werden im Folgenden die einzelnen Ansichten besprochen. Um die einzelnen Objekte und die zur Verfügung stehenden Methoden zu verstehen, empfehlen wir einen Blick auf unsere Vorlagen-API.
Laden Sie unser Thema Alaska herunter, um Beispiele für die verschiedenen Ansichten zu sehen.
Die Produktansicht kann in product.html
untergebracht werden, dies ist jedoch optional. Es ist immer index.html
, die die einzelnen Ansichten behandelt. Wir empfehlen jedoch, diese Struktur zu verwenden. Um zu wissen, dass eine Produktansicht läuft, prüfen Sie, ob $product
vorhanden ist.
Produkte werden dem Warenkorb durch einen POST-Aufruf
an eine beliebige Seite hinzugefügt - in der Regel nur die Seite, die Sie bereits anzeigen, mit den Argumenten product_id
, attributes[{attribute_id}]={attribute_value_id}
undamount
. Das Attribut sollte nur hinzugefügt werden, wenn Produkte Varianten haben.
Ein einfaches Beispiel für das Hinzufügen von Produkten zum Warenkorb könnte so aussehen:
<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>
Mit Varianten:
<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>
Natürlich lässt sich das Ganze noch komplizierter gestalten, wenn Sie den Lagerbestand, Bündel usw. anzeigen möchten.
Landingpages enthalten ein $landingpage
und $products
, die ein Array von Produkten auf der Seite angezeigt werden soll.
Wenn die Seite einen Pager erfordert, fügen Sie ihn wie folgt ein:
<{if $pager}> <{$pager->render()}> <{/if}>
Kategorien enthalten eine $Kategorie
und $Produkte
, die ein Array von Produkten ist, die auf der Seite angezeigt werden sollen.
Wenn die Seite einen Pager erfordert, fügen Sie ihn wie folgt ein:
<{if $pager}> <{$pager->render()}> <{/if}>
Statische Seiten enthalten eine $page
.
Das Blog kann in zwei Seiten unterteilt werden: blog.html
und blog_post.html
, wobei die erste Seite eine Liste der Blogbeiträge über
<{$blog_posts = $webshop->getBlogPosts()}>
Die eigentliche Anzeige der einzelnen Blogeinträge erfolgt über die Variable $blog_post
.
Wenn die Liste der Blogeinträge aus einer Kategorie stammt, ist auch eine $category
mit dieser Kategorie vorhanden.
In product_review.html
haben Sie Zugriff auf $order
, das ist Ihre Bestellung. Sie können nur Produkte überprüfen, die Sie gekauft haben. Aus der Bestellung können Sie die Produkte über $order->getOrderProducts()
abrufen. Um die Produktbewertungen zu speichern, müssen Sie einen POST-Aufruf
an dieselbe Seite mit folgendem Inhalt machen:
<{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
ist wahr, wenn der Kunde eine Bewertung abgegeben hat.
Um von Ihrer Bestellung aus auf die Bewertungsseite zu verlinken, verwenden Sie $order->getReviewUrl()
.
Die Suche funktioniert durch einen GET-Aufruf
an /search
, wobei das Argument?search=
Ihr Suchbegriff sein muss. Beispiel:
<form action="/search"> <input type="text" name="search" value="<{$get.search|escape}>"/> <input type="submit" value="Søg"/> </form>
Durchsucht werden Produkte, Kategorien, Blogbeiträge und Zielseiten. Um das Ergebnis anzuzeigen, müssen Sie sich die vier Variablen$products
, $categories
, $blog_posts
, $pages
und $landing_pages
ansehen.
Ob statische Seiten durchsucht werden, muss im Admin aktiviert werden.
Wenn sich Ihre Kunden in Ihrem Shop anmelden können, können Sie ihnen erlauben, Wunschlisten zu erstellen. Sie können so viele Wunschlisten erstellen, wie sie möchten. Eine Wunschliste hat einen Namen, eine Beschreibung und eine Auswahl an Produkten. Der Wunschzettel selbst hat eine öffentliche Adresse, damit Ihre Kunden einen Link senden können.
Die Wunschliste verwendet die folgenden Vorlagen:
Vorlage | URL | Beschreibung | Relevante Variablen |
---|---|---|---|
wishlist.html |
/wishlist |
Die Seite mit der öffentlichen Wunschliste. | $wishlist , die den Wunschzettel enthält. Siehe Methoden hier. |
user-wishlists.html |
/user-wishlists |
Die Seite mit der Wunschliste des Benutzers. Erfordert Anmeldung. | $customer->getWishlists() , um die Wunschlisten zu extrahieren. |
user-wishlist.html |
/user-wishlist |
Die Seite zum Bearbeiten der Wunschliste und der Produkte | $wishlist , die den Wunschzettel enthält. Siehe Methoden hier. |
Um eine Wunschliste zu erstellen, muss ein POST von user-wishlists.html
mit dem Namensfeld
und einer optionalen Beschreibung
gesendet werden. Zum Beispiel
<form action="" method="post"> Navn <input type="text" name="name"> Beskrivelse <textarea name="description"></textarea> <input type="submit" value="Opret"> </form>
Beachten Sie, dass Sie die Methoden $wishlist->getRemoteUrl()
und $wishlist->getEditUrl()
verwenden können, um Links zum Anzeigen und Bearbeiten der Wunschlisten zu erstellen.
In der Datei user-wishlist.html
, in der die Wunschliste bearbeitet wird, müssen der Name und die Beschreibung alsName
, Beschreibung
und Status
, der entweder aktiv
oder geschlossen
sein kann, gesendet werden. Die Produkte selbst, ihre Anzahl und eventuelle Kommentare müssen als Array im folgenden Format gesendet werden:
wishlist_product[{id}][name] = 'navn' wishlist_product[{id}][comments] = 'kommentar' wishlist_product[{id}][remove] = '1' // kun hvis produktet skal fjernes
Beispiel-Code:
<{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}>
Wenn eine variable Bearbeitung
gesendet wird, kehrt die Seite wieder zur gleichen Bearbeitungsseite zurück. Andernfalls werden Sie zur Übersicht der Wunschliste weitergeleitet. Um den Wunschzettel zu löschen, muss eine Variable namensremove
übergeben werden. Zum Beispiel.
<input type="submit" name="remove" value="Slet" onclick="return confirm('Er du sikker?');">
Um Produkte aus dem Shop zu einer Wunschliste hinzuzufügen, kann ein POST-Aufruf von einer beliebigen Seite mit den Feldernwishlist_id
, product_id
und einem optionalen attribute_value_id
erfolgen, wenn das Produkt eine Variante hat. Beispiel:
<{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}>
Das Retourencenter ermöglicht es Ihren Kunden, selbst Retouren zu erstellen. Es muss in denShop-Einstellungen aktiviert werden. Sobald ein Kunde eine Retoure erstellt hat, muss diese in der Verwaltung genehmigt werden und es wird eine Gutschrift erstellt.
Die Rücksendezentrale verwendet die folgenden Vorlagen:
Vorlage | URL | Beschreibung | Relevante Variablen |
---|---|---|---|
return.html |
/return |
Die Seite, auf der die Rückgabe erstellt wird | $order mit der Bestellung, die der Kunde zurückgeben möchte. Siehe Methoden hier. |
order-return.html |
/order-return |
Die Seite, auf der die Rückgabe anschließend angezeigt wird | $order_return mit der Rückgabe. Siehe Methoden hier. |
return_received.html |
E-Mail, die an den Kunden gesendet wird, wenn er eine Rückgabe erstellt | $order_return mit der Rückgabe. Siehe Methoden hier. |
Es gibt zwei Möglichkeiten für Ihre Kunden, die Retourenseite aufzurufen. Zum einen kann er die Bestellnummer und die E-Mail-Adresse auf seiner Bestellung eingeben. Der andere Weg ist der über einen direkten Link. Der direkte Link wird mit$order->getReturnUrl()
aus der Bestellung extrahiert. Zum Beispiel
<{if $webshop->useReturnCenter() && !$order->getIsCreditNote()}> <a href="<{$order->getReturnUrl()|escape}>">Retuner varer</a> <{/if}>
Wie im Beispiel zu sehen, ist es ratsam zu prüfen, ob es sich bei der Bestellung nicht um eine Gutschrift handelt und ob der Händler das Rückgabezentrum aktiviert hat. Das Beispiel kann überall dort verwendet werden, wo es eine $Bestellung
gibt. Zum Beispiel in der Bestellübersicht des Kunden selbst oder in E-Mails.
Wenn Sie kein Login verwenden oder anderweitig wollen, dass der Kunde nach seiner Bestellung suchen kann, müssen Sie eine Suche mit Bestellnummer und E-Mail-Adresse in return.html
implementieren. Es sind die Felder webshop_order_id
und E-Mail
, die an /return
gepostet werden sollten. Wenn die Bestellung gefunden wird, wird der Kunde zum Return geschickt, wenn nicht, wird$get.not_found
gesetzt und Sie können eine Fehlermeldung im Thema anzeigen. Ein minimales Formular kann wie folgt aussehen:
<{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>
In der Datei return.html
muss eine Liste von Bestellzeilen extrahiert werden, und der Kunde kann wählen, welche Produkte er zurückgeben möchte und warum. Im Gegensatz zu regulären Bestellansichten muss die Rückgabe eine Zeile pro Bestellzeile enthalten.
<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>
Es ist möglich, in der Verwaltung eine feste Versandart und einen festen Preis anzugeben. In diesem Fall wird die Versandart über$webshop->getReturnShipping($country_id)
und der Preis über$webshop->getReturnShippingPrice($country_id)
extrahiert, wenn er fest vorgegeben ist. Beispiel:
<{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}>
Die gewählte Zustellungsart, falls optional, muss als shipping_id
gesendet werden.
Sobald die Rückgabe erstellt ist, erscheint sie in order-return.html
, die ein $order_return
mit den entsprechenden Methoden enthält.
auch.html
ist unsere Upselling-Seite. Im Grunde haben Sie Zugriff auf $product
und können dem Kunden von dort aus Vorschläge machen. Zum Beispiel kann es sinnvoll sein, $product->getRelatedProducts()
,$product->getAlsoBought()
oder $webshop->getPopularProducts()
zu verwenden.
Wird nur zur Anzeige von 404-Seiten verwendet.
Wird nur zur Anzeige von 410 Seiten verwendet.
Ein Captcha wird automatisch eingefügt, wenn Sie versuchen, sich für den Newsletter anzumelden oder Kommentare zu schreiben. Dies dient der Vermeidung von Spam. Es ist möglich, die Seite selbst in captcha.html
zu gestalten, und sie muss mindestens enthalten:
<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>
Es ist möglich, Ihre Kunden in den Shop einloggen zu lassen. Wenn sie eingeloggt sind, gibt es einen$customer
, der Informationen über den Benutzer enthält. Alle Seiten, die bearbeiten, einloggen, etc. müssen per POST an die Seite selbst übermittelt werden.
Name der Datei | Beschreibung | Relevante Variablen/Parameter im Formular |
---|---|---|
/user-edit.html |
Dient der Bearbeitung von Kundendaten. Es ist möglich, dem Kunden Felder hinzuzufügen. Weitere Informationen finden Sie in dieser Tabelle. | 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 |
Frühere Bestellungen des Kunden | $my_orders |
/user-points.html |
Der Standpunkt des Kunden | $my_points |
/user-profile.html |
Einsicht in die Kundendaten | $customer |
/user-reset-password.html |
Wird für die Rücksetzung von Passwörtern verwendet | email , password |
/user-sign-in.html |
Anmeldeseite. Verwenden Sie redir , wenn der Kunde nach dem Login zu einer URL weitergeleitet werden soll. |
email , password , redir |
/user-sign-up.html |
Ein Formular, das der Kunde zur Registrierung verwendet. | name , email , phone , address , zipcode , city , company , vat_number , og country_id |
Es ist möglich, in der Verwaltung benutzerdefinierte Felder für Ihre Benutzer zu definieren. Diese Felder werden wie folgt bearbeitet:
<{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}>
Mit dem Treueprogramm können Ihre Kunden bei der Ausführung von Bestellungen Punkte sammeln und ausgeben. Die Einrichtung wird unter Kunden > Treueprogramm verwaltet.
Mit den folgenden Methoden können Sie überprüfen, ob das Geschäft das Treueprogramm aktiviert hat und ob der Kunde eingeloggt ist und Punkte gesammelt hat, die er verwenden kann:
<{if $webshop->hasLoyaltyProgram() && $customer && $customer->getActivePoints()}> [Visning af point m.m.] <{/if}>
Um anzuzeigen, wie viele Punkte der Kunde gesammelt hat und wie viele er für die aktuelle Bestellung ausgeben kann, können Sie das folgende Codebeispiel verwenden:
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}>
Das Feld, das Sie an den Warenkorb senden und das angibt, wie viele Punkte der Kunde verwenden wird, sollte use_points
heißen und kann wie folgt aussehen:
<input type="number" name="use_points" value="<{$use_points}>" min="0" max="<{$customer->getPointsAvailable()}>"/>
Sie können $earns
verwenden, um zu sehen, wie viel der Kunde für die Bestellung verdient:
Du optjener <{$earns|number_format:0:",":"."}> point på denne ordre.
Sie können das folgende Beispiel verwenden, um Ihr Treueprogramm zu beschreiben:
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()}>.
Wenn Sie eine Übersichtsseite über die Punkte erstellen möchten, können Sie user-points.html
verwenden, wo Sie $my_points
in einer Schleife durchlaufen und den Inhalt darstellen können. Schauen Sie sich die Klasse SafePoint an, um zu sehen, welche Methoden verfügbar sind.
Tipp: Sie können Ihre Bestellübersicht mit den folgenden CSS-Klassen gestalten: points_used
, points_earned
und has_profile
.
Der Check-Out-Flow ist einfach eine Reihe von HTML-Seiten, die jeweils ein Formular enthalten, das Daten an sich selbst sendet
, und wenn das nächste
Feld gesetzt ist, leitet Shoporama zur nächsten Seite im Flow weiter. Normalerweise würden Sie die Schaltfläche "Next" auf name="next"
setzen. Sie können jederzeit auf vorherige Seiten im Ablauf verlinken. Wenn der Kunde seine Daten eingegeben hat, werden diese in zwei Arrays gespeichert, $session_order
und $session_del
. Zum Beispiel:$session_order.name
.
Name der Datei | Beschreibung | Relevante Variablen/Parameter im Formular |
---|---|---|
basket.html |
Zeigt den Inhalt des Warenkorbs an. Einfaches Beispiel, wie $basket verwendet wird:<{foreach $basket as $line}> <{$line.amount}> x <{$line.product->getName()}> <{foreach $line.attributes as $a}> <{$a.name|escape}>: <{$a.value|escape}> <{/foreach}> <{/foreach}> Um die Nummer zu ändern, [...] <input name="amount[<{$line.id}>]" value="<{$line.amount}>" /> [...] Um einen Rabattcode hinzuzufügen, muss ein Das Lieferland kann durch |
$basket , $voucher , $voucher_discount , $campaign_ids ,
$campaign_discount , $price , $shipping_price , $total_price ,
$vat |
address.html |
Die Seite, auf der die Lieferinformationen eingegeben werden. Wenn Wenn |
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 |
Dient zur Auswahl der Zustellungsmethode. Die einzelnen Versandarten können über Um die Versandart zu speichern, muss eine [...] <{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 |
Die Autorisierungsseite. Dient zur Anzeige der Bestellung. Wenn der Shop mehrere Zahlungsgateways enthält, können diese auf dieser Seite ausgewählt werden. Sie werden über |
$basket , $shipping , payment_gateway_id |
thanks.html |
Dankeseite. Dient zur Anzeige der abgeschlossenen Bestellung. | $order |
Shoporama hat zwei integrierte Ajax-Aufrufe. Der eine kann Produkte auf verschiedene Arten extrahieren (Filterung) und der andere ist eine allgemeine und einfache Suche, die Produkte, Kategorien und Landing Pages durchsucht.
Die Filterung erfolgt in der Datei /ajax
, die sich im Stammverzeichnis aller Shops befindet
Argument | Beschreibung | Beispiel für ein Beispiel |
---|---|---|
atags |
Eine Liste von Tags zu den Attributwerten, Attributwerte sind Einstellungen zu den Attributen in den Profilen der Produkte. Die Werte auf atags müssen durch Kommas getrennt werden, erlauben aber Gruppierungen, die durch Pipe als logischesODER getrennt sind. |
ajax?atags=female,black|white |
product_ids |
Liste der Produkt-IDs, getrennt durch eine Pipe. | ajax?product_ids=1|2|3|4 |
price_range |
Gibt Produkte zurück, die in eine Preisspanne fallen. Die Beträge müssen durch eine Pipe getrennt werden. | ajax?price_range=100|200 |
categories |
Eine durch Pipes getrennte Liste von Kategorien, in die die Produkte eingeordnet werden sollen. Wenn das Argument exclude=1 gesetzt ist, wird eine Liste von Produkten zurückgegeben, die die Kategorien nicht haben. |
ajax?categories=5|9|2 ajax?categories=5|9|2&exclude=1 |
sort |
Die Sortierreihenfolge. Es können die Werte popular , weight , name ,price , created gesetzt werden. Ob die Sortierreihenfolge auf- oder absteigend sein soll, wird angegeben, indem sort_order entweder auf asc (aufsteigend) oder desc (absteigend ) gesetzt wird. |
ajax?sort=price&sort_order=desc |
attribute_values |
Eine Liste von IDs der Attributwerte, die die Produkte haben sollen. Die Liste wird durch Pipe getrennt. Wenn das Argumentexclude=1 gesetzt ist, wird eine Liste von Produkten zurückgegeben, die nicht übereinstimmen. |
ajax?attribute_values=9|8|12 |
suppliers |
Durch Rohre getrennte Liste von Lieferanten-IDs. | ajax?suppliers=8|2 |
landing_pages |
Nach Mädchen getrennte Liste von Landing Page IDs, auf denen Produkte erscheinen sollen. | ajax?landing_pages=5|24 |
extension.{id} |
Wenn das Thema erweiterte Felder verwendet, können die Produkte anhand dieser Felder extrahiert werden. Es wird absolut gesucht, daher sind die Felder bool , multi ,number und list am sinnvollsten. Durch Rohre getrennte Werte können verwendet werden, wenn die Produkte nur einem der Werte entsprechen müssen. |
ajax?extension.foo=1&extension.tags=foo|bar |
attribute_tags_in_stock |
Liste der Tags für Attributwerte, die auf Lager sein müssen. Die Liste kann durch Pipes getrennt werden. | ajax?attribute_tags_in_stock=foo|bar |
attribute_tags |
Liste der Tags, die für die Produkte festgelegt werden müssen. Die Liste kann durch Pipes getrennt werden. | ajax?attribute_tags=foo|bar |
attribute_tag |
Wie attribute_tags , aber nur mit einem einzigen Tag. |
ajax?attribute_tag=foo |
force_categories |
Eine durch Pipes getrennte Liste von Kategorie-IDs, die alle für die Produkte festgelegt werden müssen. | ajax?force_categories=5|9|2 |
limit |
Maximale Anzahl der zurückzusendenden Produkte. | ajax?limit=10 |
offset |
Startposition in Bezug auf die Position in der Liste der Produkte, die Sie abrufen möchten. | ajax?offset=100&limit=10 |
meta |
Pipe-getrennte Liste der zusätzlichen Felder, die Sie für die Produkte im Ergebnis sehen möchten. Wenn Siemeta=_all festlegen, werden alle zurückgegeben. |
ajax?meta=foo|bar ajax?meta=_all |
only_in_stock_variants |
Auf 1 oder 0 gesetzt, je nachdem, ob jedes Produkt im Ergebnis nur Varianten enthalten soll, die auf Lager sind. Standard ist 0 . |
ajax?only_in_stock_variants=1 |
include_meta |
Setzen Sie diesen Wert auf 1 oder 0 , je nachdem, ob Sie ein zusätzliches Metafeld im Ergebnis wünschen, das Beschreibungen der Produkte im Ergebnis enthält. Dies sind Informationen darüber, welche Attribute, Kategorien und Marken vorhanden sind. Die Voreinstellung ist 0 . |
ajax?include_meta=1 |
include_pagination |
Setzen Sie diesen Wert auf 1 oder 0 , je nachdem, ob Sie im Ergebnis ein zusätzliches Paginierungsfeld mit Paginierungsinformationen wünschen. Die Felder im Array sind offset , limit , count , total . Die Standardeinstellung ist 0 . |
ajax?include_pagination=1 |
pretty |
Auf 1 oder 0 gesetzt, je nachdem, ob die json-Antwort schön formatiert werden soll oder nicht. |
ajax?pretty=1 |
Die Antwort von /ajax
ist ein Array in folgendem Format:
[ { "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 } ] } ]
Aus Geschwindigkeitsgründen wird die Antwort aus der Ajax-Datei zwischengespeichert, aber in der Testumgebung können Sie rebuild=1
als Argument hinzufügen, damit die Seite neu aufgebaut wird. Wir empfehlen, dies in der Produktionsumgebung nicht zu tun, da es die Seite erheblich verlangsamen kann.
Die Seite /ajax_search
enthält eine allgemeine Suche nach Produkten, Kategorien und Landing Pages. Sie kann z.B. für eine Autovervollständigung in Ihrem Suchfeld verwendet werden. Sie nimmt die folgenden Argumente entgegen:
Argument | Beschreibung | Beispiel für ein Beispiel |
---|---|---|
term |
Schlüsselwort. | ajax_search?term=ostemad |
limit |
Maximale Anzahl von Ergebnissen. | ajax_search?term=ostemad&limit=25 |
include |
Eine durch Kommata getrennte Liste der Datentypen, die Sie durchsuchen möchten. Die Werte könnenProdukte , Kategorien , blog_posts , Seiten und landing_pages sein. |
ajax_search?term=ostemad&include=products,categories |
pretty |
Auf 1 oder 0 gesetzt, je nachdem, ob die json-Antwort schön formatiert werden soll oder nicht. |
ajax_search?term=ostemad&pretty=1 |
Das Ergebnis ist ein Array in folgendem Format:
[ { "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" } ]