$wsStores
Mit dem $wsStores Modul können Sie auf die konfigurierten Märkte und Filialen des Shops zugreifen. Typische Anwendungsfälle sind Click & Collect, Filialfinder und die Anzeige von Lagerbeständen im Markt. In diesem Abschnitt erfahren Sie, wie Sie Märkte laden, den ausgewählten Markt verwalten und Öffnungszeiten anzeigen können.
Inhaltsverzeichnis
Modulübersicht
Beispiel / Ausschnitt über $wsStores
{{= $wsStores | json }}
JSON-Ausgabe
{
"selectedStore": null,
"loadAllStores": "ƒ()",
"loadStore": "ƒ()"
}Anmerkung: "ƒ()" kennzeichnet eine Funktion.
Variablen und Methoden in der Übersicht
Name | Rückgabe-Typ | Beschreibung |
|---|---|---|
| map | Aktuell ausgewählter Markt oder |
| array | Lädt eine Liste aller verfügbaren Märkte. |
| map | Lädt einen einzelnen Markt anhand seiner ID. |
Templates
Das $wsStores Modul wird typischerweise verwendet auf:
Marktsuche-Seiten (Filialfinder)
Produktdetailseiten (Verfügbarkeit im Markt)
Checkout-Seiten (Click & Collect Auswahl)
Header/Footer (ausgewählter Markt anzeigen)
Variablen
$wsStores.selectedStore
Gibt den aktuell in der Session ausgewählten Markt aus. Ist null, wenn kein Markt ausgewählt wurde.
{{ if $wsStores.selectedStore }}
Ihr Markt: {{= $wsStores.selectedStore.name }}
{{ else }}
Kein Markt ausgewählt
{{ /if }}
Methoden
$wsStores.loadAllStores()
Lädt eine Liste aller verfügbaren Märkte.
Signatur$wsStores.loadAllStores()
Rückgabearray - Liste mit Store-Maps.
Beispiel, das alle Märkte lädt und anzeigt.
{{ foreach $store in $wsStores.loadAllStores() }}
<p>{{= $store.name }} – {{= $store.city }}</p>
{{ /foreach }}
$wsStores.loadStore()
Lädt einen einzelnen Markt anhand seiner ID.
Signatur$wsStores.loadStore(storeId)
Rückgabemap - Store-Map mit allen Marktdaten.
Beispiel, das einen Markt lädt.
{{ var $store = $wsStores.loadStore(1) }}
Marktname: {{= $store.name }}
Mit Verwendung der Rückgabe-Daten von $wsStores.loadStore stehen verschiedene Eigenschaften zur Verfügung, die verwendet werden können. Nachfolgend eine Übersicht, welche Eigenschaften verfügbar sind.
Eigenschaften von $wsStores.loadStore
Eigenschaften | Rückgabe-Typ | Beschreibung |
|---|---|---|
| int | Eindeutige ID des Marktes. |
| string | Name des Marktes. |
| string | Straße (ggf. mit Hausnummer). |
| string | Postleitzahl. |
| string | Stadt. |
| string | Land. |
| string | ID des Markt-Lagers zur Abfrage des Lagerbestands über |
| bool | Verfügbarkeit von Click & Collect. |
| bool | Prüfung, ob der Markt aktuell geöffnet ist. |
| map | GPS-Koordinaten ( |
| float | Breitengrad. |
| float | Längengrad. |
| map | Öffnungszeiten nach Wochentag (0-6). |
| array | Öffnungszeiten pro Wochentag (0=Sonntag, 1=Montag, … , 6=Samstag). |
| array | Tage mit abweichenden Öffnungszeiten (z.B. Feiertage). |
| int | Monat (1-12). |
| int | Tag (1-31). |
| array | Öffnungszeiten für diesen Tag. |
| map | Startzeit mit |
| map | Endzeit mit |
| array | Postleitzahl-Präfixe, die diesem Markt zugeordnet sind (für automatische Marktvorschläge basierend auf Kundenadresse). |
| array | Liste der Subshop-IDs, in denen dieser Markt verfügbar ist. |
Aktionen
Für $wsStores stehen keine Aktionen zur Verfügung.
Beispiele
Alle Märkte auflisten
Beispiel, das alle Märkte mit Adresse und Öffnungsstatus anzeigt:
{{ foreach $store in $wsStores.loadAllStores() }}
<div class="store">
<h3>{{= $store.name }}</h3>
<p>{{= $store.street }}, {{= $store.zipCode }} {{= $store.city }}</p>
{{ if $store.openNow }}
<span class="open">Jetzt geöffnet</span>
{{ else }}
<span class="closed">Geschlossen</span>
{{ /if }}
</div>
{{ /foreach }}
Markt auswählen (Session)
Beispiel, das eine Marktauswahl mit der Action SelectStore implementiert:
{{ var $action = $wsActions.create("SelectStore") }}
{{ if $action.success }}
<div class="alert success">Markt erfolgreich geändert.</div>
{{ /if }}
<form method="post" action="{{= $wsViews.current.url() }}">
<input type="hidden" name="wsact" value="{{= $action.id }}">
<input type="hidden" name="wscsrf" value="{{= $action.csrf }}">
<input type="hidden" name="wstarget" value="{{= $wsViews.current.url() }}">
{{ foreach $store in $wsStores.loadAllStores() }}
<label>
<input type="radio" name="storeId" value="{{= $store.id }}"
{{ if $wsStores.selectedStore and $store.id == $wsStores.selectedStore.id }}checked{{ /if }}>
{{= $store.name }}
{{ if $store.openNow }}<span class="open">Jetzt geöffnet</span>{{ /if }}
</label>
{{ /foreach }}
<button type="submit">Markt auswählen</button>
</form>
Öffnungszeiten anzeigen
Beispiel, das die Öffnungszeiten eines Marktes formatiert ausgibt:
{{ var $days = [
{"id": "1", "name": "Montag"},
{"id": "2", "name": "Dienstag"},
{"id": "3", "name": "Mittwoch"},
{"id": "4", "name": "Donnerstag"},
{"id": "5", "name": "Freitag"},
{"id": "6", "name": "Samstag"},
{"id": "0", "name": "Sonntag"}
] }}
{{ foreach $day in $days }}
<div>
<strong>{{= $day.name }}:</strong>
{{ var $slots = $store.openingHours[$day.id] }}
{{ if $slots | len > 0 }}
{{ foreach $slot in $slots }}
{{= $slot.startTime.hours }}:{{= $slot.startTime.minutes | pad(2, "0") }} -
{{= $slot.endTime.hours }}:{{= $slot.endTime.minutes | pad(2, "0") }}
{{ /foreach }}
{{ else }}
Geschlossen
{{ /if }}
</div>
{{ /foreach }}
Click & Collect im Checkout
Beispiel, das nur Märkte mit Click & Collect für Abholung anzeigt:
{{ foreach $method in $wsConfig.shippingMethods }}
{{ if $wsCheckout.selectedShippingMethod == $method.id and $method.type == "pickup" }}
{{ var $storeAction = $wsActions.create("CheckoutStoreIdSelect") }}
<form method="post" action="{{= $wsViews.current.url() }}">
<input type="hidden" name="wsact" value="{{= $storeAction.id }}">
<input type="hidden" name="wscsrf" value="{{= $storeAction.csrf }}">
<label>Abholmarkt auswählen:</label>
<select name="storeId">
{{ foreach $store in $wsStores.loadAllStores() }}
{{ if $store.clickAndCollect }}
<option value="{{= $store.id }}"
{{ if $wsCheckout.selectedStoreId == $store.id }}selected{{ /if }}>
{{= $store.name }} – {{= $store.city }}
</option>
{{ /if }}
{{ /foreach }}
</select>
<button type="submit">Markt auswählen</button>
</form>
{{ if $storeAction.error }}
{{ foreach $error in $storeAction.errors }}
<div class="alert danger">
{{ if $error.code == "reservationFailed" }}
Produkt nicht verfügbar in diesem Markt: {{= $error.details.productId }}
{{ else }}
{{= $error.text | default($error.code) }}
{{ /if }}
</div>
{{ /foreach }}
{{ /if }}
{{ /if }}
{{ /foreach }}
Lagerbestand im Markt prüfen
Beispiel, das den Lagerbestand eines Produkts in einem bestimmten Markt prüft:
{{ var $store = $wsStores.selectedStore }}
{{ if $store }}
{{ var $inventory = $wsInventory.load($product.id, $store.storageId) }}
{{ if $inventory.active }}
<p>Verfügbar in {{= $store.name }}: {{= $inventory.amount }} Stück</p>
{{ else }}
<p>Nicht verfügbar in {{= $store.name }}</p>
{{ /if }}
{{ /if }}