Zum Inhalt

Shop CLI

Die Shop CLI ist ein Kommandozeilen-Tool, welches mit dem PHP-Kommandozeileninterpreter verwendet wird und die Möglichkeit bietet, administrative Aufgaben ohne Shop-Backend auszuführen. Um die Shop CLI verwenden zu können, muss PHP als Kommandozeileninterpreter verfügbar sein. (siehe: PHP-Konfiguration des jeweiligen Servers)

Aufruf der Shop CLI

Die Shop CLI wird Im Hauptverzeichnis (Installationsverzeichnis) von JTL-Shop aufgerufen:

$> php cli [befehl:sub-befehl [parameter]]

Ein Aufruf ohne Befehle, wie auch der Aufruf mit dem Befehl list, gibt eine kurze Liste aller verfügbaren Befehle aus.

$> php cli
...
$> php cli list
...

Mehrere Befehle haben nur einen Sub-Befehl. Werden solche Befehle angegeben, fragt die Shop CLI interaktiv, ob der eine Sub-Befehl ausgeführt werden soll.

Hilfe zu Befehlen

Mit help vor einem Befehl, wie auch mit den Parametern -h und --help nach einem Befehl, erhält man Hilfe zu diesem spezifischen Befehl.

$> php cli help generate:demodata
...
$> php cli generate:demodata -h
...
$> php cli generate:demodata --help
...

Die Befehle im Einzelnen

shop:install

Falls der Shop noch nicht installiert wurde - also noch kein includes/config.JTL-Shop.ini.php vorhanden ist - kann der JTL-Shop über diesen Befehl installiert werden. Eine Abfrage aller nötigen Informationen kann interaktiv erfolgen oder explizit über die folgenden Parameter angegeben werden:

--shop-url=SHOP-URL                    URL unter der der Shop erreichbar sein soll
--database-host[=DATABASE-HOST]        Datenbank-Host
--database-socket[=DATABASE-SOCKET]    Datenbank-Socket
--database-name=DATABASE-NAME          Datenbank-Name
--database-user=DATABASE-USER          Datenbank-Benutzer
--database-password=DATABASE-PASSWORD  Datenbank-Passwort
--admin-user=ADMIN-USER                Backend-User [default: "admin"]
--admin-password=ADMIN-PASSWORD        Backend-Backend password [default: "random"]
--sync-user=SYNC-USER                  Wawi-Sync-Benutzer [default: "sync"]
--sync-password=SYNC-PASSWORD          Wawi-Sync-Passwort [default: "random"]
--install-demo-data                    Sollen Demodaten generiert werden?
--file-owner=FILE-OWNER                Setzt Besitzerrechte [default: "aktueller Nutzer"]
--file-group=FILE-GROUP                Setzt Gruppenrechte [default: "aktuelle Gruppe"]

migrate

Wird der Befehl migrate ohne Sub-Befehl aufgerufen, so führt er alle Migrationen aus, die bis zum aktuellen Zeitpunkt noch nicht ausgeführt wurden.

migrate:create

Der Befehl create erzeugt den Objektrumpf einer neuen Migration. Diese neue Migration enthält zwei leere Methoden (up(), down()), die vom Entwickler zu implementieren sind.

migrate:innodbutf8

Der Befehl innodbutf8 konvertiert alle Tabellen der Datenbank auf die Engine "InnoDB", die bis dato noch mit der Engine "MyISAM" laufen. Zudem werden all diese Tabellen auf den Zeichensatz CHARACTER SET 'utf8mb4' und die Sortierungsregel COLLATE 'utf8mb4_unicode_ci' umgestellt.

migrate:status

Mit dem Befehl status können Sie sich eine Liste aller Migrationen und deren Ausführungsstatus ausgeben lassen.

backup

Der Befehl backup ist nicht alleinstehend aufrufbar. Er kann nur mit einem spezifischen Unterbefehl aufgerufen werden.

backup:db

db erzeugt ein Backup der Shop-Datenbank. Das erzeugte Backup wird unter export/backup/[DatumID]_backup.sql gespeichert. Mit dem Parameter -c (oder --compress) kann die Backupdatei mit gzip gepackt werden. Der Dateiname wird dann zu export/backup/[DatumID]_backup.sql.gz.

backup:files

files erzeugt ein Backup der Ordner- und Dateistruktur des Shops. Mit dem Parameter --exclude-dir= können ein oder mehrere Verzeichnisse vom Archiviervorgang ausgeschlossen werden. (Bei mehreren Verzeichnissen wird der exclude-Parameter auch mehrmals benutzt: exclude-dir=pfad_a --exclude-dir=pfad_b usw.)

Danger

Sollte es sich beim Installationsverzeichnis um ein git-Repository handeln, ist es ratsam, das .git/-Verzeichnis immer mit --exclude-dir=.git/ vom Archivieren auszuschließen!

Caution

Sehr große Verzeichnisse (zum Beispiel: Bilderverzeichnisse, ggf. includes/vendor/) sollte nach Möglichkeit beim Archivieren weggelassen werden, da der Vorgang sonst sehr lange dauern kann.

Die erzeugte .zip-Datei wird unter export/backup/[DatumID]_file_backup.zip gespeichert.

cache

Der Befehl cache ist nicht alleinstehend aufrufbar. Er kann nur mit einem spezifischen Unterbefehl aufgerufen werden.

cache:dbes:delete

Der Abgleich von JTL-Wawi und JTL-Shop erzeugt temporäre Dateien, die standardmäßig automatisch gelöscht werden. Wird dieses automatische Löschen durch die config-Konstante KEEP_SYNC_FILES unterbunden, können diese temporären Dateien mit diesem Befehl gelöscht werden.

cache:file:delete

Sobald für JTL-Shop die Caching-Methode "Datein" (und "Dateien (erweitert)") eingestellt ist, werden diese Dateien unter templates_c/filecache/ gespeichert. JTL-Shop verwaltet das Verzeichnis filecache/ automatisch.

Bei Bedarf kann mithilfe der Shop CLI und diesem Befehl das Verzeichnis geleert werden.

cache:images:create

Erstellt für alle im Shop vorhandenen Bilder die angepassten Ansichten in verschiedenen Größen. Erfordert zusätzlich die Angabe, welche Bilder erstellt werden sollen:

-a                       Alle fehlenden Bilder
-c, --categories         Kategoriebilder
-p, --products           Produktbilder
-o, --opc                OPC-Bilder
-c, --categories         Kategoriebilder
--configgroups           Konfigurationsgruppenbilder
--characteristics        Merkmalbilder
--characteristicvalues   Merkmalwertbilder
--variations             Variationsbilder

Diese Parameter können beliebig kombiniert werden.

cache:tpl:delete

Für jedes aktivierte Template in JTL-Shop existiert ein Verzeichnis unterhalb des Ordners templates_c/. Hier werden alle durch Smarty vor-compilierten Dateien des jeweiligen Templates abgelegt.

Mit diesem Sub-Befehl kann dieser Ordner bei Bedarf auch manuell geleert und entfernt werden.

cache:clear

Dieser Sub-Befehl leert den jeweiligen Speicher der aktuell aktivierten Objekt-Cache-Methode. (wie im Backende eingestellt, siehe: System -> Cache -> Einstellungen -> Methode:)

cache:warm

Dieser Sub-Befehl führt ein sog. "cache warming" durch, wobei bereits verschiedene Inhalte im Cache aufbereitet werden, um sie schneller zur Verfügung stellen zu können.

Mit einem entsprechenden Parameter können Sie gesondert festlegen, welche Bereiche des Cache "aufgewärmt" werden sollen:

-d, --details         Artikeldetails vorbereiten
-l, --list            Artikellisten vorbereiten
-k, --childproducts   Kindartikel vorbereiten
-g, --linkgroups      Linkgruppen vorbereiten
-c, --categories      Kategorien vorbereiten
-m, --manufacturers   Hersteller vorbereiten

Caution

Das Aufwärmen des Caches kann, abhängig von der Größe Ihres JTL-Shop, einige Zeit in Anspruch nehmen.

Mit dem folgenden Paramter kann man das Leeren des Caches, vor dem Aufwärmen, erzwingen:

-p, --preflush        Cache löschen vor dem Aufwärmen

Diese Parameter können beliebig kombiniert werden.

compile

Der Befehl compile ist nicht alleinstehend aufrufbar. Er kann nur mit einem spezifischen Unterbefehl aufgerufen werden.

compile:less

Alle Themes des EVO-Templates enthalten .less-Dateien. Sollten Sie die .less-Dateien in einem Theme an Ihre Bedürfnisse angepaßt haben, können Sie mit diesen Befehl alle .less-Dateien, aller Themes des EVO-Templates, in .css-Dateien übersetzen.

Mit dem Parameter --theme=[Theme-Name] können Sie ein bestimmtes Theme angeben. Mit dem Parameter --templateDir=[Template-Name] bestimmen Sie ein anderes Template-Verzeichnis.

compile:sass

Alle Themes des NOVA-Templates enthalten .scss-Dateien. Sollten Sie die .scss-Dateien in einem Theme an Ihre Bedürfnisse angepaßt haben, können Sie mit diesen Befehl alle .scss-Dateien, aller Themes des NOVA-Templates, in .css-Dateien übersetzen.

Dieser Befehl übersetzt ebenso das "critical SCSS", welches im Seitenkopf immer mit übertragen wird.

Mit dem Parameter --theme=[Theme-Name] können Sie ein bestimmtes Theme angeben. Mit dem Parameter --templateDir=[Template-Name] bestimmen Sie ein anderes Template-Verzeichnis.

generate

Der Befehl generate kann alleinstehend aufgerufen werden, fragt aber dann interaktiv, ob der einzige Sub-Befehl aufgerufen werden soll.

generate:demodata

Mit diesem Befehl können Sie einfache Artikel und Kategorien in einem noch leeren JTL-Shop erzeugen, um die grundlegende Funktion von JTL-Shop zu demonstrieren.

Mit einem entsprechenden Parameter können Sie gesondert festlegen, wieviele Daten generiert werden sollen:

-a, --characteristics[=COUNT]        Anzahl zu erstellender Merkmale
-w, --characteristicvalues[=COUNT]   Anzahl zu erstellender Merkmalwerte
-c, --customers[=COUNT]              Anzahl zu erstellender Kunden
-l, --links[=COUNT]                  Anzahl zu erstellender Links
-c, --categories[=COUNT]             Anzahl zu erstellender Kategorien
-m, --manufacturers[=COUNT]          Anzahl zu erstellender Hersteller

mailtemplates

Der Befehl mailtemplates kann alleinstehend aufgerufen werden, fragt aber dann interaktiv, ob der einzige Sub-Befehl aufgerufen werden soll.

mailtemplates:reset

Alle Mailtemplates des JTL-Shop sind vom Shopbetreiber frei konfigurierbar. Sie werden in der Datenbank gespeichert. Um diese Mailtemplates wieder auf ihren Auslieferungszustand zu setzen, kann dieser Befehl verwendet werden.

model

Der Befehl model kann alleinstehend aufgerufen werden, fragt aber dann interaktiv, ob der einzige Sub-Befehl aufgerufen werden soll.

model:create

Dieser Befehl kann interaktiv aufgerufen werden. Er erzeugt eine neue Klasse, abgeleitet von DataModel, mit dem Namen T[Tabellenname]Model.php, welche die angegebene Tabelle abbildet.

Caution

Zum Speichern der neuen Objekte muss ein Ordner names models/ im Hauptverzeichnis des Shops von der PHP CLI beschreibbar sein.

Erweiterung durch Plugin

Das Plugin jtl_plugin_bootstrapper erweitert die Shop CLI um den Befehl "create-plugin". Wenn dieses Plugin in JTL-Shop installiert ist, können Sie mit der Shop CLI den Befehl jtl_plugin_bootstrapper:create-plugin aufrufen, um sich die grundlegende Struktur eines JTL-Shop Plugins erzeugen zu lassen.

Der Befehl jtl_plugin_bootstrapper kann alleinstehend aufgerufen werden, fragt aber dann interaktiv, ob der einzige Sub-Befehl create-plugin aufgerufen werden soll. Der Sub-Befehl create-plugin fragt dann seinerseits interaktiv alle erforderlichen Parameter ab und erzeugt sodann die grundlegend erforderlichen Verzeichnisse und Dateien im Ordner plugins/.

Ist ein Ausführen des Sub-Befehls create-plugin per Script gewünscht, können alle Parameter auch in einem Shell-Script übergeben werden.

Beispiel:

#!/bin/env bash

PLUGIN_NAME='TestPlugin'                 # Name des Plugins
PLUGIN_VERSION='1.0.0'                   # Version des Plugin (SemVer-konform)
DESCRIPTION='Dies ist eine Test-Plugin'  # Beschreibungstext des Plugins
AUTHOR='Max Mustermann'                  # Name des Authors
URL='http://example.com'                 # URL, beispielsweise zur Homepage des Authors
ID='test_plugin'                         # Plugin-ID (Plugin-Verzeichnisname und Shop-interne ID)
FLUSH_TAGS='CACHING_GROUP_PRODUCT'       # Caching-Gruppen, die bei Installation gelöscht werden sollen (kommagetrennte Liste)
MINSHOPVERSION='5.0.0'                   # minimale Shop-Version, in der das Plugin noch lauffähig ist (SemVer-konform)
MAXSHOPVERSION='5.1.3'                   # maximale Shop-Version, in der das Plugin noch lauffähig ist (SemVer-konform)
CREATE_MIGRATIONS='tplugin_table'        # Migrations zur Tabellerstellung erzeugen (kommagetrennte Liste)
CREATE_MODELS='Yes'                      # Model erstellen, für neue Tabellen? (Yes/No)
HOOKS='61,62'                            # Hooks, die genutzt werden sollen (kommagetrennt und numerisch)
JS='main.js'                             # Javascript-Dateien, die erzeugt werden sollen (kommagetrennte Liste)
CSS='main.css'                           # CSS-Dateien, die erzeugt werden sollen (kommagetrennte Liste)
DELETE='Yes'                             # Soll das Plugin, bei Installation, eine alte Version ersetzen? (Yes/No)
LINKS='test-plugin'                      # Frontend-Link-Name des Plugins (SEO-konformer, kommagetrennte Liste)
SETTINGS='Textarea Test,Checkbox Test'   # Backend-Setting-Name (kommagetrennte Liste, muss mit Settings-Typ deckungsgleich sein)
SETTINGSTYPES='textarea,checkbox'        # Typ des Backend-Settings (kommagetrennte Liste)


php cli jtl_plugin_bootstrapper:create-plugin  \
  --name="${PLUGIN_NAME}"                      \
  --plugin-version="${PLUGIN_VERSION}"         \
  --description="${DESCRIPTION}"               \
  --author="${AUTHOR}"                         \
  --url="${URL}"                               \
  --id="${ID}"                                 \
  --flush-tags="${FLUSH_TAGS}"                 \
  --minshopversion="${MINSHOPVERSION}"         \
  --maxshopversion="${MAXSHOPVERSION}"         \
  --create-migrations="${CREATE_MIGRATIONS}"   \
  --create-models="${CREATE_MODELS}"           \
  --hooks="${HOOKS}"                           \
  --js="${JS}"                                 \
  --css="${CSS}"                               \
  --delete="${DELETE}"                         \
  --links="${LINKS}"                           \
  --settings="${SETTINGS}"                     \
  --settingstypes="${SETTINGSTYPES}"           \

Nicht alle Parameter sind Pflichtangaben. Bei interaktiver Ausführung wird nur der grundlegende Teil abgefragt.

Für den Parameter SETTINGSTYPES sind die Werte, die im Abschnitt info.xml in der Tabellenzeile „Attribut Typ“ gelistet sind, gültig. SETTINGS (die Einstellungsnamen) und SETTINGSTYPES müssen zwei "deckungsgleiche" Arrays sein, bei denen beispielsweise Wert 1 im Array SETTINGS auch dem Wert 1 im Array SETTINGSTYPES entspricht.

Der Parameter --flush-tags bezieht sich auf die Caching-Group-Konstanten, die in den Datei includes/defines_inc.php zu finden sind.

Plugin-Commands

Wenn der Plugin-Dev-Modus aktiviert ist, stehen drei weitere Befehle zur Auswahl.

plugin:command:create

Erzeugt ein Gerüst für ein eigenes Pluginkommando. Das Plugin muss dazu installiert und aktiv sein. Die Abfrage aller nötigen Angaben erfolgt interaktiv.

plugin:migration:create

Erzeugt ein Gerüst für eine Plugin-Migration. Das Plugin muss dazu installiert und aktiv sein. Die Abfrage aller nötigen Angaben erfolgt interaktiv.

plugin:validate

Überprüft, ob das angegebene Plugin korrekt angelegt wurde und installierbar ist. Dazu darf das Plugin nicht installiert sein, ansonsten wird der Fehlercode 90 zurückgegeben. Die Abfrage aller nötigen Angaben erfolgt interaktiv.