Twig-Helfer, die ein Theme verwendet
hostware stellt eine Reihe von Twig-Funktionen bereit, die Themes auf nahezu jeder Seite verwenden: Admin-Einstellungen lesen, Asset-URLs auflösen, Berechtigungen prüfen und Strings übersetzen. Diese kurze Liste solltest Du beim Erstellen geöffnet lassen.
Templates erweitern
Zwei Tags steuern das Theme-Override-System. Beide durchlaufen die Kette Theme -> Modul -> Core, und beide erfordern die Namespace-Form (storefront::path).
{% hw_extends 'storefront::layouts/meta.twig' %}verwendet das gefundene Template als übergeordnetes Template, sodass Du dessen Blöcke überschreiben kannst. Fast jede Datei imresources/views/storefront/-Baum eines Themes beginnt damit.{% hw_include 'storefront::component/product/card.twig' with { product: product } only %}fügt das gefundene Template inline ein. Das Schlüsselwortonlyverhindert, dass Variablen des übergeordneten Templates übernommen werden – genau das brauchst Du für wiederverwendbare Partials.
Konfiguration lesen
{{ theme_config('variant', 'default') }}liest einen Wert aus derconfig.xmldes Themes für den aktuellen Vertriebskanal. Das zweite Argument ist der Fallback-Wert.{{ sales_channel_branding('branding_primary') }}liest einen Branding-Wert, den der Admin für den aktuellen Vertriebskanal gespeichert hat (Farben, Logo, Favicon-Medien-IDs, Schriftarten und Eckenradius).{{ config('some.key') }}liest einen Systemkonfigurationswert aus demconfig-Service.{{ system_setting('key') }}liest eine globale Systemeinstellung.
Assets und URLs
{{ asset('themes/hw/mytheme/img/hero.png') }}?v={{ hwCacheId }}löst die URL eines öffentlichen Assets auf. Das globalehwCacheIdändert sich bei jeder Neukompilierung, damit Browser neue Versionen laden.{{ theme_asset('img/hero.png') }}löst ein Asset relativ zumpublic/-Ordner des aktuellen Themes auf, ohne dass Du Anbieter und Namen eingeben musst.{{ media_path(mediaId) }}löst die URL für eine gespeicherte Medien-ID auf (z. B. ein Logo oder Favicon, das der Admin im Branding-Tab ausgewählt hat).{{ route('storefront.home') }}ist der standardmäßige Laravel-Routenhelfer. Verwende ihn für jeden internen Storefront-Link, damit URLs dem aktuellen Sprachpräfix folgen.
Authentifizierung und Berechtigungen
{% if auth_check() %}prüft, ob ein Kunde angemeldet ist.{{ auth_user().first_name }}liest den aktuellen Kunden aus. Verwende dies nur innerhalb einerauth_check()-Prüfung.{% if hw_can('update', 'saleschannel') %}prüft eine Admin-Berechtigung. Themes verwenden dies selten, da die Storefront kundenorientiert ist. Der Kontobereich nutzt es jedoch für Widgets, die nur für Admins bestimmt sind.
Übersetzungen
Jeder für Benutzer sichtbare String in einem Theme wird durch den trans-Filter geleitet, damit er lokalisiert werden kann.
{{ 'storefront.product.shop.addToCart'|trans }}
{{ 'storefront.cart.itemCount'|trans({ 'count': cart.items.count() }) }}Übersetzungsschlüssel befinden sich in lang/<locale>/storefront.php (oder für Modul-Strings im lang/-Ordner eines Moduls). Die aktuelle Menge findest Du in der Codebasis.
Kontextvariablen der Storefront
Diese Variablen werden bei jeder Storefront-Anfrage befüllt und sind in jedem Template verfügbar, ohne dass Du sie übergeben musst.
salesChannel– das Modell des aktuellen Vertriebskanals. VerwendesalesChannel.getCompiledThemeCssUrl(),salesChannel.nameund weitere Eigenschaften.isAccountPage–true, wenn die aktuelle Route im Kontobereich des Kunden liegt.isIsolatedCheckout,isInsideCheckoutFlow– das Checkout-Skeleton verwendet diese Variablen, um zwischen Layout-Modi zu wechseln.route– die aktuelle Laravel-Route.route.getName()liefert ihren Namen (das Skeleton verwendet ihn, um die Body-Klasse abzuleiten).cart– der Warenkorb des aktuellen Kunden, sofern bei der Anfrage ein Warenkorb geladen wurde.product– das Produktmodell bei Routen für Produktdetailseiten.hwCacheId– der globale Cache-Buster, den Du an jede Asset-URL anhängst.themeVariant– die aktuell in der Theme-Konfiguration ausgewählte Variante (ein leerer String, wenn die Standardvariante ausgewählt ist).
Hilfsfunktionen
{{ carbon_now() }}und{{ carbon_parse(dateString) }}geben Carbon-Datumsobjekte zur Formatierung und zum Vergleich zurück.{{ price|float|currency }}formatiert Geldbeträge anhand der Währung und des Gebietsschemas des Vertriebskanals.{{ session_get('key') }}liest einen Wert aus der aktuellen Session.{{ uniqid('prefix', true) }}erzeugt eine beim Rendern stabile ID für Formularfelder oder SVG-Referenzen.
Wenn Du einen hier nicht aufgeführten Helfer benötigst, ist der Quellcode in app/Twig/Extension/Functions/HelperFunctions.php die maßgebliche Referenz. Jede registrierte Funktion ist ein eigener new TwigFunction(...)-Eintrag. Eine schnelle Suche nach ihrem Namen zeigt Dir daher den zugehörigen PHP-Code.