Sie sind auf Seite 1von 33

Wissen, wie’s geht.

Leseprobe
Insiderwissen aus erster Hand: Daniel Nögel ist Entwickler bei der
Shopware AG. In seinem Handbuch für Entwickler zeigt er Ihnen,
wie Sie Schritt für Schritt die Funktionen von Shopware gezielt
einsetzen. Dieser Buchauszug führt Sie in das Shopware-Temp-
lating ein, damit Sie das Shopsystem an eigene Gestaltungsideen
anpassen können.

»Shopware-Templating« (Auszug)

Inhaltsverzeichnis

Index

Der Autor

Leseprobe weiterempfehlen

Daniel Nögel
Shopware – Das Handbuch für Entwickler
466 Seiten, gebunden, Dezember 2016
49,90 Euro, ISBN 978-3-8362-4243-1

www.rheinwerk-verlag.de/4185
Kapitel 4
Shopware-Templating
Das Anpassen des Aussehens und Designs von Shopware wird 4
»Templating« genannt. Es ist eine gestalterische Anpassung des
Shopsystems gemäß den eigenen Wünschen.

Moderne Webapplikationen lassen sich grob in (mindestens) zwei Bereiche untertei-


len: in die Applikationslogik und in die Darstellung. Die Applikationslogik bestimmt,
welche Artikel auf einer Seite zu sehen sind, welche Preise diese Artikel haben und ob
ein bestimmter Benutzer diese Artikel kaufen darf oder nicht. Die Darstellung betrifft
die Art und Weise, wie die Inhalte angezeigt werden – also die Frage, ob die Artikel
eingerahmt dargestellt werden und ob dieser Rahmen rund oder eckig ist. Auch die
relative Ausrichtung der Elemente zueinander fällt in diesen Bereich.
Die Darstellung wird über sogenannte Templates (Vorlagen) definiert – das sind allge-
meine Beschreibungen von bestimmten Seitentypen in beispielsweise HTML/CSS.

Abbildung 4.1 Ein Template kann für bestimmte Seitentypen wiederverwendet werden.

87
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Abbildung 4.1 stellt das vereinfacht dar: Die gestalterischen Merkmale der Seite wer-
den im Template definiert, sodass Shopware dieses Template später nur mit den
Daten des jeweiligen Artikels (Artikelname, Preis, Beschreibung etc.). befüllen muss.
Für diese veränderlichen Merkmale von Artikeln werden jeweils Platzhalter im Tem-
plate definiert – die Template-Variablen. 4
In Shopware können Sie auch eine Vielzahl dieser gestalterischen Elemente komfor-
tabel steuern – ob der Knopf In den Warenkorb also rot oder blau ist, lässt sich
ebenfalls ohne Programmieraufwand konfigurieren. Die Gesamtheit aller Templates
mitsamt der Farbkonfiguration (also das große Ganze) wird Theme genannt.
Ein Theme ist ein austauschbares Leitmotiv für den Shop, das entweder selbst entwi-
ckelt bzw. angepasst werden kann oder aus dem Shopware Community Store bezogen
werden kann. Auch wenn Shopware von Haus aus bereits ein ansprechendes Theme
mitliefert, gibt es in der Regel in jedem Projekt Anpassung am Aussehen des Shops –
sei es, um sich lediglich von anderen Shops abzugrenzen, oder sei es, um die eigene
Farb- und Markenkommunikation des Shopbetreibers im Shop zu reflektieren.

4.1 Einstieg in Templates und Themes


Um einfache Anpassungen am Aussehen des Shops vorzunehmen, sind keine oder
nur geringe technische Anpassungen erforderlich.
Abbildung 4.2 Der Theme Manager

4.1.1 Konfigurieren des Basis-Themes


Themes können eine Vielzahl von Einstellungen definieren, die eine Anpassung des
Aussehens aus dem Shopware-Backend heraus ermöglichen. Das Standard-Theme
von Shopware heißt Responsive. Unter Einstellungen 폷 Theme Manager kann die-
ses Theme angepasst werden. Dazu wählen Sie das Responsive-Theme aus und öff-
nen über einen Klick auf Theme konfigurieren die Konfigurationsmaske.
Abbildung 4.2 zeigt die Konfigurationsmaske des Theme Managers. Hier werden die
Bereiche Icons & Logos, Konfiguration und Farb-Konfiguration unterschieden.
Unter Icons & Logos definieren Sie das Shop-Logo sowie die Icons für beispielsweise
Lesezeichen. Das Logo kann dabei für jedes Endgerät (Smartphone, Tablet oder Desk-
top-Computer) angepasst werden, sodass auf jedem Endgerät ein optimiertes Logo
angezeigt wird. Abbildung 4.3 zeigt, wie das modifizierte Logo nach dem Speichern Abbildung 4.3 Angepasstes Logo
im Frontend zu sehen ist. Wurden zuvor für unterschiedliche Endgeräte unterschied-
liche Logos definiert, bildet Shopware dies entsprechend ab. Auf dem Reiter Konfiguration können Sie Einstellungen zum Theme vornehmen,
die auch das Verhalten des Frontends betreffen. So entscheidet beispielsweise die
Option Offcanvas Warenkorb darüber, ob die Warenkorbübersicht als sogenann-
tes Offcanvas Element von rechts nach links in den Browser fahren soll oder nicht.

88 89
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Auch Einstellungen zum Infinite Scrolling oder zum Variantenwechsel können Jetzt öffnet sich ein Dialog, der verschiedene Daten abfragt. Unter Ableiten von
hier vorgenommen werden. Ganz unten in dem Fenster lassen sich auch CSS-Dateien müssen Sie angeben, von welchem Theme Sie Ihr eigenes Theme ableiten wollen:
und JavaScript-Bibliotheken einbinden. Dies ist nützlich, wenn beispielsweise be- Shopware bietet im Standard das Bare-Theme sowie das Responsive-Theme.
stimmte Schriftarten genutzt werden sollen. Natürlich bietet Shopware Ihnen auch Das Bare-Theme beinhaltet alle Templates, die Shopware benötigt, allerdings keiner-
Möglichkeiten, diese Einbindungen über Plugins oder eigene Themes direkt vorzu- lei JavaScript oder Styling. Es ist damit also nur geeignet, wenn Sie große Teile des 4
nehmen – die zusätzliche Möglichkeit direkt in der Theme-Konfiguration ist aber Themes selbst entwickeln möchten oder müssen. In den meisten Fällen werden Sie
auch für weniger technisch versierte Nutzer interessant und eignet sich darüber hi- Ihr Theme vom Theme Responsive ableiten wollen: Dieses ergänzt das Bare-Theme
naus zum schnellen Testen einer Anpassung. um eine Vielzahl von Styles und JavaScript-Plugins und bildet damit in der Summe
Der letzte Reiter im Fenster ist der Reiter Farb-Konfiguration. Im Standard-Re- das Frontend, das Sie von Shopware kennen.
sponsive-Theme gibt es hier eine Vielzahl von Konfigurationsmöglichkeiten, die der Im Feld Name sollten Sie darüber hinaus einen einprägsamen Namen für Ihr Theme
Nutzer setzen kann. Dabei arbeitet Shopware mit einem Platzhalter-System: Der Nut- vergeben. Oftmals wird hier der Name des Shop-Projekts genutzt – in unserem Bei-
zer kann also zunächst verschiedene Platzhalter wie brand-primary, brand-secondary spiel LoremIpsum (siehe Abbildung 4.4). Nach einem Klick auf Speichern erzeugt
oder highlight-succcess definieren und diese dann an verschiedenen Stellen im Shopware das neue Theme. Sie können es mit einem Klick auf Theme zuweisen
Theme referenzieren. Dieses Platzhaltersystem ermöglicht es, die Farbsprache des unten rechts im Theme Manager auch direkt aktivieren. Da Sie vom Theme Respon-
Shops sehr komfortabel auf den jeweiligen Shopbetreiber hin zu optimieren, indem sive abgeleitet haben, stehen Ihnen unter Theme konfigurieren alle Einstellungen
beispielsweise die Firmenfarben als Primär- und Sekundärfarben gesetzt werden. Da- zur Verfügung, die auch das Responsive-Theme kennt (vgl. Abschnitt 4.1.1).
rüber hinaus können Sie damit aber auch häufige Farbvariationen direkt pflegen, bei-
spielsweise eine hellere Variante der Primärfarbe einstellen, um Hover- und
Schatteneffekte abbilden zu können.
Schließlich können Sie auch Platzhalter für Erfolgs-, Hinweis- und Fehlermeldungen
hinterlegen, ebenso für Hintergrund- und Rahmenfarben.
Durch das Ändern von wenigen Platzhaltern ist es so möglich, den gesamten Shop
mitsamt all seiner Seiten, Formulare, Knöpfe, Texte und anderen Bedienelementen
in ein anderes Farbenspiel zu überführen. Natürlich besteht dabei immer die Mög-
lichkeit, einzelne oder alle Elemente weiterhin individuell mit Farben auszustatten –
die Nutzung der Platzhalter empfiehlt sich jedoch schon deshalb, weil diese auch von
Plugins und Drittentwicklern genutzt werden können, um beispielsweise neue Sei-
tentypen ebenfalls im Farbton des restlichen Shops zu halten.

4.1.2 Ein eigenes Theme erstellen


Das Erstellen eigener Themes ist immer dann empfehlenswert, wenn die Konfiguration
des Responsive-Themes über die Administrationsoberfläche nicht mehr ausreicht. In
einem eigenen Theme können Sie buchstäblich alle Templates in Shopware überschrei-
ben. So können Sie beispielsweise bestimmte, nicht benötigte Teile des Shops ausblen-
den oder andere Informationen anzeigen, die Shopware von Haus aus nicht präsentiert.
Aus Gründen der Kompatibilität sollten Sie niemals direkt ein Standard-Theme von
Shopware anpassen – erstellen Sie besser ein neues Theme, das vom Standard-
Theme ableitet. Dazu öffnen Sie unter Einstellungen 폷 Theme Manager den
Theme Manager. Klicken Sie oben in der Menüleiste auf Theme erstellen, um ein
neues Theme zu erzeugen. Abbildung 4.4 Übersicht des Theme-Verzeichnisses

90 91
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Im Hintergrund hat sich durch das Anlegen des Themes aber Einiges getan: Im Ver- </h1>
zeichnis /themes/Frontend Ihrer Shopware-Installation finden Sie für gewöhnlich {/block}
nur die beiden Verzeichnisse Bare und Responsive für die beiden Shopware-Standard-
Listing 4.1 Beispiel aus der Datei »themes/Frontend/Bare/frontend/detail/index.tpl«
Themes. Das neue Verzeichnis LoremIpsum wurde beim Anlegen des neuen Themes
direkt miterzeugt. Shopware erstellt dabei auch direkt alle Unterverzeichnisse mit, Die Anweisungen in geschweiften Klammern kennzeichnen Smarty-Anweisungen. 4
die Sie später vielleicht einmal benötigen werden. Im Auslieferungszustand sind die Hier wird zunächst ein Block frontend_detail_index_name definiert. Blöcke sind
Verzeichnisse zunächst leer; durch Anlegen von Template-Dateien können Sie aber benannte Bereiche im Template, die später gezielt überschrieben oder erweitert wer-
die Standard-Vorlagen des Bare-Themes leicht überschreiben. den können. Wenn Sie also ein bestimmtes Detail im Template überschreiben möch-
Auf der obersten Ebene finden Sie die Verzeichnisse documents, frontend, newsletter ten, sind Blöcke immer nützlich. Shopware hat über 1800 solche Erweiterungsblöcke.
und widgets. Das Verzeichnis documents beinhaltet die Vorlagen für die Dokument- Innerhalb des Blocks finden Sie die bekannten HTML-Tags. Hier wird ein Überschrif-
generierung, wie beispielsweise Rechnungen. frontend beinhaltet alle Templates für tenelement definiert, das die Klasse product--title erhält und mit dem Attribut
das Shopware-Frontend. Hier finden Sie eine ganze Reihe von Unterverzeichnissen, itemprop=name Suchmaschinen signalisiert, dass sich in diesem Element der Name
die jeweils für bestimmte Bereiche im Frontend zuständig sind: frontent/account bei- des Artikels befindet.
spielsweise für den Benutzeraccount, frontend/blog für Blogseiten, frontend/listing
Der Name des Artikels kann natürlich nicht Teil der Vorlage sein, da er sich je nach
für die Kategorielisten und frontend/detail für die Artikeldetailseiten. Das Verzeich- Artikel verändert. Entsprechend ist {$sArticle.articleName} eine typische Smarty-
nis newsletter beinhaltet Vorlagen für den Newsletter-Versand, und widgets enthält Variable. Die Anweisung bedeutet so viel wie: »Gib an dieser Stelle den Wert der Vari-
verschiedene Vorlagen für die sogenannten Shopware-Widgets – dazu gehören Top- ablen $sArticle.articleName aus.« Das Zuweisen der Variablen geschieht in aller
seller-Slider, Einkaufswelten und ähnliche wiederverwendbare Elemente. Regel in den sogenannten PHP-Controllern. In späteren Beispielen wird noch gezeigt,
Wenn Sie mit einem Theme arbeiten, spielen sich alle template-bezogenen Anpas- wie Sie solche Zuweisungen selbst erzeugen. Hier wollen wir uns zunächst darauf
sungen von Shopware in diesen Verzeichnissen ab: Als Shopbetreiber müssen Sie beschränken, mit den zur Verfügung stehenden Variablen zu arbeiten.
also keine Plugins schreiben, nur um an der ein oder anderen Stelle in Shopware klei- Aber welche Variablen stehen überhaupt zur Verfügung? Um diese Frage zu beant-
nere Anpassungen des Aussehens vorzunehmen. Gleichermaßen gilt: Alle Anpas- worten, können erfahrene Entwickler den Shopware Profiler installieren (vgl.
sungen, die Sie in Form eines eigenen Themes vornehmen, können Sie später leicht Abschnitt 18.3). Alternativ können Sie das Smarty-{debug}-Tag nutzen:
anderen Shopbetreibern zur Verfügung stellen oder mit wenig Aufwand in ein Plugin
{block name='frontend_detail_index_name'}
überführen, das Sie dann beispielsweise über den Shopware Community Store zum
{debug}
Verkauf anbieten können.
<h1 class="product--title" itemprop="name">
{$sArticle.articleName}
</h1>
4.1.3 Zusätzliche Daten im Frontend anzeigen
{/block}
Shopware nutzt die Template-Sprache Smarty. In Abbildung 4.1 haben Sie das grund-
Listing 4.2 Anpassung der Datei »themes/Frontend/Bare/frontend/detail/index.tpl«
legende Prinzip dabei schon gesehen: Das grundsätzliche Aussehen der Seite wird
durch Webtechnologien wie HTML, CSS und JavaScript bestimmt. Dort wird festge-
In diesem Fall habe ich direkt im Original-Template, das erweitert werden soll, das
legt, welche Boxen wie groß sind und welche Farben sie erhalten sollen. Das Tem-
Debug-Tag ergänzt. Wenn Sie nun den Shopware-Cache im Administrationsbereich
plate-System Smarty ermöglicht es Ihnen nun, dort auch Platzhalter zu definieren
leeren und eine Artikeldetailseite aufrufen, öffnet sich ein neues Fenster, das alle
und später zu befüllen. In der Abbildung wurden beispielsweise Platzhalter für den
Variablen ausgibt, die auf der aktuellen Seite zur Verfügung stehen.
Namen, den Preis oder die Beschreibung des Artikels definiert. In der Praxis sieht das
dann wie folgt aus: Abbildung 4.5 zeigt dieses Fenster mit einigen Variablen: Auf der linken Seite sehen
Sie jeweils den Namen, auf der rechten Seite den Wert. Die Werte können dabei
{block name='frontend_detail_index_name'} durchaus verschachtelt sein, also wiederum Listen beinhalten. So finden Sie bei-
<h1 class="product--title" itemprop="name"> spielsweise auf der linken Seite den Eintrag sArticle. Ihm ist eine Liste von weiteren
{$sArticle.articleName} Werten zugeordnet – unter anderem auch articleName mit dem Wert Sonnenbrille

92 93
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Red. In den oben gezeigten Beispielen würde für die aktuelle Seite also der Wert Son- Der Smarty-Debug-Konsole können Sie aber noch viele weitere wertvolle Informa-
nenbrille Red an die Stelle der Variablen sArticle.articleName gesetzt. tionen entnehmen. Ganz oben finden Sie beispielsweise den Namen der aktuellen
Template-Datei frontend/detail/index.tpl. Auch diese Information kann sehr hilfreich
sein.
Außerdem finden Sie eine Reihe weiterer Smarty-Variablen, auf die Sie zugreifen 4
können. So haben Sie beispielsweise auch Zugriff auf die $SeoMetaDescription oder
auf den aktuellen Subshop $shop. In der Variablen $sArticle finden Sie eine Reihe
von weiteren Feldern, beispielsweise den Lagerbestand $sArticle.instock, das Arti-
kelgewicht, Artikelbilder oder eine Vielzahl von Attributen. Nehmen Sie sich also
ruhig Zeit, um die zur Verfügung stehenden Variablen ein wenig zu analysieren: Hier
stehen Ihnen viele nützliche Informationen zur Verfügung.

Das Debug-Fenster erscheint nicht?


Das Debug-Tag öffnet ein neues Fenster. Aber viele Browser unterbinden dies, um
Sie vor unerwünschter Werbung zu schützen. Falls sich das Debug-Fenster nicht öff-
net, prüfen Sie zunächst, ob Sie wirklich alle Shopware-Caches im Administrations-
bereich geleert haben. Laden Sie dann die Artikeldetailseite neu, und prüfen Sie, ob in
der Nähe der Adressleite ein Hinweis oder Symbol erscheint, das signalisiert, dass der
Browser das Öffnen des Fensters verhindert hat. In aller Regel können Sie den Brow-
ser durch einen Klick auf das Symbol zur Anzeige des Fensters überreden.

Bevor Sie nun weiterarbeiten, sollten Sie zunächst das {debug}-Tag aus dem Template
entfernen. Im nächsten Beispiel soll einmal der Artikelname auf der Artikeldetail-
seite durch den Wert eines Freitextfeldes ausgetauscht werden. Zunächst legen Sie
dazu unter Einstellungen 폷 Freitextfeld-Verwaltung ein neues Freitextfeld an
(vgl. Abschnitt 3.6, »Freitextfelder«). Als Tabelle wählen Sie s_articles_attributes.
Klicken Sie dann auf Hinzufügen. Nun erstellen Sie folgendes Freitextfeld:
왘 Spaltenname: alternative_article_name
왘 Spaltentyp: Einfacher Text
왘 Label: Alternativer Artikelname
왘 Im Backend anzeigen: Ja
왘 Übersetzbar: Ja

Nach einem Klick auf Speichern erzeugt Shopware die neue Spalte. Öffnen Sie nun
im Administrationsbereich den Artikel »Sonnenbrille Red« oder einen beliebigen
anderen Artikel. Im Reiter Stammdaten finden Sie ganz unten den Bereich Frei-
textfelder. Tragen Sie hier unter Alternativer Artikelname eine beliebige
Beschreibung ein, und speichern Sie den Artikel.
Durch einen Klick auf das kleine Globus-Symbol können Sie die alternative Artikel-
Abbildung 4.5 Smarty-Debug-Fenster
beschreibung auch direkt in andere Sprachen übersetzen. Shopware stellt dann im

94 95
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Frontend automatisch immer den richtigen Wert zur Verfügung. Wenn Sie diesen Feld hinterlegt haben, können Sie über die Länderflagge oben rechts auf die englische
Artikel nun im Frontend aufrufen, sehen Sie zunächst keine Änderung: Die Vorlage Sprache wechseln: Der Artikel erhält dann die englische alternative Beschreibung.
wurde noch nicht angepasst.
Sie wissen bereits, dass der Artikelname standardmäßig in der Datei themes/Front-
end/Bare/frontend/detail/index.tpl definiert wird. Um die Anpassung vorzunehmen, 4
legen Sie nun analog dazu die Datei themes/Frontend/LoremIpsum/frontend/detail/
index.tpl an. Die leeren Ordner wurden bereits direkt beim Erzeugen des Themes
erstellt, sodass Sie nur noch die Datei index.tpl im richtigen Pfad anlegen müssen.
Der Inhalt soll wie folgt aussehen:

{extends file='parent:frontend/detail/index.tpl'}
{block name='frontend_detail_index_name'}
<h1 class="product--title" itemprop="name">
{$sArticle.attributes.core->get('alternative_article_name')} Abbildung 4.6 Ein Artikel mit übersetztem Alternativnamen
</h1>
{/block} Durch wenige Anpassungen haben Sie also ein komplett individuelles Datenfeld an
Ihrem Artikel eingepflegt und es im Frontend eingebunden. Allerdings gibt es noch
Listing 4.3 Die Datei »themes/Frontend/LoremIpsum/frontend/detail/index.tpl«
ein kleines Problem: Wenn Sie einen Artikel ohne Alternativbeschreibung aufrufen,
wird gar kein Name mehr angezeigt. Das Template muss also noch so ergänzt wer-
Dadurch, dass diese Datei in der gleichen Stuktur wie die Standard-Datei angelegt
den, dass statt des alternativen Namens der Standardname genutzt wird, wenn es
wird, wurde der Standard überschrieben: Das Template-System berücksichtigt nun
keinen alternativen Namen gibt. Dazu können Sie Ihr individuelles Template wie
die Datei im Bare-Theme nicht mehr, sondern verarbeitet zunächst nur noch die
folgt abändern:
neue Datei. Das ist aber in diesem Fall eigentlich zu viel des Guten: Sie wollen ja nur
eine Kleinigkeit austauschen. Darum können Sie Smarty mit dem extends-Schlüssel- {extends file='parent:frontend/detail/index.tpl'}
wort anweisen, doch von den Eltern-Themes abzuleiten. {block name='frontend_detail_index_name'}
<h1 class="product--title" itemprop="name">
Da unser LoremIpsum-Theme vom Responsive-Theme abgeleitet ist, würde Smarty
{assign var=alternative_name value=$sArticle.attributes.core->
nun zuerst dort nach der entsprechenden Datei suchen – und sie nicht finden. Das
get('alternative_article_name')}
Responsive-Theme leitet sich wiederum vom Bare-Theme ab, sodass Smarty im
{if $alternative_name}
nächsten Schritt dort nach der Datei sucht – und fündig wird.
{$alternative_name}
Über das extends-Schlüsselwort können Sie also auf diese Vererbungshierarchie zu- {else}
greifen und müssen nicht für kleine Template-Anpassungen ganze Template- {$sArticle.articleName}
Dateien neu schreiben: Sie erben einfach vom Eltern-Theme und überschreiben nur {/if}
die Blöcke, die Sie austauschen möchten – im obigen Beispiel also den Block front- </h1>
end_detail_index_name, da dieser den Artikelnamen beinhaltet. Der Klassenname {/block}
und das itemprop-Attribut sollten dabei übernommen werden. Statt der vorherigen
Listing 4.4 Die Datei »themes/Frontend/LoremIpsum/frontend/detail/index.tpl«
Ausgabe von {$sAticle.articleName} soll nun aber das neue Attribut ausgegeben wer-
den. Dies geschieht durch die Anweisung {$sArticle.attributes.core->get('alter- Um die Übersicht zu wahren, wird in diesem Beispiel zunächst der Inhalt von
native_article_name')}. $sArticle.attributes.core->get('alternative_article_name') der Variablen alter-
Nach dem Leeren des Caches können Sie nun im Frontend den Artikel aufrufen, den native_name zugewiesen. Dafür benutze ich die Smarty-Funktion assign. Diese
Sie mit einem alternativen Namen versehen haben (vgl. Abbildung 4.6). Dieser wird Methode ist immer dann praktisch, wenn Sie in Ihrem Template öfter auf eine Varia-
nun statt des Standardnamens ausgegeben. Falls Sie auch eine Übersetzung für das ble zugreifen wollen, die tief verschachtelt ist. So können Sie die Variable einfach an

96 97
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

einen kürzeren, sprechenden Namen binden und damit die Lesbarkeit Ihrer Anpas- gabe der Seite rendern, sodass Sie leicht nachschauen können, wo Ihnen welche Blö-
sung deutlich erhöhen. cke zur Verfügung stehen. Sie kommen aber auch ohne zusätzliche Werkzeuge
Sicher stellen Sie sich die Frage, warum in dem Konstrukt $sArticle.attributes.core schnell zum Ergebnis, indem Sie die Entwicklerkonsole Ihres Browsers nutzen. Kli-
->get('alternative_article_name') sowohl mit dem Punkt-Operator (beispielsweise cken Sie dazu, wie in Abbildung 4.8 zu sehen, mit der rechten Maustaste in die Nähe
nach sArticle) als auch mit dem Pfeil-Operator (nach core) gearbeitet wird: Der Punkt- des Elements, bei dem Sie Ihre Anpassung vornehmen möchten. 4
Operator kann in Smarty für Arrays genutzt werden, der Pfeil-Operator bezieht sich Nun öffnet sich ein Kontextfenster, in dem Sie den Menüpunkt Prüfen auswählen
auf Objekte. Die Faustregel lautet hier schlicht: Artikel-Attribute werden im Template können (der Name kann sich je nach Browser unterscheiden). Daraufhin erscheint
als Objekte zur Verfügung gestellt; hier müssen Sie mit dem Pfeil-Operator arbeiten. ein Fenster, das das gewählte HTML-Element im Quelltext anzeigt. Hier suchen Sie
Im nächsten Schritt finden Sie eine if-Abfrage in der Form {if $alternative_ sich jetzt einen möglichst eindeutigen Bezeichner – also einen Klassennamen oder
name}…{else}…{/if}. In dem if-Block wird dabei immer eine Bedingung definiert. In eine ID, die Sie nicht zu oft im Quelltext erwarten. In diesem Fall empfehlen sich die
diesem Fall soll die Variable $alternative_name nicht leer sein. Ist dies der Fall, wird Klassen entry--sku oder product--base-info. Beide Namen nehmen ja sehr konkret
{$alternative_name} ausgegeben, andernfalls ({else}) wird der Standardname mit Bezug auf die Information »Bestellnummer« oder »Artikelinformation«.
{$sArticle.articleName} ausgegeben. Sie können in Ihrem Template also auch Werte
abfragen und je nach Wunsch bedingte Ausgaben vornehmen.

4.1.4 Den richtigen Block finden


Ein zweites Beispiel für eine einfache Template-Anpassung ist die Ausgabe des Lager-
bestandes. Auch diese kann leicht ergänzt werden. Im vorigen Beispiel haben Sie
bereits gesehen, dass der Lagerbestand als Variable $sArticle.instock zur Verfügung
steht. Dieses Mal lautet die Frage aber: Wie finden Sie die Stelle im Template, die Sie
überschreiben müssen, damit die Ausgabe genau da erscheint, wo Sie sie haben
möchten?
Abbildung 4.7 zeigt das gewünschte Ergebnis: Unter der Artikelnummer soll der
Kunde zusätzlich den Lagerbestand sehen können. Abbildung 4.8 Über die rechte Maustaste können Sie sich Elemente auf der Seite im
Quelltext anzeigen lassen.

Nun können Sie mit Ihrem Dateibrowser oder Ihrer Entwicklungsumgebung im


Bare-Verzeichnis nach diesen Klassennamen suchen. In beiden Fällen gibt es dazu
nur einen Treffer in der Datei themes/Frontend/Bare/frontend/detail/index.tpl. Dort
finden sich die beiden Klassennamen im folgenden Abschnitt, der für die Ausgabe
der Bestellnummer verantwortlich ist:

{block name='frontend_detail_data_ordernumber'}
<li class="base-info--entry entry--sku">
{* Product SKU - Label *}
Abbildung 4.7 Der Lagerbestand soll unter der Artikelnummer zu sehen sein. {block name='frontend_detail_data_ordernumber_label'}
<strong class="entry--label">
Erneut können Sie hierfür den Shopware Profiler (vgl. Abschnitt 18.3) nutzen. Dieser {s name="DetailDataId" namespace="frontend/detail/data"}{/s}
kann Ihnen auf Wunsch die Smarty-Blöcke direkt als HTML-Kommentar in die Aus- </strong>
{/block}

98 99
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

{* Product SKU - Content *} sich ein Label entry--label sowie der Inhalt entry--content befindet. Wirklich neu ist
{block name='frontend_detail_data_ordernumber_content'} hier nur die Ausgabe des Lagerbestandes: {$sArticle.instock}.
<meta itemprop="productID" content="{$sArticle.articleDetailsID}"/>
Durch verhältnismäßig wenig Aufwand können Sie mit diesem Vorgehen also nicht
<span class="entry--content" itemprop="sku">
nur herausfinden, welche Blöcke Sie überschreiben müssen, damit Sie Ihre Anpas-
{$sArticle.ordernumber}
sungen an dem gewünschten Ort vornehmen können: Sie finden so auch die CSS- 4
</span>
Klassen und HTML-Elemente, die Sie benötigen, um Ihre Ausgabe auf die gleiche
{/block}
</li>
Weise vorzunehmen, wie es auf anderen Shopware-Seiten der Fall ist.
{/block}

Listing 4.5 Der Abschnitt »SKU« aus der Datei »themes/Frontend/Bare/frontend/detail/ 4.1.5 Schleifen, Währungen und Modifier nutzen
index.tpl« Neben den Bedingungen und Variablenzuweisungen, die bisher besprochen wurden,
bietet Smarty noch eine große Zahl weiterer Funktionen, die ich Ihnen nun an eini-
So wird also die Bestellnummer ausgegeben: Das Ganze ist eine HTML-Liste, bei der gen Beispielen zeigen werde.
der Name die Klasse entry--label erhält und der Wert die Klasse entry--content. Wei-
Im ersten Beispiel soll unterhalb der Artikelbeschreibung eines Artikels auf der Arti-
terhin befindet sich der ganze Abschnitt im Smarty-Block frontend_detail_data_
keldetailseite jeweils eine Liste von ähnlichen Artikeln mit Links und Preisen ausge-
ordernumber, den Sie nicht nur überschreiben können, sondern an denen Sie auch
geben werden:
Informationen anhängen können:
{extends file='parent:frontend/detail/tabs/description.tpl'}
{extends file='parent:frontend/detail/index.tpl'}

{block name='frontend_detail_description_links_list' append}


{block name='frontend_detail_data_ordernumber' append}
<div class="content--title">
<li class="base-info--entry entry--instock">
{s name="my_similar_articles"}
<strong class="entry--label">
Diese Artikel könnten Sie auch interessieren
Lagerbestand
{/s}
</strong>
</div>
<span class="entry--content">
<ul class="content--list list--unstyled">
{$sArticle.instock}
{foreach $sArticle.sSimilarArticles as $similar}
</span>
<li class="list--entry">
</li>
<a href="{$similar.linkDetails}"
{/block}
class="content--link link--further-links"
Listing 4.6 Die Datei »themes/Frontend/LoremIpsum/frontend/detail/index.tpl« title="{$similar.articleName}">
<i class="icon--arrow-right"></i>
Hier leiten Sie erneut vom Eltern-Template parent:frontend/detail/index.tpl ab. {$similar.articleName}
Der Block frontend_detail_data_ordernumber wird aber anders als in den vorherigen , ab {$similar.prices.0.price|currency}
Beispielen nicht komplett überschrieben, sondern durch die Anweisung append so </a>
erweitert, dass Ihre Erweiterung unten angehängt wird. </li>
{/foreach}
Analog dazu wäre auch das Schlüsselwort prepend möglich, falls Ihre Lagerbestands-
</ul>
information oberhalb der Bestellnummer angezeigt werden soll. Der HTML-Code,
{/block}
der hier in den Block eingefügt wird, orientiert sich stark an dem Beispiel der Bestell-
nummer: Es gibt ein Listen-Element <li> mit den entsprechenden Klassen, in dem Listing 4.7 Die Datei »themes/Frontend/LoremIpsum/frontend/detail/tabs/
description.tpl«

100 101
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Das grundlegende Vorgehen ist bereits bekannt: Sie überschreiben das Template für Weil dieser Preis in aller Regel unformatiert ist, sollten Sie bei der Ausgabe von Prei-
die Beschreibung auf der Artikeldetailseite, indem Sie eine gleichnamige Datei in sen immer den sogenannten Currency-Modifier verwenden: Modifier sind kleine Hel-
Ihrem Template anlegen. Durch extends erbt Ihr Template jedoch von dem über- fer, die die Ausgabe nach bestimmten Regeln formatieren. Sie erkennen sie an dem
schriebenen Template, sodass Sie nicht alle Template-Inhalte nachbauen müssen. Pipe-Symbol |. Der Currency-Modifier kennt alle Währungen in Shopware und stellt
Stattdessen hängen Sie mit append den gewünschten Inhalt an den Block frontend_ diese korrekt dar. In diesem Fall ergänzt der Modifier das €-Symbol und stellt sicher, 4
detail_description_links_list an, sodass unterhalb der Links Ihr Inhalt ausgegeben dass der korrekte Dezimaltrenner verwendet wird.
wird. Innerhalb des div mit der CSS-Klasse content--title wird die Überschrift des Weitere Beispiele für Smarty-Modifier sind etwa lower, upper und capitalize: Die
Abschnitts ausgegeben: ersten beiden setzen eine Zeichenkette komplett in Klein- beziehungsweise Groß-
{s name="my_similar_articles"} buchstaben, und capitalize setzt jeweils den ersten Buchstaben eines Wortes in
Diese Artikel könnten Sie auch interessieren Großbuchstaben. Ebenfalls gerne genutzt wird beispielsweise truncate, das eine
{/s} Zeichenkette nach einer vorgegebenen Anzahl an Zeichen abschneidet – dies ist
Bei diesem Konstrukt handelt es sich um ein sogenanntes Snippet, einen Textbau- z. B. dann nützlich, wenn Sie eine Artikelbeschreibung nur anreißen möchten. Eine
stein. Er ermöglicht es Ihnen, Textelemente direkt im Template einzupflegen und Übersicht vieler Modifier finden Sie auf www.smarty.net/docsv2/en/language.modi-
diese später in der Textbaustein-Verwaltung im Administrationsbereich bequem für fiers.tpl.
andere Sprachen zu übersetzen. Mehr Informationen zu den Textbausteinen finden
Sie in Abschnitt 15.3, »Arbeiten mit Übersetzungen«.
Weiter unten gibt es ein div mit der CSS-Klasse content--list list--unstyled. In die-
sem soll nun eine Liste von Artikeln ausgegeben werden. Die Liste wird mit einem
<ul>-Element erzeugt. Mit dem folgenden Smarty-Konstrukt wird eine Schleife
erzeugt:

{foreach $sArticle.sSimilarArticles as $similar}


...
{/foreach}

Hier wird über alle Einträge in $sArticle.sSimilarArticles iteriert. In dieser Variablen


finden sich auf der Artikeldetailseite Produkte, die zu dem aktuellen Produkt passen
könnten. Für jedes Produkt in dieser Liste wird dann der Inhalt des folgenden Blocks
ausgeführt; das jeweilige Produkt wird so jeweils der Variablen $similar zugewiesen.
In unserem Beispiel wird also für jedes Produkt ein Listen-Eintrag <li> erzeugt und
mit dem Anchor-Element <a> ein Link auf die jeweilige Seite des Produkts ausgegeben
(siehe Abbildung 4.9). Die jeweiligen Smarty-Variablen wie $similar.linkDetails oder
$similar.articleName können Sie dabei wieder mit dem {debug}-Tag ermitteln.

Eine kleine Besonderheit stellt die Ausgabe {$similar.prices.0.price|currency} dar.


Hier wird auf die Liste $similar.prices zugegriffen. Da hier mehrere Elemente ent-
halten sind (es kann schließlich mehrere Preise geben), wird durch den Index-Zugriff Abbildung 4.9 Eine Liste von Artikelnamen mit Preisen – hier am Beispiel des Artikels
0 auf das erste Element zugegriffen. Dahinter versteckt sich dann erneut eine Liste »Artikel mit Zubehör«
von Preisinformationen, und erst durch den Zugriff auf price erhalten Sie schließlich
den tatsächlichen Preis. Erfahrene Entwickler können sogar eigene Smarty-Funktionen und Smarty-Modifier
schreiben, indem sie diese unter /_private/smarty/function.my_function_name.php
beziehungsweise /_private/smarty/modifier.my_modifier_name.php in ihrem Theme

102 103
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

ablegen. Die offizielle Smarty-Dokumentation zum Entwickeln eigener Funktionen {


und Modifier finden Sie unter www.smarty.net/docs/en/plugins.tpl. Auch wenn diese protected $extend = 'Responsive';
Funktionalität häufig angefragt wird, würde ich für den Einstieg aber doch dazu raten, protected $name = "LoremIpsum";
auf diese Form der Erweiterung zu verzichten: Das Template sollte nach Möglichkeit protected $description = "LoremIpsum"
so einfach wie möglich gehalten werden – und Programmlogik gehört nach Möglich- protected $author = "LoremIpsum"
4
keit immer in Plugins. protected $license = "LoremIpsum"

protected $css = array(


4.1.6 Einfaches Styling mit CSS 'src/css/no_notepad.css'
CSS steht für Cascading Style Sheets und ist eine Syntax um das Erscheinungsbild von );
Dokumenten (hier: Webseiten) zu definieren. Während im Template von Shopware }
häufig definiert wird, was dargestellt wird, legen Sie mit CSS fest, wie es dargestellt Listing 4.9 Die Datei »themes/Frontend/LoremIpsum/Theme.php«
werden soll.
In aller Regel versucht man, diese beiden Ebenen voneinander zu trennen. Die CSS- Die Datei Theme.php ist die Hauptkonfigurationsdatei Ihres Themes. Sie wurde beim
Dateien werden daher in dem speziellen Ordner themes/Frontend/ThemeName/front- Anlegen automatisch miterzeugt und beinhaltet alle dort angegebenen Informatio-
end/_public/src/css/ abgelegt. nen, wie beispielsweise das Basis-Theme (hier: Responsive) oder Autor, Lizenz,
Beschreibung und den Namen des Themes. In der Theme.php wird über die Eigen-
Folgendes sehr einfache Beispiel versteckt via CSS die Merkzettel-Funktion im Hea-
schaft $css eine Liste von CSS-Dateien definiert, die im Theme berücksichtigt werden
der von Shopware:
sollen. Hier wird die oben erzeugte Datei mittels src/css/no_notepad.css referenziert.
li.navigation--entry.entry--notepad { Nun ist die Änderung korrekt registriert.
display: none;
Damit sie berücksichtigt wird, müssen Sie nun den Theme-Cache neu aufbauen. Dies
}
ist beispielsweise über Einstellungen 폷 Caches/Performance im Reiter Cache
Listing 4.8 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/css/ möglich. Dort setzen Sie einen Haken bei Theme kompilieren (vgl. Abbildung 4.10)
no_notepad.css« und klicken auf den Knopf leeren. In dem Fenster, das sich nun öffnet, können Sie
den Vorgang mit Themes kompilieren abschließend bestätigen.
Hier wird über den Selektor li.navigation--entry.entry--notepad der Merkzettel-
Wenn Sie nun das Shopware-Frontend neu laden, greift die Änderung – der Merkzet-
Knopf selektiert und der Style display: none gesetzt – das Element wird versteckt.
tel ist verschwunden. Shopware definiert eine Reihe von CSS-Klassen, die Sie in Ihren
Anpassungen leicht übernehmen können. Eine Übersicht finden Sie in Anhang B.4,
Den richtigen Selektor finden
»Übersicht über global verfügbare Styles«.
Wenn Sie in Plugins oder eigenen Themes mit CSS oder später auch mit Less Styles
überschreiben wollen, sollten Sie bedenken, dass CSS den spezifischeren Selektor be-
vorzugt. Damit Ihre Style-Definition also die Definition von Shopware überschreibt, 4.1.7 Theme-Kompilierung
sollte Ihre Definition länger sein. Dies erreichen Sie, indem Sie zusätzlich CSS-Klassen
Das Arbeiten mit JavaScript, CSS und Less erfordert heute in den meisten Webappli-
in den Selektor aufnehmen oder auf konkrete Elemente verweisen.
kationen noch einen Sonderschritt: das sogenannte Kompilieren. In diesem Schritt
werden die CSS-, JavaScript- und Less-Dateien gesammelt, zusammengefügt und ver-
Die CSS-Dateien werden nicht automatisch geladen. Sie müssen sie in der Theme.php-
kleinert, indem beispielsweise überflüssige Leerzeichen und Kommentare entfernt
Datei Ihres Themes registrieren:
werden. Man tut das, weil das Laden von vielen einzelnen, kleinen Dateien oftmals
namespace Shopware\Themes\LoremIpsum; deutlich länger dauert als das Laden weniger, etwas größerer Dateien.1
use Shopware\Components\Form as Form;
1 Diese Limitierung wird sich in Zukunft, beispielsweise durch HTTP/2, ändern,
class Theme extends \Shopware\Components\Theme vergleiche https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP.2F2

104 105
4 Shopware-Templating 4.1 Einstieg in Templates und Themes

Das ist auch in Shopware so: Damit Änderungen an CSS, Less und JavaScript greifen,
müssen die Dateien verkleinert und zusammengefügt werden: Das Resultat finden
Sie in Form einer großen JavaScript- und CSS-Datei im Verzeichnis /web/cache einer
jeden Shopware-Installation.
4

Abbildung 4.11 Im Theme-Manager kann das Caching deaktiviert werden.

Wenn Sie nun eine Seite im Frontend neu laden, werden für jeden Request alle benö-
tigten Daten neu aufgebaut – das umständliche Leeren des Caches entfällt. Allerdings
bezahlen Sie diesen Komfort mit einer etwas längeren Wartezeit bei jedem Seitenauf-
ruf: kein guter Kompromiss.
Eine sinnvolle Alternative für Entwickler ist das Tool Grunt: Es beobachtet während
der Entwicklung kontinuierlich alle JavaScript- und Less-Dateien und baut bei Bedarf
alle benötigten Caches direkt auf. Das ist nicht nur sehr schnell – es ist auch sehr
bequem. Zunächst müssen dazu alle benötigten Informationen exportiert wer-
Abbildung 4.10 Das manuelle Kompilieren der Caches ist für die Entwicklung weniger den. Dazu gibt es in Shopware ein dediziertes Konsolenkommando (vgl. Kapitel 12,
geeignet. »Shopware-Kommandos«):

./bin/console sw:theme:dump:configuration
Grundsätzlich können Sie das Kompilieren jederzeit über den Administrationsbe-
reich im Performance-Modul anstoßen. Wer aber für längere Zeit mit CSS, Less und Nun navigieren Sie mit cd themes in das Theme-Verzeichnis. Dort führen Sie folgende
JavaScript entwickeln und experimentieren möchte, braucht hier sicher bequemere Kommandos aus:
Alternativen.
npm install
Grundsätzlich können Sie das Kompilieren und Caching auch deaktivieren –
grunt
Shopware baut die nötigen Informationen dann bei jeder Anfrage bei Bedarf wieder
auf. Dazu öffnen Sie unter Einstellungen 폷 Theme Manager die Theme-Verwal- Das erste Kommando installiert Grunt und alle dafür benötigten Abhängigkeiten,
tung und klicken dann auf Einstellungen. Dort setzen Sie nun einen Haken bei das zweite Kommando führt Grunt schließlich aus. Grunt wird – solange es läuft –
Compiler Cache deaktivieren und entfernen die Haken bei CSS komprimieren permanent auf geänderte Dateien prüfen und bei Bedarf die Theme-Caches neu auf-
sowie bei JavaScript komprimieren, wie in Abbildung 4.11 gezeigt wird.

106 107
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

bauen. Standardmäßig beobachtet das Kommando allerdings nur JavaScript- und Die Datei no_notepad.css wird dazu in no_notepad.less umbenannt und in den Ord-
Less-Dateien: Dies sind die empfohlenen Standards von Shopware. Beides zeige ich ner src/less/_modules verschoben. Shopware unterscheidet hier grundsätzlich vier
Ihnen im nächsten Abschnitt genauer. verschiedene Typen von Less-Anweisungen, die jeweils in unterschiedlichen Ord-
nern gepflegt werden:
왘 Variablen sind bestimmte Werte, die an vielen Stellen in den Stylesheets benötigt 4
4.2 Erweitertes Templating mit JavaScript und Less werden, etwa für bestimmte Device-Größen oder Farben.

Der Einstieg in das Templating mit CSS und Smarty ist auch für Einsteiger in aller 왘 Komponenten sind Styles für wiederverwendbare Komponenten wie Formulare,
Regel leicht zu bewerkstelligen: Schließlich können Sie hier bereits mit wenig Vor- Hinweisboxen oder Listen.
kenntnissen in CSS und HTML loslegen. Im vorigen Abschnitt hat sich aber auch 왘 Mixins sind Anweisungen, die oftmals in andere Styles »hineingemischt« werden.
gezeigt, dass Shopware einiges an Aufwand betreibt, um Less- und JavaScript-Dateien 왘 Modules sind Styles, die explizit Bezug auf bestimmte Teilbereiche von Shopware
zu verarbeiten und zusammenzufassen. Da dieser Schritt ohnehin erforderlich ist, ist nehmen, etwa Styles für die Registrierung, für den Warenkorb oder die Produkt-
es empfehlenswert, sich auch direkt mit Less auseinanderzusetzen. liste.
Less ist eine Obermenge von CSS: Das Schreiben von CSS-Anweisungen ist gerade bei Eine Übersicht über alle verfügbaren Komponenten, Variablen, Mixins und Module
größeren Applikationen sehr umständlich und redundant: In den vorigen Theme- finden Sie im sogenannten Styletile unter https://developers.shopware.com/styletile.
Beispielen haben Sie beispielsweise die Primär- und Sekundärfarben Ihres Shops fest-
Less-Styles müssen nicht in der Theme.php registriert werden: Die $css-Eigenschaft
gelegt: Durch wenige Mausklicks werden alle Knöpfe rot, alle Schriften blau und alle
kann dort also ersatzlos entfernt werden. Stattdessen verarbeitet Shopware automa-
Hintergründe grün – wenn gewünscht. In CSS ist das nicht so leicht umsetzbar, da es
tisch die Datei all.less in jedem Theme. In diese Datei müssen also alle Less-Dateien
Hunderte Elemente gibt, denen die jeweiligen Farben zugewiesen werden müssen.
eingebunden werden. Aus Gründen der Übersichtlichkeit empfiehlt Shopware, für
Wäre es nicht praktisch, wenn es dafür Variablen gäbe, die nur an einer Stelle gepflegt
Module, Komponenten, Mixins sowie Variablen jeweils eigene Dateien zu pflegen, in
werden müssen?
welche die jeweiligen Dateien inkludiert werden:
Genau das kann Less: Es erweitert CSS um zusätzliche Funktionen wie Mixins, Varia-
@import 'modules';
blen und verschachtelte Selektoren. All dies macht das Schreiben von Styles deutlich
einfacher, als es mit CSS wäre. Allerdings unterstützen die Browser Less nicht nativ – Listing 4.11 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/less/all.less«
daher müssen die Less-Anweisungen in CSS-Anweisungen übersetzt werden. Dieser
Vorgang wird auch kompilieren genannt. In der von Shopware automatisch inkludierten Datei all.less wird also zunächst nur
auf die Datei modules.less verwiesen, die im nächsten Schritt erstellt wird:

4.2.1 Styling mit LESS @import "_modules/no_notepad";

Zunächst müssen Sie das LoremIpsum-Theme so anpassen, dass statt CSS Less ge- Listing 4.12 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/less/
nutzt wird. Da Less eine Obermenge von CSS ist (jedes CSS also auch als Less interpre- modules.less«
tiert werden kann), muss an den CSS-Anweisungen selbst zunächst nichts geändert
Hier wird nun schließlich die eigene Style-Datei importiert. Wenn Sie den Grunt-Task
werden:
aus den vorherigen Beispielen noch laufen haben, greift die Änderung bereits, andern-
li.navigation--entry.entry--notepad { falls starten Sie Grunt wie zuvor beschrieben oder kompilieren den Theme-Cache über
display: none; das Cache-Modul neu.
}
Damit haben Sie nun ein einfaches CSS in Less überführt. Less kann aber viel mehr:
Listing 4.10 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/less/
@myColor: #ff0000;
_modules/no_notepad.less«
.myStyle {
background-color: @myColor;

108 109
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

} }
.someOtherStyle { .someOtherBox {
background-color: @myColor; text-decoration: underline;
} color: red;
} 4
Listing 4.13 Definition und Nutzung einer Less-Variable

Erneut besteht der Vorteil darin, dass Sie bestimmte, häufig genutzte Style-Informa-
Hier wird zunächst die Variable myColor definiert – sie erhält den Wert #ff0000 (also
tionen nur an einer Stelle zentral pflegen müssen und später komfortabel ändern
rot). Diese Variable wird dann in den CSS-Klassen myStyle sowie someOtherStyle
können. Mixins können dabei auch Parameter haben, wie das Beispiel des unitize-
genutzt, um den Hintergrund zu definieren.
Mixins zeigt:
Wenn der Hintergrund nun zu einem späteren Zeitpunkt geändert werden soll, muss
.my-class {
nur der Wert der Variablen @myColor angepasst werden. Dies ist der Grund, warum Sie
.unitize(font-size, 22);
in der Theme-Konfiguration allgemeingültige Primär- und Sekundärfarben definie-
.unitize-padding(10, 10, 10, 10);
ren können, die an vielen verschiedenen Stellen berücksichtigt werden. Die stan-
}
dardmäßig verfügbaren Farben werden in der Theme.php des Responsive-Templates
definiert – hier können Sie auch die Standardwerte entnehmen. Das unitize-Mixin dient dazu, absolute Pixel-Angaben in relative rem-Angaben
Während Sie mit Variablen bestimmte Werte wiederverwenden können, haben Sie umzuwandeln: Dadurch richtet sich die Größe jeweils nach der Standardschriftgröße
mit Mixins die Möglichkeit, komplette Style-Definitionen zu übernehmen, ohne des Browsers. Dies ist möglich, weil Less es erlaubt, innerhalb der Styles einfache
diese duplizieren zu müssen: arithmetische Operationen durchzuführen. Ebenfalls möglich ist es, Selektoren zu
verschachteln:
.my-text {
text-decoration: underline; .product {
color: red; .detail {
} font-weight: bold;
.someBox { .description {
.my-text; text-decoration: underline;
} }
.someOtherBox { }
.my-text; }
}
Dies wird nach der Kompilierung zu:
Listing 4.14 Nutzung von Mixins in Less
.product .detail {
In diesem Beispiel wird zunächst die Klasse my-text definiert: Sie unterstreicht einen font-weight: bold;
Text und setzt ihn in Rot. Die beiden CSS-Klassen someBox und someOtherBox nutzen }
nun diese Klasse als Mixin: Nach dem Kompilieren wird die Style-Definition von my- .product .detail .description {
text in someBox und someOtherBox übernommen: text-decoration: underline;
}
.someBox {
text-decoration: underline; Auch dies kann in der Praxis eine große Arbeitserleichterung sein, da Selektoren in
color: red; aller Regel ja genutzt werden, um bestimmte Verschachtelungen zu beschreiben.

110 111
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

Das dazugehörige Less-Stylesheet sieht wie folgt aus:

.examplebox {
.unitize-margin(0, 0, 10, 0);
.unitize-padding(10, 10, 10, 10);
.border-radius(3px); 4
border: 1px solid @panel-border;
display: block;
}

Listing 4.16 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/less/


_modules/examplebox.less«

Damit dieses Stylesheet berücksichtigt wird, muss es in der modules.less importiert


werden:

@import "_modules/no_notepad";
@import "_modules/examplebox";

Listing 4.17 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/less/


modules.less«

Durch diese Anpassungen wird auf der Artikeldetailseite oberhalb der Artikelbe-
schreibung eine neue Box examplebox erzeugt. Diese erhält über die Style-Definitio-
nen einen runden Rahmen. Durch die unitize-Mixins erhält die Box weiterhin
Padding und Margin relativ zur Schriftgröße des Browsers. Zunächst sollen einige
Theme-Variablen genutzt werden:

Abbildung 4.12 Häufig benötigte Elemente <div class="content--title">Variablen</div>


<div class="primary">Primärfarbe</div>
Im Folgenden stelle ich einige häufig benötigte Less-Funktionalitäten sowie Shop- <div class="primary-light">Primärfarbe hell</div>
ware-Elemente beispielhaft vor. Dazu füge ich in das Detailseiten-Template von <div class="secondary">Sekundärfarbe</div>
Shopware einen neuer Bereich ein, um das in Abbildung 4.12 gezeigte Resultat zu <div class="secondary-dark">Sekundärfarbe dunkel</div>
erzielen: Listing 4.18 Ergänzung der Datei »themes/Frontend/LoremIpsum/frontend/detail/
{block name='frontend_detail_index_detail' prepend} index.tpl«
<div class="examplebox">
Die dazugehörigen Styles sehen wie folgt aus:
</div> .white-font {
{/block} color: white;
Listing 4.15 Erweiterung der Datei »themes/Frontend/LoremIpsum/frontend/detail/ .is--bold;
index.tpl« }

112 113
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

.primary { <div class="content--title">Icons</div>


background-color: @brand-primary; <div class="spacer">Pfeil nach rechts<i class="icon--arrow-right"></i></div>
.white-font; <div class="spacer"><i class="icon--thumbsup"></i> ThumbsUp-Icon</div>
}
In diesem Fall werden ein Pfeil nach rechts sowie ein Daumen-hoch-Icon verwendet.
4
.primary-light { Viele weitere Icons finden Sie beispielsweise in der Datei themes/Frontend/Respon-
background-color: @brand-primary-light; sive/frontend/_public/src/less/_components/icon-set.less. Das div-Element mit der
.white-font; Klasse spacer wird hier nur genutzt, um die beiden Beispiele optisch ein wenig zu
} trennen. Dafür nutze ich folgendes verschachteltes Stylesheet mit dem unitize-
Mixin:
.secondary {
.examplebox {
background-color: @brand-secondary;
.spacer {
.white-font;
.unitize-padding(10, 0, 10, 0);
}
}
}
.secondary-dark {
background-color: @brand-secondary-dark;
Häufig benötigt man auch Hinweisboxen, um dem Nutzer beispielsweise zu signali-
.white-font;
sieren, dass eine Operation (nicht) erfolgreich durchgeführt werden konnte:
}
<div class="content--title">Hinweisboxen</div>
Listing 4.19 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/less/
<p class="alert is--success">Erfolgsmeldung</p>
_modules/examplebox.less«
<p class="alert is--info">Hinweis</p>
<p class="alert is--warning">Warnung</p>
In dieser Style-Definition wird zunächst ein Mixin definiert, das die Schrift in Weiß
<p class="alert is--error">Fehler</p>
und fett setzt. Die vier Selektoren primary, primary-light, secondary sowie secondary-
dark nutzen jeweils dieses Mixin und setzen die Hintergrundfarbe der entsprechen- Hier nutzen Sie jeweils die CSS-Klasse alert zusammen mit einem der Styles is--suc-
den Theme-Variablen. Im Ergebnis sind nun vier Boxen mit Hintergrundfarben zu cess, is--info, is--warning oder is—error. In Kombination mit Icons lässt sich die
sehen, die den in der Theme-Konfiguration hinterlegten Standardfarben entsprechen. Hinweismeldung dabei noch deutlich ansprechender gestalten:
Probieren Sie es einfach aus: Wenn Sie die Standardfarben in der Konfiguration
<div class="content--title">Hinweisboxen mit Icons</div>
ändern und das Theme neu kompilieren, ändern sich auch die Farben im Beispiel. <div class="alert is--success is--rounded">
Das zweite Beispiel nutzt einige Standard-Styles von Shopware, um verschiedene <div class="alert--icon">
Knöpfe zu erzeugen: <i class="icon--element icon--check"></i>
</div>
<div class="content--title">Buttons</div>
<div class="alert--content">
<button class="btn is--primary is--large">Primär-Button</button>
Erfolgsmeldung mit Icon
<button class="btn is--secondary is--large">Sekundär-Button</button>
</div>
<button class="btn is--large">normaler Button</button>
</div>
<div class="alert is--warning is--rounded">
Der Primärknopf ist besonders für kritische Operationen wie »In den Warenkorb
<div class="alert--icon">
legen« oder »Jetzt kaufen« gedacht, der Sekundärknopf könnte für nachgeordnete
<i class="icon--element icon--warning"></i>
Operationen genutzt werden, der Standardknopf für einfache Bedienelemente wie
</div>
»Neue Lieferadresse anlegen«. Auch verschiedene Icons können in Shopware leicht
<div class="alert--content">
eingebunden werden:

114 115
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

Warnmeldung mit Icon Verstecken und Anzeigen von Informationen bis hin zur Abbildung interaktiver Pro-
</div> duktdesigner ist dabei vieles möglich.
</div>
Für einen ersten Test geben Sie im Folgenden zunächst nur die Meldung »Hallo
Listing 4.20 Ansprechendere Hinweismeldung mit Icon Welt« aus:
4
alert("Hallo Welt");
Hinweisboxen Listing 4.22 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/js/
Shopware stellt für Hinweisboxen fertige Smarty-Komponenten bereit, die bei Be- my-example.js«
darf eingebunden werden können (vgl. dazu Kapitel 14, »Arbeiten mit Formularen«).
Diese muss nun noch in der Theme.php des Templates registriert werden:
Sehr beliebt sind darüber hinaus auch die sogenannten Badges: An Produktboxen
namespace Shopware\Themes\LoremIpsum;
lenken sie die Aufmerksamkeit des Besuchers auf Rabattaktionen oder andere wich-
tige Informationen: use Shopware\Components\Form as Form;
<div class="content--title">Badges</div>
<div><span class="badge is--primary">1</span>Badge 1</div> class Theme extends \Shopware\Components\Theme
<div><span class="badge is--secondary">2</span>Badge 2</div> {
<div><span class="badge is--minimal">3</span>Badge 3</div> protected $extend = 'Responsive';

Auch die sogenannten Ribbons sind für Hinweise und Markierungen an Produkten protected $name = "LoremIpsum";
gut geeignet: protected $description = "LoremIpsum";
protected $author = "LoremIpsum";
<div class="content--title">Ribbons</div> protected $license = "LoremIpsum";
<div class="ribbon-box">
<div class="ribbon is--left"> protected $javascript = array(
<p class="ribbon--content orange">Highlight!</p> 'src/js/my-example.js'
</div> );
<div class="ribbon is--right"> }
<p class="ribbon--content green">Highlight!</p>
Listing 4.23 Die Datei »themes/Frontend/LoremIpsum/Theme.php«
</div>
</div>
Wie zuvor schon bei der Eigenschaft $css wird in der Eigenschaft $javascript eine
Listing 4.21 Hinweisbänder (Ribbons) in Shopware Liste von JavaScript-Dateien angegeben, die zum Theme gehören. Wenn Sie den
Grunt-Task nutzen, müssen Sie nach der Registrierung einer neuen JavaScript-Datei
Insgesamt zeigen die Beispiele, dass auch im Frontend das Rad nicht immer neu unter Umständen die Konfiguration neu exportieren und den Task neu starten:
erfunden werden muss: Durch vordefinierte Less-Komponenten und Variablen
cd /shopverzeichnis/
ebenso wie durch viele nützliche CSS-Klassen können Sie schnell Ergänzungen am
php ./bin/console sw:theme:dump:configuration
Template vornehmen, die sich nahtlos in das Gesamtbild des Shops einfügen.
cd theme
grunt
4.2.2 JavaScript-Plugins
Wenn Sie nun eine Seite im Shop aufrufen, erscheint zunächst ein Fenster mit der
Neben Templates und Styles ist JavaScript das dritte große Werkzeug im Shopware- Meldung »Hallo Welt«. In der Praxis sollten Sie allerdings auf diese Art der Erweite-
Frontend. Mit JavaScript als Programmiersprache können Sie das Verhalten des Front- rung verzichten: Shopware bietet ein eigenes JavaScript-Plugin-System, das Ihnen
ends umfangreich programmieren: Vom einfachen Nachladen von Daten über das hilft, wartbare und übersichtliche JavaScript-Erweiterungen zu schreiben.

116 117
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

Im folgenden Beispiel erweitern Sie die Produktdetailseite so, dass der Nutzer beim wählt und dann darauf das Plugin (hier: loremExample) ausgeführt. Jedes Plugin kennt
Klick auf Artikel unter »Ähnliche Artikel« oder »Kunden haben sich ebenfalls angese- das Element, auf dem es ausgeführt wurde, und kann entsprechend auf ihm arbeiten.
hen« nicht zu der jeweiligen Seite weitergeleitet wird, sondern den entsprechenden In diesem Fall habe ich als Selektor .product--box.box--slider ausgewählt, da dies
Artikel in einer kleinen Modalbox sieht. die Klasse der Artikelboxen in den Slidern ist.

;(function ($, window) { Die eigentliche Plugin-Initialisierung sieht auf den ersten Blick komplizierter aus, als 4
'use strict'; sie ist. Bei dem Konstrukt

;(function ($, window) {


$.plugin('loremExample', {
// code
})(jQuery, window);
defaults: {
ordernumber: true handelt es sich um eine sogenannte selbstaufrufende anonyme Funktion. Diese dient
},
letztlich dazu, den Scope des Plugins sauber zu definieren. In der Praxis werden
meist jQuery und window als Parameter an die Funktion übergeben und dort an die
init: function () {
Namen $ sowie window gebunden. In der Funktion wird dann das Plugin initialisiert:
// folgt
}, $.plugin('loremExample', {
// code
registerEvents: function () { });
// folgt
}, In diesem Fall lautet der Name loremExample – dies ist auch der Name, der zur Plugin-
Initialisierung auf dem jQuery-Selektor aufgerufen wird.
onButtonClick: function (event) {
Über die Eigenschaft defaults werden dann Standardwerte des Plugins gepflegt und
// folgt
in der Methode init mit dem Aufruf von me.applyDataAttributes initialisiert:
},
defaults: {
destroy: function () { ordernumber: ""
// folgt },
} init: function () {
}); var me = this;
})(jQuery, window);
me.applyDataAttributes();
$('.product--box.box--slider').loremExample(); me.registerEvents();
},
Listing 4.24 Die Datei »themes/Frontend/LoremIpsum/frontend/_public/src/js/
my-example.js« Listing 4.25 Initialisierung eines Javascript-Plugins

Ganz grob lassen sich bei dem JavaScript-Programm zwei Teile unterscheiden: das Durch den Aufruf von applyDataAttributes liest Shopware die Data-Attribute des
Plugin und der Plugin-Aufruf. DOM-Elements, auf dem das Plugin aufgerufen wurde, und führt diese mit dem
Der Plugin-Aufruf ist in der Regel ein Einzeiler: defaults-Objekt des Plugins zusammen. Dieses Plugin wird ja auf dem Selektor .pro-
duct--box.box--slider aufgerufen. Der sieht im HTML-Dokument so aus:
$('.product--box.box--slider').loremExample();
<div class="product--box box--slider" data-ordernumber="SW10115.3">
Die Plugins werden immer auf bestimmten Elementen aufgerufen. Daher wird im <!-- HTML-Code einer Product-Box -->
ersten Teil mit einem jQuery-Selektor ein bestimmtes Element im Dokument ausge- </div>

118 119
4 Shopware-Templating 4.2 Erweitertes Templating mit JavaScript und Less

Das Attribut data-ordernumber ist ein sogenanntes Data-Attribut. Durch den Aufruf wird. Grundsätzlich sind derartige Event-Registrierungen auch ohne die Helfer-
von applyDataAttributes liest Shopware dieses als ordernumber aus (das Präix data- methode _on möglich: Diese Methode hat aber den Vorteil, dass die Events auch
entfällt also) und führt dieses mit dem defaults-Objekt zusammen. automatisch wieder deregistriert werden, wenn sie nicht mehr benötigt werden.
In Ihrem Plugin steht Ihnen nun immer das Objekt me.opts zur Verfügung, und über Nach Möglichkeit sollten Sie also diese Methode verwenden.
me.opts.ordernumber können Sie die Bestellnummer des Elements auslesen: Für das Die besagte Callback-Methode onButtonClick sieht wie folgt aus: 4
obige Beispiel lautet sie »SW10115.3«.
onButtonClick: function (event) {
Data-Attribute sind eine sehr einfache Möglichkeit, um Daten zwischen dem Tem- var me = this,
plate und JavaScript auszutauschen: Immer wenn Sie also bestimmte Informationen path = csrfConfig.basePath,
in JavaScript benötigen, die letztlich nur im PHP-Stack von Shopware zur Verfügung ordernumber = me.opts.ordernumber,
stehen, haben Sie die Möglichkeit, diese Informationen an das Template zu überge- quickView = '/detail/productQuickView/ordernumber/';
ben und als Data-Attribut auszugeben.
if (!ordernumber) {
var me = this? return
}
Häufig finden Sie in JavaScript-Beispielen diese Zuweisung: var me=this; Hierbei
handelt es sich um eine bewährte Vorgehensweise, um die Geltungsbereiche in Java-
event.preventDefault();
Script sauber zu trennen: Durch die Zuweisung des aktuellen Geltungsbereichs this
zur Variablen me ist es für Sie leichter, verschachtelte Geltungsbereiche sauber zu
$.modal.open(path + quickView + ordernumber, {
trennen, wie folgendes Beispiel zeigt:
mode: 'ajax',
var myClass = function (el) { sizing: 'content'
this.name = "Jan"; });
el.on('click', function() { },
alert(this.name);
Listing 4.26 Callback-Funktion für das »click«-Event
});
};
myClass($("body")) Zunächst werden hier einige Variablen zugewiesen: path enthält den relativen Pfad
des Shops, ordernumber die Bestellnummer aus dem Data-Attribut und quickview die
Die innere anonyme Funktion hat einen eigenen Geltungsbereich this. Anders als
URL zu einer Kurzansicht eines Artikels, wie sie beispielsweise auch im Shopware-
man auf den ersten Blick denken könnte, wird der Name »Jan« niemals ausgegeben –
Warenkorb verwendet wird. Falls die Bestellnummer leer sein sollte, verlassen Sie die
die Geltungsbereiche passen nicht. Durch die explizite Benennung des Geltungs-
Methode mit einem return. Andernfalls wird durch den Aufruf von preventDefault()
bereichs können Sie derartige Überraschungen vermeiden.
verhindert, dass die Aktion ausgeführt wird, die eigentlich bei einem Klick stattfinden
soll. In unserem Fall würde der Browser den Benutzer eigentlich zu der entsprechen-
Die Methode registerEvents ist für die Registrierung von Events zuständig:
den Artikeldetailseite führen. Dies wird nun unterbunden. Stattdessen wird durch
registerEvents: function () { $.modal.open eine Modalbox geöffnet. Die Modalbox zeigt den Inhalt einer hinterleg-
var me = this; ten URL als Inhalt an. Die URL wird in diesem Fall aus path + quickView + ordernumber
me._on(me.$el, 'click', $.proxy(me.onButtonClick, me)); zusammengesetzt. Im Ergebnis wird dann beispielsweise die URL /shopware/detail/
}, productQuickView/ordernumber/SW10115.3 aufgerufen.

Hier wird die Helfermethode _on verwendet. Sie registriert auf einem Element (hier: destroy: function () {
me.$el) ein Event (hier: click) und ruft bei Auftreten des Events den Callback auf var me = this;
(hier me.onButtonClick). Der Callback wird hier aber nicht direkt angegeben, sondern me.off(me.eventSuffix);
in der Form $.proxy(me.onButtonClick, me). Durch die Proxy-Methode wird sicher- me._destroy();
}
gestellt, dass unser Callback immer im Geltungsbereich unseres Plugins ausgeführt

120 121
4 Shopware-Templating

Der Destruktor destroy wird aufgerufen, wenn das Plugin beendet wird – das ge-
schieht beispielsweise in Responsive-Templates, wenn der Viewport sich auf eine
Größe ändert, die vom Plugin nicht unterstützt wird. Das Implementieren der Me-
thode destroy ist zwingend notwendig, hier können Sie aufräumen und beispiels-
weise Events deregistrieren. Durch das Verwenden der Methode _on geschieht dies in
diesem Beispiel automatisch.

Abbildung 4.13 Statt eines Seitenwechsels öffnet sich eine Modalbox.

Das Ergebnis ist in Abbildung 4.13 zu sehen: Nach einem Klick auf einen Artikel unter
»Zubehör«, »Ähnliche Artikel« oder »Kunden haben sich ebenfalls angesehen« ver-
lässt der Kunde nicht mehr – wie im Shopware-Standard – die Seite. Stattdessen öff-
net sich eine Modalbox und zeigt den entsprechenden Artikel in einer Kurzansicht
an. Erst wenn der Kunde nun erneut auf den Artikel klickt, wechselt er die Seite. Klickt
er neben die Modalbox oder auf das kleine Kreuz, schließt sich die Box und der
Kunde kann auf der ursprünglichen Seite weitersurfen.

URLs richtig benutzen


Grundsätzlich empfiehlt es sich, auch veränderliche URLs, die beispielsweise für Ajax-
Requests benötigt werden, über Data-Attribute an den betreffenden Elementen zu
hinterlegen. Im Template können Sie dazu das Smarty-Tag {url} benutzen. Über die
applyDataAttributes lassen sich diese URLs dann leicht verarbeiten. Das obige Bei-
spiel wurde dahingehend etwas vereinfacht (siehe dazu auch Abschnitt 4.3.2).

122
Auf einen Blick

Auf einen Blick

1 Einleitung ...................................................................................................... 17

2 Mit Shopware loslegen ............................................................................... 21

3 Schnelleinstieg: Shopware kennenlernen ............................................... 35

4 Shopware-Templating ................................................................................ 87

5 Einstieg in die Plugin-Entwicklung ........................................................... 137

6 Arbeiten mit der Datenbank ...................................................................... 171

7 Eigene Einkaufswelten-Elemente ............................................................. 197

8 Storefront-Komponenten ........................................................................... 217

9 Das Shopware-Attributsystem .................................................................. 251

10 Backend-Module schreiben ........................................................................ 257

11 Shopware-API ............................................................................................... 289

12 Shopware-Kommandos .............................................................................. 325

13 Elasticsearch einsetzen ............................................................................... 333

14 Arbeiten mit Formularen ............................................................................ 343

15 Plugin-Entwicklung im Alltag .................................................................... 361

16 Shopware hinter den Kulissen ................................................................... 373

17 An Shopware mitarbeiten .......................................................................... 393

18 Fehler analysieren und verstehen ............................................................. 405

19 Automatisierte Tests ................................................................................... 413


Inhalt

Inhalt
Vorwort .................................................................................................................................................. 11

1 Einleitung 17

2 Mit Shopware loslegen 21

2.1 Der Server ............................................................................................................................... 21

2.2 Shopware installieren ....................................................................................................... 27

2.3 Wie richte ich mir eine Arbeitsumgebung ein? ..................................................... 30

3 Schnelleinstieg: Shopware kennenlernen 35

3.1 Firstrun-Wizard .................................................................................................................... 35

3.2 Die Grundkonfiguration ................................................................................................... 37

3.3 Artikel ....................................................................................................................................... 49

3.4 Marketing ............................................................................................................................... 64

3.5 Kunden ..................................................................................................................................... 74

3.6 Freitextfelder ........................................................................................................................ 78

3.7 Das Frontend ......................................................................................................................... 80

4 Shopware-Templating 87

4.1 Einstieg in Templates und Themes ............................................................................. 88

4.2 Erweitertes Templating mit JavaScript und Less .................................................. 108

4.3 Responsive-Templates ...................................................................................................... 123

5
Inhalt Inhalt

5 Einstieg in die Plugin-Entwicklung 137 10 Backend-Module schreiben 257

5.1 Das erste Plugin ................................................................................................................... 137 10.1 Schnelle Ergebnisse mit den Backend-Komponenten erzielen ...................... 257

5.2 Das Shopware-Event-System ......................................................................................... 146 10.2 Assoziationen nutzen ........................................................................................................ 267

10.3 Bestehende Module erweitern ..................................................................................... 275

10.4 Eigene Widgets programmieren .................................................................................. 281


6 Arbeiten mit der Datenbank 171

6.1 Das PDO-Objekt in Shopware ........................................................................................ 171


11 Shopware-API 289
6.2 Doctrine ORM ........................................................................................................................ 173

6.3 Eigene Models ....................................................................................................................... 178 11.1 REST-Schnittstelle einrichten und nutzen ............................................................... 289

6.4 Repositorys und der ORM-Querybuilder .................................................................. 191 11.2 Die API lokal verwenden .................................................................................................. 304

11.3 Eigene Endpunkte schreiben .......................................................................................... 305

11.4 Stapelverarbeitung für die eigene API ...................................................................... 321


7 Eigene Einkaufswelten-Elemente 197

7.1 Ein Einkaufswelten-Element erstellen ...................................................................... 197


12 Shopware-Kommandos 325
7.2 Ein eigenes Konfigurationsformular erstellen ....................................................... 207

7.3 Elemente für Designer konfigurieren ........................................................................ 212 12.1 Standardkommandos nutzen ........................................................................................ 325

12.2 Kommandos als Cronjobs nutzen ................................................................................ 327

12.3 Eigene Kommandos schreiben ...................................................................................... 328


8 Storefront-Komponenten 217

8.1 Generelle Einführung ........................................................................................................ 217


13 Elasticsearch einsetzen 333
8.2 Austauschbarkeit und Erweiterbarkeit ..................................................................... 224
8.3 Eigener Controller mit eigenem, individuellem Listing ..................................... 227 13.1 Einrichtung vornehmen ................................................................................................... 333

8.4 Einschränken mit eigenen Bedingungen ................................................................. 231 13.2 Kompatible Plugins schreiben ....................................................................................... 335

8.5 Eigene Filter und Facetten ............................................................................................... 235

8.6 Artikel um eigene Informationen erweitern .......................................................... 241


14 Arbeiten mit Formularen 343

9 Das Shopware-Attributsystem 251

6 7
Inhalt Inhalt

15 Plugin-Entwicklung im Alltag 361 19 Automatisierte Tests 413

15.1 Plugin-Metadaten in der plugin.xml .......................................................................... 361

15.2 Plugins konfigurieren ........................................................................................................ 362

15.3 Arbeiten mit Übersetzungen ......................................................................................... 364


A Glossar 421

15.4 Shopware CLI-Tools ............................................................................................................ 366

15.5 Allgemeine Tipps ................................................................................................................. 369


B Übersicht über IDEs, Events, Konsolen-
kommandos und die Datenbankstruktur 423
16 Shopware hinter den Kulissen 373
B.1 PHP-IDEs .................................................................................................................................. 423
16.1 Arbeiten mit dem Cache .................................................................................................. 373 B.2 Übersicht über wichtige Shopware-Events ............................................................. 424
16.2 Arbeiten mit der SEO-Engine ......................................................................................... 381 B.3 Übersicht über die Datenbank ...................................................................................... 430
16.3 Shopware-Bootstrapping ................................................................................................ 386 B.4 Übersicht über global verfügbare Styles .................................................................. 447
16.4 Geschwindigkeit und Skalierbarkeit verbessern .................................................. 389 B.5 Warenkorbmodi .................................................................................................................. 448

B.6 API-spezifische Exceptions .............................................................................................. 448

B.7 Übersicht über die Shopware-Kommandos ............................................................ 449


17 An Shopware mitarbeiten 393
B.8 Übersicht über die Devicegrößen ................................................................................ 452

17.1 Shopware als FOSS-Projekt ............................................................................................. 393

17.2 Shopware auf GitHub ........................................................................................................ 393


Index ........................................................................................................................................................ 453
17.3 Übersetzungen auf Crowdin pflegen ......................................................................... 394

17.4 Tickets einstellen ................................................................................................................. 396

17.5 Plugins verkaufen ............................................................................................................... 398

18 Fehler analysieren und verstehen 405

18.1 Fehlermeldungen ausgeben ........................................................................................... 405

18.2 Den Shopware-Logger benutzen ................................................................................. 406

18.3 Profiler ...................................................................................................................................... 406

18.4 ExtJS debuggen .................................................................................................................... 407

18.5 Ajax-Requests analysieren .............................................................................................. 408

18.6 Effektiver analysieren mit Xdebug ............................................................................. 409

8 9
Index

Index

A Artikel (Forts.)
Beschreibung ................................................ 55, 83
Abhängigkeiten ....................................................... 30 Bewertung ............................................................. 83
ACL ................................................................................ 38 Bezeichnung .................................................. 55, 56
Administrator .................................................... 37, 38 Bild ............................................................. 56, 83, 95
AGB ............................................................................... 81 Bonus ...................................................................... 83
Aktualisierung .......................................................... 18 Bundle ..................................................................... 83
Aktualisierungsstrategie ...................................... 48 Cross-Selling ......................................................... 59
ant ................................................................................. 29 Eigenschaft .................................................... 55, 83
Apache ......................................................................... 22 Freitextfeld ........................................................... 80
APCu 씮 PHP Gewicht .................................................................. 95
API ................................................................................. 37 Grundpreisberechnung ................................... 56
ACL ........................................................................ 312 Hersteller ................................................. 55, 56, 59
Artikel ................................................................... 298 Individualisierung ............................................. 59
Aufbereitung der Daten ................................ 317 Kategorie ........................................................ 55, 56
Batch-Modus ........................................... 300, 321 Lagerbestand ....................................................... 58
Beispiel-Client ................................................... 292 Lieferzeit ................................................................ 83
Berechtigung ..................................................... 312 Mindestbestellmenge ....................................... 56
Bestellstatus ...................................................... 296 Modus .................................................................. 158
Controller ........................................................... 305 Nachfolgeartikel .............................................. 159
create .......................................................... 311, 314 Name ....................................................................... 83
curl ........................................................................ 293 Nummer ................................................................. 55
delete .......................................................... 311, 316 Pflichtfelder .......................................................... 56
Eigenen Endpunkt erstellen ........................ 305 Preis .................................................... 55, 56, 58, 83
Einrichtung ........................................................ 290 Reiter ....................................................................... 83
Fehlermeldung ................................................. 312 Stammdaten ........................................................ 56
filtern .................................................................... 296 Steuersatz .............................................................. 55
getIdByData ...................................................... 323 Typen ................................................................... 158
getList ......................................................... 311, 313 Übersetzung ......................................................... 55
getOne ................................................................. 311 Variante ............................................ 56, 57, 58, 83
Kunden ................................................................ 295 Verfügbarkeit ...................................................... 56
lokale Verwendung ......................................... 304 Vergleich ................................................................ 82
Nutzer .................................................................. 290 Vorauswahl .......................................................... 58
paginieren .......................................................... 296 Warenkorb ............................................................ 83
Passwort ............................................................. 290 Zubehör ........................................................... 59, 83
Ressource .................................................. 305, 310 Artikeldetailseite ........................................... 49, 160
Ressourcenübersicht ...................................... 289 Reiter .................................................................... 150
REST ............................................................... 37, 289 Artikel-Übersicht .................................................... 53
Stapelverarbeitung ............................... 300, 321 Bearbeitung .......................................................... 54
update ........................................................ 311, 315 Filterung ................................................................ 54
Varianten ............................................................ 302 individuelle Filter ............................................... 54
Zugang ................................................................. 290 Kategoriebaum ................................................... 54
Arbeitsumgebung ................................................... 30 Kategorien ............................................................ 54
Artikel .......................................................................... 56 Spalten ................................................................... 54
Ähnliche Artikel ........................................... 59, 83 Split-View .............................................................. 55
anlegen ................................................................... 55 Variante ................................................................. 55
Artikeldetailseite ......................................... 58, 83

453
Index Index

Attribut ................................................................. 80, 96 Bestellverwaltung (Forts.) C Core (Forts.)


CrudService ........................................................ 253 Filter ........................................................................ 75 Klasse ................................................................... 164
Datentyp ............................................................. 253 Gutschein .............................................................. 78 Cache ..................................................................... 40, 45 sGetArticleById ....................................... 159, 160
Definition ........................................................... 251 Kommentar .......................................................... 78 aufwärmen ........................................................ 327 sGetBasket ......................................................... 157
erzeugen .............................................................. 252 Kommentar (intern) .......................................... 77 HTTP ........................................................................ 46 Cronjob 씮 Konsolenkommando
In Backend anzeigen ...................................... 253 Kommunikation .......................................... 76, 77 Invalidierung .................................................... 140 Crowdin ................................................................... 394
übersetzbar ........................................................ 253 Kundenansicht .................................................... 76 leeren ............................................... 45, 46, 72, 145 CRUD ......................................................................... 260
Attribut 씮 Freitextfeld Kundengruppe .................................................... 75 Plugin ................................................................... 140 CSS ........ 87, 90, 92, 101, 104, 105, 106, 108, 124
Lieferadresse ........................................................ 76 Speicherplatz ........................................................ 45 Badge ................................................................... 116
Lieferschein ................................................... 76, 77 Template ................................................................ 93 block-group .............................................. 345, 349
B
Massenverarbeitung ......................................... 76 Theme .................................................................. 106 Datei ..................................................................... 104
Backend ................................................................ 19, 37 Menge ..................................................................... 77 über Konsole leeren ........................................ 327 display ................................................................. 104
Backend-Komponenten 씮 Backend-Modul PDF ........................................................................... 76 wärmen ............................................................... 327 float ...................................................................... 130
Backend-Modul ........................................... 178, 257 Position hinzufügen ......................................... 77 Cache 씮 Theme Hinweisbox ........................................................ 116
Ajax-Requests deuten .................................... 274 Positionsstatus ................................................... 78 CLI-Tools .................................................................. 366 Icon ....................................................................... 115
Alternative ......................................................... 275 Preis ......................................................................... 77 Beispieldaten generieren .............................. 367 Knopf ................................................................... 114
app.js .................................................................... 260 Rechnung .............................................................. 76 GitHub ................................................................. 366 Margin ................................................................. 130
Assoziation ..................................... 267, 271, 274 Rechnungsadresse ............................................. 76 herunterladen ................................................... 366 Media-Query ............................................ 125, 131
Backend-Controller ......................................... 259 Shop ......................................................................... 75 Plugin generieren ............................................ 368 nth-child ............................................................. 349
Basiscontroller .................................................. 260 Stapelverarbeitung .................................... 76, 78 Plugin installieren ........................................... 367 Ordner ................................................................. 104
configure ............................................................. 264 Status ........................................................ 75, 76, 78 Repository .......................................................... 367 Ribbon ................................................................. 116
Datenfelder ........................................................ 266 Übersicht ........................................................ 75, 76 Shopware installieren .................................... 367 Seitenverhältnis (Bild) ................................... 207
Detailfenster ............................................ 264, 267 Versandart ............................................................ 75 Codegenerator ....................................................... 368 Selektor ............................................................... 104
Dokumentation ............................................... 262 Versandkosten .................................................... 76 Community Store ................... 19, 36, 88, 92, 138, Standardklassen .............................................. 105
erstellen ............................................................... 258 Versandoption .................................................... 76 139, 140, 362, 398 CSV ................................................................................ 48
erweitern ............................................................. 275 Warenwirtschaft ................................................ 78 Composer ................................................................... 30
Hauptfenster ..................................................... 262 Zahlart .................................................................... 75 config.php ............................................................... 144
Zahlstatus ............................................................. 75 D
Klassendefinition ............................................ 261 Consulting ................................................................. 18
ManyToOne ....................................................... 269 Zahlungsoption .................................................. 76 Controller 93, 141, 142, 144, 148, 151, 156, 162 Darstellung 씮 Templating
Zahlungsplugin ................................................... 78
Model ................................................................... 265 Action ................................................ 141, 142, 146 Datenbank .............................................................. 171
Zahlungsstatus ................................................... 78
Nummernfeld .................................................... 266 aufrufen .............................................................. 144 Alias ...................................................................... 173
Betriebssystem ........................................................ 21
OneToMany ............................................. 269, 270 Backend-Controller ......................................... 259 createQueryBuilder ........................................ 173
BitNami ....................................................................... 23
Query erweitern ............................................... 273 erzeugen .............................................................. 143 PDO ....................................................................... 171
Block ....................................... 98, 100, 102, 125, 150
Schematische Übersicht ............................... 267 Fehlermeldung ................................................. 144 prepared statements ..................................... 172
append ................................................................ 100
Textfeld ................................................................ 266 Klasse ................................................................... 142 Query ................................................................... 172
ausblenden ........................................................ 125
Backend-Modul 씮 ExtJS Modul ................................................................... 142 Query modifizieren ........................................ 173
erweitern ............................................................ 150
Backendwidget ...................................................... 281 Name .................................................................... 142 SQL injection ..................................................... 172
finden ...................................................................... 98
Textbaustein ..................................................... 283 Parameter ........................................................... 142 Statement ........................................................... 172
prepend ............................................................... 100
Banner ......................................................................... 82 Pfad ....................................................................... 143 Tabelle ................................................................. 173
überschreiben ................................... 96, 100, 125
Benutzerkonto ......................................................... 86 Plugin ................................................................... 143 Decorator Pattern ....................................... 241, 250
Blog .............................................................. 38, 50, 124
Benutzerkonto-Download .................................. 86 registrieren ......................................................... 143 Demodaten ............................................................... 36
Bootstrapping ....................................................... 386
Bestellverwaltung ................................................... 75 Route ................................................. 141, 142, 144 Dependency Injection Container 씮 DIC
Applikationslogik ........................................... 388
Adresse .................................................................... 76 Standardwert .................................................... 141 Deployment .............................................................. 35
boot ...................................................................... 387
Artikel ...................................................................... 75 ControllerDispatcher ..................................... 387 Template ............................................................. 144 DIC ............................. 145, 165, 166, 167, 172, 176
bearbeiten ............................................................. 76 DIC ........................................................................ 387 URL .............................................................. 141, 144 Abhängigkeit .................................................... 166
Bestellhistorie ............................................... 76, 78 Dispatch-Loop ......................................... 387, 388 Verzeichnis ......................................................... 142 argument ........................................................... 166
Bestellkommentar ............................................. 77 Front Controller ............................................... 387 Controller 씮 Modul Config-Service ................................................... 364
Bestellpositionen ......................................... 76, 77 Kernel ................................................................... 386 Core console.command (Tag) ............................... 331
Bestellstatus .................................................. 75, 78 Routing ............................................................... 387 checkIfArticleIsInBasket ............................... 164 decorates ............................................................ 248
Details ..................................................................... 76 Template ............................................................. 388 getArticleForAddArticle ................................ 164 Decorator Pattern .................................. 243, 248
Dokumente .................................................... 76, 78 Überblick ............................................................ 386 getPriceForUpdateArticle ............................ 164 Entity-Manager ............................................... 188

454 455
Index Index

DIC (Forts.) Doctrine (Forts.) Eigenschaften (Forts.) Einkaufswelten (Forts.)


form.type (Tag) ................................................. 355 ManyToMany ................................................... 181 Filterbarkeit .......................................................... 61 Grid .......................................................................... 66
Konsolenkommando ..................................... 331 ManyToOne ................................... 181, 182, 186 Gruppe ............................................................. 59, 60 Iframe ..................................................................... 64
Konstruktor-Parameter ................................ 166 mappedBy ................................................. 182, 186 Information .......................................................... 59 Individualanpassung ....................................... 68
Service ............................................... 145, 165, 166 Metainformationen ....................................... 188 Kategorisierung .................................................. 59 Inhaltsseiten ........................................................ 64
services.xml ............................................. 165, 202 Model .......... 171, 173, 174, 185, 186, 187, 188 Option .............................................................. 59, 60 Kategorie-Listing ............................................... 64
shopware.event_subscriber ........................ 166 Model (eigenes) ................................................ 178 Produktgruppen ................................................. 59 Kategorien zuweisen ........................................ 65
tag ......................................................................... 166 Model (Grundstruktur) ................................. 178 Set ............................................................................. 59 Landingpage ........................................................ 65
XML ............................................................. 166, 169 Model (Namespace) ....................................... 179 Variantenfilter ..................................................... 61 Layout ..................................................................... 66
digitale Güter 씮 Benutzerkonto-Download Model laden ...................................................... 176 Einkaufswelt ............................................... 81, 82, 92 Medienverwaltung ............................................ 66
Doctrine ................................................................... 171 Model Vor- und Nachteile ........................... 196 Alias ...................................................................... 214 Product-Streams ......................................... 65, 67
@Column ........................................................... 175 ModelEntity ....................................................... 179 allowBlank ......................................................... 201 suchen .................................................................... 65
@Entity ............................................................... 191 ModelRepository ............................................. 193 Basiskomponente ............................................ 214 Text .......................................................................... 64
@GeneratedValue .......................................... 175 OneToMany ................................... 181, 182, 190 Component ........................................................ 199 Themenwelten ..................................................... 64
@Id ........................................................................ 175 ORM ...................... 171, 173, 174, 177, 178, 196 createEmotionComponent .......................... 198 Video ....................................................................... 64
@Table ................................................................. 174 ORM-Querybuilder ......................................... 193 createPreview ................................................... 214 vollflächig ............................................................. 66
aktualisieren ..................................................... 178 orphanRemoval ...................................... 182, 183 Designer ........................................... 200, 202, 212 Vorschau ............................................................... 67
Annotation ..................................... 174, 179, 181 Overhead ............................................................ 196 eigenes Element ............................................... 197 YouTube .......................................................... 66, 67
ArrayCollection ...................................... 183, 184 Paginator ........................................................... 314 eigenes Konfigurationsformular .............. 207 Zeitsteuerung ...................................................... 65
Assoziation ................. 177, 179, 180, 181, 182, persist ...................................... 178, 183, 190, 201 Element ................................................................ 197 Elasticsearch .......................................... 53, 171, 333
184, 185, 186, 193 private ................................................................. 175 Elementgröße .................................................... 215 ConditionHandler ........................................... 335
Auto-Increment ................................................ 175 protected ............................................................ 175 erweitern ............................................................. 197 Download ........................................................... 333
cascade ............................................. 182, 183, 190 Query .......................................................... 176, 194 Felder .................................................................... 201 Entwicklungssystem ...................................... 334
createSchema ......................................... 189, 190 Querybuilder ............................................ 171, 193 Konfiguration auslesen ................................ 206 Event .................................................................... 336
Datensatz aktualisieren ............................... 177 referencedColumnName ..................... 181, 186 Konfigurationsformular .............................. 211 FacetHandler .................................................... 335
Datensatz erstellen ......................................... 177 Relation ............................................................... 188 Modifizieren (Event) ....................................... 205 Facette implementieren ............................... 338
Datensatz lesen ...................................... 177, 178 remove ................................................................ 178 Pfadkonvention ............................................... 205 Index aufbauen ............................................... 334
Datensatz löschen ........................ 177, 178, 183 Repository .............................. 156, 176, 191, 194 Template-Erweiterung .................................. 212 installieren ......................................................... 333
Datenstruktur ................................................... 187 Repository hooken ......................................... 193 Textffeld .............................................................. 201 kompatible Plugins schreiben ................... 335
DateTime ............................................................ 185 Repository Namespace ................................. 193 Transparenz ...................................................... 214 konfigurieren .................................................... 333
DBAL-Connection ............................................ 196 repositoryClass ................................................ 191 Vorschaubild ..................................................... 212 number_of_replicas ...................................... 334
DBAL-Querybuilder ........................................ 193 SchemaTool ....................................................... 188 Werkzeugleiste ................................................. 213 Produktdaten modifizieren ........................ 339
Dokumentation ............................................... 178 Spalte ................................................................... 180 xtype ..................................................................... 208 Replica ................................................................. 334
dropSchema ....................................................... 190 speichern ............................................................ 178 Einkaufswelten synchronisieren ...................................... 335, 339
eigenes Repository .......................................... 191 Tabelle ........................................................ 181, 187 404-Seiten ............................................................. 64 E-Mail ........................................................................... 85
Entity-Manager .......... 176, 178, 188, 191, 194 Tabelle erzeugen ............................................. 189 aktivieren ............................................................... 65 E-Mail-Vorlagen ....................................................... 37
find .............................................................. 191, 193 Tabelle löschen ................................................ 190 an anderen Stellen einbinden ........................ 64 Empfehungsmarketing ........................................ 48
findAll ......................................................... 191, 193 targetEntity ....................................................... 182 Anzeige-Einstellungen ...................................... 65 Endgerät .................................................................. 123
findOneBy ........................................ 177, 191, 193 type (Spalte) ...................................................... 175 Artikel-Slider ......................................................... 66 Entwicklerkonsole ........................................ 99, 162
flush ................................................... 178, 190, 201 updateSchema ........................................ 188, 190 Artikelslider .......................................................... 64 Entwicklungsumgebung ..................................... 22
getArrayResult ................................................. 195 Vereinfachung .................................................. 177 auf anderen Seiten einbinden ....................... 68 Erweiterungssystem 씮 Plugin
getClassMetadata ........................................... 188 Verzeichnis ........................................................ 174 Banner ............................................................. 64, 66 ESD 씮 Benutzerkonto-Download
getRepository .......................................... 176, 191 Blog .......................................................................... 64 Event ...................................................... 143, 146, 164
getResult ............................................................. 195 E Bühne ....................................................... 65, 66, 67 Application ............................................... 151, 156
Installationszeit ............................................... 187 Designer ................................................................. 65 Cache invalidieren .......................................... 379
Join ........................................................................ 193 Eigene Felder 씮 Freitextfeld Devicegröße .......................................................... 65 Callback ........................ 153, 155, 161, 162, 165
JoinColumn .............................................. 181, 186 Eigene Seite 씮 Controller Direktlink ............................................................... 66 collect ................................................................... 152
Klasse ................................................................... 174 Eigenschaften Element ausblenden .......................................... 66 Controller registrieren .................................. 146
Kommentar ....................................................... 174 Artikel zuweisen ................................................. 60 Element konfigurieren ..................................... 66 Definition .................................................. 153, 155
Konstruktor ....................................................... 183 Artikeldetailseite ................................................ 61 Element löschen .................................................. 66 Dispatcher .......................................................... 146
Lifecycle Event .................................................. 378 Filter ........................................................................ 59 Elemente ................................................................ 66 DispatchLoopStartup .................................... 306

456 457
Index Index

Event (Forts.) Fehleranalyse ........................................................ 405 Freitextfeld (Forts.) Gutschein (Forts.)


Einkaufswelt modifizieren ........................... 205 Ajax ...................................................................... 409 speichern ................................................................ 80 Rabatttyp .............................................................. 70
Einstiegspunkt .................................................. 146 Datenbank Query ........................................... 406 Supporttext ........................................................... 79 Shop ......................................................................... 70
Elasticsearch Handler registrieren ........... 336 Event .................................................................... 407 Übersetzung .................................................. 79, 95 Steuer ...................................................................... 70
Enlight_Event_EventArgs ............................ 148 ExtJS ...................................................................... 407 Variante ................................................................. 80 Versandkostenfreiheit ..................................... 70
Ereignis ................................................................ 146 Fehlerausgabe aktivieren ............................ 405 Versand .................................................................. 80 Wert ......................................................................... 70
Event registrieren ............................................ 143 Fehlermeldung anzeigen ............................. 406 Warenwirtschaft ................................................. 80
filter ............................................................. 151, 154 Logging ............................................................... 406 Frontend ...................................... 19, 80, 91, 97, 124 H
finden ................................................................... 162 Profiler ................................................................. 406 FTP .......................................................................... 27, 28
getReturn ............................................................ 156 Xdebug ................................................................ 409 Fußzeile 씮 Footer Hauptbereich ........................................................... 81
getSubject ........................................................... 153 FileZilla ........................................................................ 26 Hauptshop ................................................................. 40
getSubscribedEvents ................... 143, 146, 167 Filter ........................................................ 48, 51, 82, 83 Header ......................................................................... 81
G
Global ................................................................... 146 Firstrun-Wizard ................................................ 35, 36 Hook .......................................................................... 160
Hook ..................................................................... 156 Footer .......................................................................... 81 Gestaltung 씮 Templating after .......................................... 156, 157, 159, 164
Kontextobjekt ......................................... 153, 155 Formular .......................................................... 90, 343 Gewährleistung ....................................................... 18 Arten .................................................................... 156
Listener ................................................................ 162 Constraint .......................................................... 358 GIT ........................................................... 24, 27, 28, 29 before ................................................ 156, 159, 164
Name .................................................................... 153 CSRF ...................................................................... 358 GitHub .......................................................... 18, 29, 61 Callback .............................................................. 158
notify .................................................................... 151 Fehlermeldung ................................................. 358 Grundeinstellungen .............................................. 40 Doppelpunkt ..................................................... 157
notifyUntil ....................................... 151, 152, 164 FormBuilder ...................................................... 358 Grundpreisberechnung 씮 Artikel Empfehlung ....................................................... 160
Position ..................................................... 161, 162 FormFactory ............................................ 354, 358 Grunt ............................................ 107, 109, 117, 127 Event-Name ....................................................... 158
PostDispatch ..... 146, 147, 148, 150, 151, 388 HTTP-Cache ....................................................... 360 Abhängigkeiten ................................................ 107 getReturn ........................................................... 158
PreDispatch ............................................. 146, 388 konfigurieren .................................................... 358 ausführen ........................................................... 107 Klassenname .................................................... 157
Priorisierung ..................................................... 162 maskieren ........................................................... 358 Installation ........................................................ 107 Methode .............................................................. 157
registrieren ............................ 161, 164, 168, 169 ModelTransformer ................................ 358, 360 Konfiguration exportieren .......................... 207 protected ............................................................ 156
Reihenfolge ........................................................ 161 persistieren ............................................... 344, 354 Konsolenkommando ..................................... 107 public ................................................................... 156
Request ................................................................ 148 Regel ..................................................................... 358 npm ....................................................................... 107 registrieren ............................................... 156, 159
Response ............................................................. 148 Spezifikation .................................. 354, 356, 358 Gutschein ............................................................ 68, 84 Registrierung .................................................... 157
Routing ................................................................ 386 submit .................................................................. 354 Abbruchanalyse .................................................. 72 replace ..................................... 156, 160, 161, 164
Subscriber ....................................... 164–169, 202 Tag ........................................................................ 355 absolut .................................................................... 69 Rückgabewert ................................................... 159
SubscriberInterface ......................................... 167 unbekanntes Feld ............................................ 358 Allgemeiner Gutschein ..................................... 69 Rückgabewert anpassen .............................. 156
Typen .................................................................... 146 validieren ........................................ 344, 354, 358 Anzahl ..................................................................... 71 setReturn ............................................................ 159
Übersicht ............................................................. 164 Freitextfeld ........................................... 78, 79, 80, 95 Artikel ...................................................................... 70 Typ ............................................................... 157, 159
View ...................................................................... 148 Anzeigeeinstellungen ....................................... 79 bearbeiten ............................................................. 69 unterstützte Klassen ...................................... 156
extends 씮 Smarty Artikel ..................................................................... 80 Beschränkung ...................................................... 70 Hoster .......................................................................... 22
ExtJS ................................................................. 257, 258 Attribut .................................................................. 80 Beschreibung ........................................................ 69 Hosting ....................................................................... 21
Alias ...................................................................... 200 Beschriftung ......................................................... 79 Bestellnummer .................................................... 70 HTML ............... 87, 92, 93, 98, 101, 108, 119, 124
bulkLoad ............................................................. 261 Cache ....................................................................... 80 Code .......................................................... 69, 70, 71 HTTP-Cache ................................................... 373, 374
Controller ........................................................... 261 Datenbankeinstellungen ................................ 79 duplizieren ............................................................ 69 Ajax ...................................................................... 378
debuggen ............................................................ 407 Entity ....................................................................... 80 Einlösebeschränkung ........................................ 70 aktivieren ........................................................... 373
Ext.define ............................................................ 261 generieren ............................................................. 80 generieren ............................................................. 71 Antwortzeit ....................................................... 376
extend .................................................................. 261 Hilfetext ................................................................. 79 Gültigkeit ............................................................... 70 BAN Request ...................................................... 379
loadPath ............................................................. 261 hinzufügen ............................................................ 79 Hersteller ............................................................... 70 cache_cookies .................................................. 379
Model ................................................................... 261 Konfiguration ...................................................... 79 individuell .............................................. 69, 71, 72 cachebar ............................................................. 377
Override ............................................................... 276 Kundenmodul ..................................................... 80 Kundengruppe ..................................................... 70 Cache-Key ................................................. 376, 379
Store ...................................................................... 261 Position .................................................................. 79 Maximalanzahl .................................................. 70 Controller ........................................ 375, 376, 377
View ...................................................................... 261 Preis ......................................................................... 80 Mindestumsatz ................................................... 70 deaktivieren ...................................................... 380
Product-Streams ................................................ 80 Modus .............................................................. 69, 71 Debug ................................................................... 379
Produktexport ..................................................... 80 Muster ..................................................................... 71 ESI .............................................. 376, 377, 378, 379
F
Programmierung ............................................... 80 Newsletter ............................................................. 72 Invalidierung .............. 373, 374, 376, 377, 378
Facette .................................................................. 53, 61 Spaltenname ........................................................ 79 prozentual ............................................................. 69 Kernel ................................................................... 386
Farbkonfiguration .................................................. 88 Spaltentyp ............................................................. 79 Rabatt ............................................... 68, 69, 70, 72 konfigurieren .................................................... 373

458 459
Index Index

HTTP-Cache (Forts.) K Konsolenkommando (Forts.) Lightweight Backend Modules ....................... 275


Nocache Tag ...................................................... 376 Elasticsearch synchronisieren .................... 335 Linux ............................................................................ 22
Plugin-Kompatiblität .................................... 377 Katalog 씮 Kategorie Farbe ..................................................................... 330 Lizenz
Server .................................................................... 374 Kategorie ...................................................... 49, 81, 82 Formatierung .................................................... 330 AGPL ..................................................................... 393
Skalierbarkeit .................................................... 376 Aktiv ........................................................................ 50 Option .................................................................. 330 kommerziell ...................................................... 393
Tag ......................................................................... 375 Artikelzuordnung ....................................... 51, 52 Plugin aktivieren ............................................. 326 MIT ........................................................................ 393
Trusted Proxy .................................................... 380 Ausschluss ............................................................. 51 Plugin installieren ........................................... 326 Logo ....................................................................... 36, 81
Übersicht ............................................................. 375 Beschreibung ................................................ 51, 52 Plugin konfigurieren ...................................... 326 löschen ........................................................................ 69
Varnish ................................................................ 380 Blog-Kategorie .................................................... 50 Plugins auflisten .............................................. 325
Whitelisting .................................... 375, 376, 377 Einkaufswelten ................................................... 52 registerCommands ......................................... 329
M
Zeit ...................................................... 375, 377, 378 Filter .......................................................... 51, 52, 53 schreiben ............................................................. 328
Inhaltspflege ........................................................ 52 ShopwareCommand ...................................... 330 Mac ............................................................................... 22
I Kategoriebaum ................................................... 50 Textbaustein importieren ............................ 365 MAMP ................................................................... 22, 31
Kundengruppen .................................................. 51 Textbausteine finden ..................................... 365 Mehrsprachfähigkeit ............................................. 41
Infinite Scrolling ...................................................... 90 Link (extern) ......................................................... 51 Theme kompilieren ......................................... 327 Menüeintrag .......................................................... 258
Installation ......................................................... 18, 27 Listing ..................................................................... 58 Thumbnails generieren ................................. 327 Merkliste ............................................................. 81, 82
Installationspaket ................................................... 28 Name ....................................................................... 50 Thumbnails löschen ....................................... 327 Merkzettel .................................................................. 86
Internationalisierung ............................................ 36 Navigation ..................................................... 51, 52 Kundenbereich ........................................................ 81 Mindestbestellwert ................................................ 42
ionCube ....................................................................... 28 Preis ......................................................................... 53 Kundengruppe ................................... 37, 41, 42, 56 Modalbox .................................... 118, 122, 135, 136
Product-Stream .................................................. 51 Kundenkonto ........................................................... 81 Iframe .................................................................. 135
J Produkt-Layout .................................................. 51 Kundenverwaltung ................................................ 74 öffnen .......................................................... 121, 135
SEO ........................................................................... 51 schließen ............................................................. 122
JavaScript ............... 90, 91, 92, 105, 106, 124, 131
Ajax ....................................................................... 122
Sortierung ............................................................. 53 L URL ........................................................................ 121
Text .......................................................................... 52 Modul .............................................................. 141, 142
applyDataAttributes ................... 119, 122, 135 Lagerbestand ............................................................. 95
Topseller ................................................................ 52 api ......................................................................... 141
Callback ............................................................... 133 LAMP ............................................................................ 31
Überschrift ............................................................ 52 backend ............................................................... 141
Data-Attribut .............. 119, 120, 121, 133, 134 Less ................................................ 104, 105, 106, 108
Unterkategorie .................................................... 52 frontend .............................................................. 141
Destruktor .......................................................... 122 @desktopViewportWidth ............................ 129
Keyword ..................................................................... 45 Name .................................................................... 142
DOM ...................................................................... 134 @phoneLandscapeViewportWidth .......... 129
Kommandozeile ................................................... 141 Schema ................................................................ 141
Event ..................................................................... 121 @tabletLandscapeViewportWidth .......... 129
Konfiguration .......................................................... 21 Standardwert .................................................... 141
Geltungsbereich ..................................... 120, 133 @tabletViewportWidth ................................ 129
Domain .................................................................. 40 widgets ................................................................ 141
Gerätegröße ....................................................... 132 all.less ................................................ 109, 126, 204
getCurrentState ............................ 132, 133, 135 IP-Adresse .............................................................. 40 Modular ...................................................................... 18
Datei ..................................................................... 109
getViewportHeight ......................................... 132 Kategoriebaum ................................................... 41 Multishop .................................................................. 40
Devicegröße ....................................................... 109
getViewportWidth .......................................... 132 Pfad .......................................................................... 40 MySQL ........................................................ 17, 28, 171
einbinden ............................................................ 109
Größenänderung ............................................. 132 Preislisten .............................................................. 41
Farbe ..................................................................... 109
Initialisierung ................................................... 119 SSL ............................................................................ 41 N
Import .................................................................. 109
jQuery ................................................................... 118 Standardkundengruppe .................................. 41
kompilieren .................. 108, 109, 110, 111, 327
virtuelle URL ......................................................... 41 Naturalrabatt 씮 Prämien-Artikel
Landscape .......................................................... 133 Komponente ...................................................... 109
Konfigurations-Cache ........................................... 40 Navigation .......................................................... 81, 82
Plugin ................................................ 116, 119, 132 lighten .................................................................. 349
Plugin-Initialisierung .................................... 119 Konsole ....................................................................... 29 Mixin .................... 108, 109, 110, 111, 114, 127
Portrait-Modus ................................................ 133 Konsolenkommando ......................... 36, 325, 327 Module ................................................................. 109 O
Proxy .......................................................... 120, 133 Administratorzugang einrichten ............. 327 modules.less ................................... 109, 113, 126
Ausgabe .............................................................. 330 On-premises ............................................................. 21
registrieren ............................................... 117, 133 rem ........................................................................ 111
benutzen ............................................................. 325 OPcache 씮 PHP
Scope .................................................................... 119 Schriftgröße ....................................................... 111
Cache leeren ...................................................... 327 OpenSource ....................................... 17, 18, 23, 393
Selektor ............................................. 118, 119, 135 Selektor ...................................................... 108, 111
Smartphone ....................................................... 133 Cache wärmen ................................................. 327 Übersicht ............................................................. 109
StateManager ................................ 132, 133, 135 configure ............................................................ 330 unitize ............................................... 111, 113, 115 P
Tablet ................................................................... 133 Cronjob ................................................................ 327 unitize-padding ............................................... 127 Performance ...................................................... 45, 46
Theme.php ......................................................... 117 Datenbank aufsetzen .................................... 327 Variable ............... 108, 109, 110, 113, 114, 129 PHP ........................................................................ 17, 47
Variable ............................................................... 121 Datenbankmigration .................................... 327 Variable (Plugin) .............................................. 204
APCu ........................................................................ 47
Viewport ............................................................. 122 Elasticsearch befüllen ................................... 334 Verschachtelung .............................................. 108
Konfiguration ...................................................... 22

460 461
Index Index

PHP (Forts.) Plugin (Forts.) R SEO (Forts.)


OPcache .................................................................. 47 Subshopkompatiblität .................................. 364 Index aufbauen ........................................ 47, 381
Version .................................................................... 47 technischer Name .................................. 138, 139 Rabatt .............................................. 42, 156, 158, 159 Kategorie ............................................................... 44
PhpStorm .................................................... 28, 31, 33 Template-Verzeichnis ................................... 145 Rechtesystem ........................................................... 38 Kategoriepfad ..................................................... 44
ExtJS Navigation .............................................. 263 testen ................................................................... 418 Responsive .............................................................. 123 Kommentare ........................................................ 45
Xdebug ................................................................. 410 Textbaustein ..................................................... 365 absolute Größe ................................................. 123 Landingpage ........................................................ 44
PHPUnit ................................................................... 413 Theme .................................................................. 139 Anpassung ......................................................... 124 Route ................................................. 381, 382, 383
Dokumentation ............................................... 419 Theme registrieren ......................................... 139 Burger-Menü ..................................................... 123 Routing ............................................................... 385
Platzhalter 씮 Variable Theme Verzeichnis ......................................... 139 Desktop ..................................................... 126, 130 Seitentyp ............................................................. 383
Plugin ........................................................................ 137 Tipp ....................................................................... 369 dreispaltig .......................................................... 130 Shopseiten ............................................................. 44
addTemplateDir ............................................... 145 Übersicht ............................................................ 140 Endgerät .................................................... 124, 125 Smarty .................................................................... 44
aktivieren .................................................. 140, 144 uninstall .................................. 188, 190, 198, 201 Geste ..................................................................... 124 Sonderzeichen ..................................................... 44
altes System ....................................................... 138 Unterverzeichnis ............................................. 139 Landscape ................................................ 129, 130 Suchmaschine ..................................................... 44
Basisklasse ............................ 139, 146, 164, 168 Update ........................................................ 369, 370 Media-Query ..................................................... 129 Tabelle ................................................................. 382
Benutzerdaten behalten ............................... 191 verkaufen ........................................................... 398 mobile first ......................................................... 126 Template ............................................... 43, 44, 382
Benutzerdaten löschen ................................. 191 Version ....................................................... 188, 362 relative Größe ................................................... 123 Umleitung ............................................................. 45
best practice ...................................................... 369 verwalten ........................................................... 139 Smartphone .................................... 124, 129, 130 URL .......................................................... 43, 44, 382
Cache leeren ...................................................... 188 Verzeichnis ........................................................ 138 Tablet ......................................................... 124, 130 URL erzeugen .................................................... 386
config.xml .......................................................... 363 Positionsstatus ........................................................ 78 Umbruch ............................................................. 125 Variable ................................................................. 44
CSS registrieren ................................................ 204 Prämien-Artikel ....................................................... 72 Ressourcen (ACL) ..................................................... 38 Server ........................................................................... 22
deinstallieren .................................................... 140 Auswahl ................................................................. 73 Ribbon ...................................................................... 159 Serverkonfiguration .............................................. 22
Entwicklerpräfix .............................................. 138 Konfiguration ...................................................... 72 Rollen ........................................................................... 38 services.xml 씮 DIC
erstellen ............................................................... 138 kostenlos ............................................................... 72 Router ....................................................................... 385 Session ..................................................................... 153
Event ..................................................................... 143 Mindestbestellwert ............................................ 72 DefaultGenerator ............................................ 386 Shopware
Formular ............................................................. 362 Variante ................................................................. 74 DefaultMatcher ................................................ 385 Account ............................................................... 398
install ...................................... 188, 198, 199, 201 Warenkorbwert ................................................... 74 EventMatcher ................................................... 386 Consulting .......................................................... 393
installieren ............................................... 140, 144 Preis überschreiben ............................................ 155 Generator ........................................................... 386 Contributing ..................................................... 394
JavaScript registrieren ................................... 204 Preisfilter .................................................................... 82 Matcher ............................................................... 385 Fehler ................................................................... 396
keepUserData ................................................... 190 Preiskalkulation ...................................................... 37 RewriteGenerator ............................................ 386 freie Software ................................................... 393
Klassenname ..................................................... 139 Preisliste ..................................................................... 41 RewriteMatcher ............................................... 386 Gewährleistung ............................................... 393
Kommandozeileninstallation .................... 141 Privilegien .................................................................. 38 GitHub ................................................................. 394
Kompatiblität ................................................... 362 Product-Streams .............................................. 59, 62 S Lizenz ................................................................... 393
Konfiguration ................................................... 362 Cross-Selling ......................................................... 63 Quellcode ........................................................... 393
Konfigurationsfelder ..................................... 363 dynamisch ............................................................ 62 Scaffolding .............................................................. 368 Sicherheitshinweis .......................................... 396
Kontextobjekt ......................................... 188, 200 Eigenschaften-Filter .......................................... 62 Seitenkopf 씮 Header Ticket einstellen ............................................... 396
Konvention ........................................................ 138 Einkaufswelten ................................................... 63 SEO ............................................................... 42, 43, 381 shopware AG .................................................. 18, 138
Less registrieren ............................................... 204 Freitextfeld ........................................................... 80 404 ........................................................................... 45 shopwareID ............................................................... 36
lokal ...................................................................... 140 Kategorie ............................................................... 63 Aktualisierungsstrategie ....................... 48, 382 Smarty ......... 92, 93, 95, 96, 97, 98, 100, 108, 125
Meldung .............................................................. 188 Kriterium ............................................................... 62 Blog .......................................................................... 44 append ................................................................ 102
menu.xml ........................................................... 258 Sortierung ............................................................. 62 Cache ....................................................................... 45 assign ................................................... 97, 148, 151
Metainformation ............................................ 361 statisch ................................................................... 62 canonical .................................................. 382, 383 Backend erweitern .......................................... 277
Migration ........................................................... 370 Such-Filter ............................................................. 62 Cronjob ......................................................... 48, 381 Bedingung .......................................................... 101
Namespace ........................................................ 139 Vorschau ............................................................... 62 duplicate content ............................................ 382 capitalize ............................................................ 103
neues System ..................................................... 138 Produktsortiment 씮 Kategorie Einkaufswelt ......................................................... 45 currency ..................................................... 102, 103
Plugin Manager ............................ 139, 144, 190 Profiler .............................................. 93, 98, 164, 406 Einstellungen ................................................ 43, 44 debug ................................................................... 102
plugin.xml .......................................................... 361 Programmierkenntnisse ..................................... 18 Fehlerseite ............................................................. 45 Dokumentation ............................................... 104
populäre Plugins ............................................. 140 Formulare .............................................................. 44 extends ................................................ 96, 102, 145
Resources ............................................................ 165 Freitextfeld ............................................................ 44 Funktion schreiben ......................................... 103
Q Generierung ....................................................... 382
sauberes Arbeiten ............................................ 169 getAssign ............................................................ 151
Subscriber ........................................................... 369 Quellcode ................................................................... 29 Groß- und Kleinschreibung ..................... 44, 45 if ................................................................................ 98
Hersteller ............................................................... 44 Link ....................................................................... 101

462 463
Index Index

Smarty (Forts.) Storefront-Komponenten (Forts.) Support ........................................................................ 18 Testing ...................................................................... 413


lower ..................................................................... 103 FacetResult ........................................................ 237 Swag ........................................................................... 138 Abhängigkeit .................................................... 413
Modifier ............................................ 101, 103, 125 FacetResult Übersicht .................................... 238 Symfony ............................................... 138, 167, 171 Bootstrap ............................................................ 416
Modifier schreiben .......................................... 103 FacetResult-Typen .......................................... 238 Console Component ............................. 328, 367 Exception ............................................................ 418
Schleife .............................................. 101, 102, 150 Facette registrieren ........................................ 235 Form ..................................................................... 344 phpunit.xml ...................................................... 416
Textbaustein ..................................................... 364 Filter registrieren .................................... 235, 240 Kernel ................................................................... 386 Plugin ................................................................... 418
truncate ..................................................... 103, 125 filtern ................................................................... 217 Profiler ................................................................. 406 Plugin-Konfiguration .................................... 418
upper .................................................................... 103 Framework-Bridge ................................. 218, 223 Reverse-Proxy ......................................... 374, 380 Test ausführen ................................................. 419
url ........................................................................... 122 generateCondition ......................................... 226 Systemanforderung ............................................... 22 Textbaustein ................................................. 102, 364
Variable ............................................ 101, 102, 150 generateFacet ................................................... 237 allow_url_fopen ................................................. 22 bearbeiten .......................................................... 366
Snippet 씮 Textbaustein hasState .............................................................. 234 Apache ............................................................. 21, 22 finden ................................................................... 365
Sprachshop ................................................. 40, 41, 50 Kurzansicht ....................................................... 217 curl ........................................................................... 22 importieren ....................................................... 365
Standardsortierung ................................................ 48 Kurzprodukt ................................... 217, 218, 221 GD ............................................................................. 22 installieren ......................................................... 365
Stapelverarbeitung ................................................. 53 LegacyStructConverter ................................. 229 LAMP ....................................................................... 21 Service .................................................................. 365
Startseite ..................................................................... 81 Limit ..................................................................... 219 libapache2-mod-php5 ....................................... 21 Standardwert .................................................... 364
Statistik ....................................................................... 49 ListProduct ............................ 221, 223, 224, 229 Linux ........................................................................ 21 Verzeichnis ........................................................ 365
Storefront-Komponenten .......... 53, 61, 63, 160, ListProductService .......................................... 221 magic_quotes ...................................................... 22 Theme ........................ 18, 19, 88, 91, 104, 106, 125
173, 217 ListProductService dekorieren ................... 244 MariaDB ................................................................. 21 Ableitung ........................................................ 90, 91
addCondition .................................................... 239 Offset .................................................................... 219 memory_limit ...................................................... 22 Autor .................................................................... 105
addFacet ............................................................. 239 PriceCondition ................................................. 219 MySQL .............................................................. 21, 22 Bare ..................................................... 91, 92, 96, 99
addState .............................................................. 234 PriceSorting ....................................................... 219 Nginx ....................................................................... 21 Beschreibung .................................................... 105
Architektur ......................................................... 224 Product .................................... 218, 221, 224, 229 PHP .................................................................... 21, 22 Cache ........................................ 105, 106, 107, 109
Artikelinformation hinzufügen ................. 241 ProductContextInterface ............................. 228 php-cli ..................................................................... 21 Compiler Cache ................................................ 106
Attribut ................................................................ 246 ProductNumberSearch ................................. 221 register_globals .................................................. 22 CSS registrierenn ............................................. 105
BaseProduct .......................... 218, 220, 221, 224 ProductNumberSearchResult .................... 221 upload_max_filesize ........................................ 22 Erfolgsmeldung .................................................. 90
BooleanFacetResult .............................. 237, 238 ProductSearch .................................................. 223 erstellen .................................................................. 90
Condition ............ 219, 224, 225, 226, 232, 233 ProductSearchInterface ............................... 228 T erzeugen ................................................................ 96
Condition Definition ...................................... 241 ProductService ................................................. 221 Farbe ................................................................ 88, 90
Condition registrieren ................................... 235 Produktidentifikation ................................... 217 Template ........................................................... 40, 125 Farbgestaltung .................................................... 90
ConditionHandler ............. 224, 225, 226, 227, Produktinformation ............................. 218, 222 Template-Sprache ................................................... 92 Farbton ................................................................... 90
232, 233, 235 Produkttypen .................................................... 218 Templating ................................................. 87, 88, 90 Fehlermeldung .................................................... 90
ConditionHandler Definition ..................... 241 QueryAliasMapper ......................................... 228 Ableitung ..................................................... 96, 100 Hintergrundfarbe .............................................. 90
ConditionHandler registrieren ........ 234, 235 SearchInterface ................................................ 224 Anpassung ............................................................ 96 Hinweismeldung ................................................ 90
ConditionInterface ............................... 233, 241 SearchTermCondition ................................... 219 assign ...................................................................... 97 Hovereffekt ........................................................... 90
Context ...................................................... 221, 224 ShippingFreeCondition ........................ 219, 225 Attribut ............................................................ 93, 95 Icon .......................................................................... 88
Criteria ....... 219, 221, 223, 224, 225, 228, 229 ShopContextInterface .......................... 233, 237 Block ................................................................. 93, 96 In Plugin überführen ..................................... 204
CriteriaFactory ................................................. 229 SortingHandler ................................................ 227 Block überschreiben .......................................... 93 Infinite Scrolling ................................................. 90
CriteriaRequestHandler ............. 238, 239, 241 Suchdefinition ............................... 218, 219, 222 Cache ........................................................ 93, 95, 96 Knopf ...................................................................... 90
CriteriaRequestHandler Definition .......... 241 Suchdurchführung ................................ 218, 222 Debug ............................................................... 93, 95 Kommentar ....................................................... 105
CriteriaRequestHandler registrieren ...... 239, suchen ................................................................. 217 erweitern ................................................................ 93 Kompatiblität ...................................................... 90
240 Suchkriterium ................................................... 219 Freitextfeld ............................................................ 95 kompilieren .............................................. 105, 106
CriteriaRequestHandlerInterface ............. 239 supportCondition ........................................... 226 Klasse ...................................................................... 93 komprimieren ................................................... 106
Decorator Pattern ........................................... 247 Vollprodukt .............................................. 218, 221 Ordner ..................................................................... 96 Konfiguration ............................ 88, 89, 110, 127
eigener Filter ...................................................... 231 Styletile .................................................................... 109 Pfad .......................................................................... 96 Konkatinierung ............................................... 105
eigenes Listing ........................................ 227, 230 Styling 씮 Theme Smarty .................................................................... 93 Lizenz ................................................................... 105
Erweiterung ....................................................... 241 Subscriber 씮 Event Struktur .................................................................. 96 Logo ......................................................................... 88
Facet Definition ............................................... 241 Subshop ........................................................ 40, 41, 50 überschreiben ................................................... 102 Manager ................................................................ 90
FacetHandler ..................................................... 237 Suchbegriff ................................................................ 83 Überschrift ............................................................ 93 Minifizierung .................................................... 105
FacetHandler Definition ............................... 241 Suche ............................................................. 48, 81, 82 Variable .................................................................. 93 Name .................................................................... 105
FacetHandler registrieren .................. 239, 240 Suchleiste ................................................................... 83 Zuweisung ............................................................. 93 Offcanvas .............................................................. 89
FacetInterface ................................ 236, 237, 241 Suchserver 씮 Elasticsearch

464 465
Index

Theme (Forts.) Warenkorb ................................................ 81, 84, 158


Platzhalter ............................................................. 90 Abschluss ............................................................... 85
Plugin ...................................................................... 92 Artikel entfernen ................................................ 84
Primärfarbe ...................................... 90, 108, 110 Artikelposition ................................................. 158
Rahmenfarbe ....................................................... 90 bearbeiten ...................................................... 71, 84
Responsive ...................... 88, 90, 91, 92, 96, 110 Beschreibung ............................................. 84, 158
Schatteneffekt ...................................................... 90 Bestellabschluss .................................................. 84
Schriftart ................................................................ 90 Bestellbestätigung ............................................. 85
Sekundärfarbe ................................. 90, 108, 110 E-Mail ...................................................................... 85
Standardfarbe ................................................... 114 Gutschein .............................................................. 84
Styling ..................................................................... 91 Lieferanschrift ..................................................... 84
Theme.php ...................................... 105, 110, 133 Lieferzeit ................................................................ 84
Unterverzeichnis ................................................. 92 Mehrwertsteuer .................................................. 84
Variantenwechsel .............................................. 90 Menge ändern ..................................................... 84
Verzeichnis ............................................................ 92 Overlay ................................................................ 153
Warenkorb ............................................................ 89 Position ............................................................... 158
zuweisen ................................................................ 91 Preis ...................................................... 84, 154, 158
Theme 씮 Templating Rabatt .................................................................. 158
Topseller ...................................................... 48, 82, 92 Rechnungsanschrift .......................................... 84
Touchpad ................................................................. 123 Variante ................................................................. 84
Versand .................................................................. 84
U Versandkosten .................................................... 84
Zahlung .................................................................. 84
Übersetzung 씮 Textbaustein Widget ......................................................................... 92
Unterkategorie ......................................................... 82 Windows .............................................................. 21, 22
Wunschliste
V Merkzettel ............................................................. 86

Vagrant .................................... 28, 31, 32, 33, 34, 85


FTP ............................................................................ 26
X
Linux ........................................................................ 24 Xdebug ..................................................................... 409
Mac .......................................................................... 24 Breakpoint ......................................................... 411
SFTP .......................................................................... 27 Cookie .................................................................. 409
SSH ........................................................................... 26 IDE-Key ................................................................ 410
virtuelle Maschine ............................................. 24 Installation ........................................................ 409
Webserver .............................................................. 24 Konfiguration ................................................... 409
Zugangsdaten ...................................................... 26 PhpStorm ........................................................... 410
Variante ....................................................................... 84 Programmfluss ................................................ 411
Varnish 씮 HTTP-Cache
Vererbungshierarchie ........................................... 96
Z
Versand ....................................................................... 37
Versandbedingung ................................................. 81 Zahlarten .................................................................... 37
Vorkenntnis .............................................................. 27 Zahlungsanbieter .................................................... 36
Zugriffskontrolle ..................................................... 38
W Zugriffsrecht ............................................................. 29

Währung ........................................................ 101, 103


WAMP .......................................................................... 31

466
Wissen, wie’s geht.

Daniel Nögel ist als Entwickler bei der Shopware AG


tätig und dort unter anderem auch für die Schulungen
zuständig. Außerdem zählt die Beratung der Shopware-
Kunden zu seinen Aufgabenfeldern.

Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne
empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte
beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstel-
Daniel Nögel lung von der E-Book-Fassung des vorgestellten Buches abweichen können.
Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nut-
Shopware – Das Handbuch für Entwickler zungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
466 Seiten, gebunden, Dezember 2016
49,90 Euro, ISBN 978-3-8362-4243-1 Teilen Sie Ihre Leseerfahrung mit uns!

www.rheinwerk-verlag.de/4185