Die Shop-Klasse¶
Ab JTL-Shop Version 4.x kommt der Klasse Shop
eine zentrale Bedeutung zu.
Sie dient in erster Linie als zentrale Registry für ehemals ausschließlich globale Variablen wie die NiceDB oder
Smarty, dient aber auch der Erzeugung und Ausgabe von Instanzen für den neuen Objektcache.
Vor JTL-Shop 4.x waren Konstrukte wie das Folgende nötig, um SQL-Abfragen auszuführen:
// veraltet!
//
$Article = $GLOBALS['DB']->executeQuery('SELECT * FROM tartikel WHERE kArtikel = 2344', 1);
Templates wurden wie folgt gerendert:
// veraltet!
//
global $smarty;
$smarty->assign('myvar', 123);
$smarty->assign('myothervar', 'foobar');
$smarty->display('mytemplate.tpl');
In JTL-Shop 5.x können und sollten nun Klasseninstanzen von NiceDB und Smarty über die Shop
-Klasse bezogen
werden.
Für JTL-Shop 4.x gilt folgende Vorgehensweise als bevorzugt:
$product = Shop::DB()->query('SELECT * FROM tartikel WHERE kArtikel = 2344', 1);
Ab JTL-Shop 5.0 wird folgende Vorgehensweise bevorzugt:
$product = Shop::Container()->getDB()->queryPrepared(
'SELECT * FROM tartikel WHERE kArtikel = :artID',
['artID' => $articleID],
ReturnType::SINGLE_OBJECT
);
Für Smarty wird sowohl in JTL-Shop 4.x als auch JTL-Shop 5.0 diese Vorgehensweise bevorzugt:
Shop::Smarty()
->assign('myvar', 123)
->assign('myothervar', 'foobar')
->display('mytemplate.tpl');
Die Methode JTLSmarty::assign(string $tpl_var, mixed $value)
wurde ab JTL-Shop 4.x nun „chainable“ gemacht, um
die Übersichtlichkeit im Code zu erhöhen.
Zudem wurden die Funktionsnamen der NiceDB-Klasse etwas vereinfacht und über ein Mapping auch statisch verfügbar
gemacht (vgl. Funktion NiceDB::map(string $method)
).
Sprachfunktionen¶
Auch Sprachfunktionen sollten nun über die Shop-Klasse genutzt werden.
In Versionen vor JTL-Shop 4.x war diese Vorgehensweise üblich:
$GLOBALS['Sprache']->gibWert('basketAllAdded', 'messages'); // veraltet! (üblich in Shop 3.x)
Durch die Möglichkeiten der Shop-Klasse wird daraus:
Shop::Lang()->get('basketAllAdded', 'messages');
Caching¶
Die Nutzung des Caches erfolgt analog den Sprachfunktionen und wird im Kapitel „Cache“ näher erläutert.
Onlineshop-URL¶
Um die URL des Onlineshops zu beziehen, wurde die Methode Shop::getURL([bool $bForceSSL = false]) : string
eingeführt.
Achtung
Wir empfehlen dringend, diese Variante anstelle der veralteten Konstante URL_SHOP
zu nutzen,
da Shop::getURL()
auch eine eventuelle Konfiguration von SSL berücksichtigt.
Die Ausgabe erfolgt stets ohne abschließenden Slash.
GET-Parameter¶
Außerdem wurde die Behandlung von GET-Parametern und das Parsen von SEO-URLs in die Shop-Klasse
verlagert.
Die zentralen Einstiegspunkte sind dabei die Funktionen Shop::run()
und Shop::getParameters()
, die von allen
direkt aufgerufenen PHP-Dateien in der Shop-Root ausgeführt werden.
Debugging¶
Die Funktion Shop::dbg(mixed $content[, bool $die, string $prepend]) : void
erlaubt „quick-and-dirty“ Debugging.
Als ersten Parameter erhält sie beliebigen Inhalt zur Ausgabe. Wird der zweite Parameter auf
true
gesetzt, kann die weitere Ausführung des Codes unterbunden werden. Der dritte Parameter kann einen Text
beinhalten, der vor der Debug-Ausgabe als Erläuterung erscheinen soll.
Dies entspricht im Wesentlichen einem von <pre>
-Tags umhüllten var_dump()
mit ggf. anschließendem die()
.