initializeContext(); } /** * Singleton-Instanz abrufen */ public static function getContext() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } /** * Context initialisieren */ private function initializeContext() { $this->shop = new Shop(); $this->language = new Language(); $this->currency = new Currency(); $this->country = new Country(); $this->employee = null; $this->customer = null; $this->cart = null; $this->cookie = new Cookie(); $this->link = new Link(); $this->smarty = new \Smarty(); $this->controller = null; $this->mobile = false; $this->mobile_device = false; $this->mode = 'front'; $this->override = new Override(); $this->translator = new Translator(); $this->registry = []; // Smarty-Konfiguration $this->configureSmarty(); } /** * Smarty konfigurieren */ private function configureSmarty() { $this->smarty->setTemplateDir(__DIR__ . '/../../templates/'); $this->smarty->setCompileDir(__DIR__ . '/../../cache/smarty/compile/'); $this->smarty->setCacheDir(__DIR__ . '/../../cache/smarty/cache/'); $this->smarty->setConfigDir(__DIR__ . '/../../config/'); // Smarty-Plugins registrieren $this->smarty->registerPlugin('function', 'l', [$this->translator, 'l']); $this->smarty->registerPlugin('function', 'url', [$this->link, 'getPageLink']); $this->smarty->registerPlugin('function', 'hook', [$this, 'hook']); // Globale Variablen setzen $this->smarty->assign('context', $this); $this->smarty->assign('shop', $this->shop); $this->smarty->assign('language', $this->language); $this->smarty->assign('currency', $this->currency); } /** * Shop-Instanz abrufen */ public function getShop() { return $this->shop; } /** * Shop-Instanz setzen */ public function setShop($shop) { $this->shop = $shop; return $this; } /** * Language-Instanz abrufen */ public function getLanguage() { return $this->language; } /** * Language-Instanz setzen */ public function setLanguage($language) { $this->language = $language; return $this; } /** * Currency-Instanz abrufen */ public function getCurrency() { return $this->currency; } /** * Currency-Instanz setzen */ public function setCurrency($currency) { $this->currency = $currency; return $this; } /** * Country-Instanz abrufen */ public function getCountry() { return $this->country; } /** * Country-Instanz setzen */ public function setCountry($country) { $this->country = $country; return $this; } /** * Employee-Instanz abrufen */ public function getEmployee() { return $this->employee; } /** * Employee-Instanz setzen */ public function setEmployee($employee) { $this->employee = $employee; return $this; } /** * Customer-Instanz abrufen */ public function getCustomer() { return $this->customer; } /** * Customer-Instanz setzen */ public function setCustomer($customer) { $this->customer = $customer; return $this; } /** * Cart-Instanz abrufen */ public function getCart() { return $this->cart; } /** * Cart-Instanz setzen */ public function setCart($cart) { $this->cart = $cart; return $this; } /** * Cookie-Instanz abrufen */ public function getCookie() { return $this->cookie; } /** * Cookie-Instanz setzen */ public function setCookie($cookie) { $this->cookie = $cookie; return $this; } /** * Link-Instanz abrufen */ public function getLink() { return $this->link; } /** * Link-Instanz setzen */ public function setLink($link) { $this->link = $link; return $this; } /** * Smarty-Instanz abrufen */ public function getSmarty() { return $this->smarty; } /** * Smarty-Instanz setzen */ public function setSmarty($smarty) { $this->smarty = $smarty; return $this; } /** * Controller-Instanz abrufen */ public function getController() { return $this->controller; } /** * Controller-Instanz setzen */ public function setController($controller) { $this->controller = $controller; return $this; } /** * Mobile-Status abrufen */ public function getMobile() { return $this->mobile; } /** * Mobile-Status setzen */ public function setMobile($mobile) { $this->mobile = $mobile; return $this; } /** * Mobile-Device-Status abrufen */ public function getMobileDevice() { return $this->mobile_device; } /** * Mobile-Device-Status setzen */ public function setMobileDevice($mobile_device) { $this->mobile_device = $mobile_device; return $this; } /** * Mode abrufen */ public function getMode() { return $this->mode; } /** * Mode setzen */ public function setMode($mode) { $this->mode = $mode; return $this; } /** * Override-Instanz abrufen */ public function getOverride() { return $this->override; } /** * Translator-Instanz abrufen */ public function getTranslator() { return $this->translator; } /** * Registry-Wert abrufen */ public function get($key, $default = null) { return isset($this->registry[$key]) ? $this->registry[$key] : $default; } /** * Registry-Wert setzen */ public function set($key, $value) { $this->registry[$key] = $value; return $this; } /** * Registry-Wert entfernen */ public function remove($key) { unset($this->registry[$key]); return $this; } /** * Hook ausführen */ public function hook($hookName, $params = []) { return Hook::exec($hookName, $params); } /** * Admin-Kontext prüfen */ public function isAdmin() { return $this->mode === 'admin'; } /** * Frontend-Kontext prüfen */ public function isFront() { return $this->mode === 'front'; } /** * CLI-Kontext prüfen */ public function isCli() { return $this->mode === 'cli'; } /** * Context zurücksetzen */ public function reset() { $this->employee = null; $this->customer = null; $this->cart = null; $this->controller = null; $this->registry = []; return $this; } /** * Context-Informationen abrufen */ public function getContextInfo() { return [ 'mode' => $this->mode, 'mobile' => $this->mobile, 'mobile_device' => $this->mobile_device, 'shop_id' => $this->shop ? $this->shop->getId() : null, 'language_id' => $this->language ? $this->language->getId() : null, 'currency_id' => $this->currency ? $this->currency->getId() : null, 'employee_id' => $this->employee ? $this->employee->getId() : null, 'customer_id' => $this->customer ? $this->customer->getId() : null, 'cart_id' => $this->cart ? $this->cart->getId() : null ]; } } // Hilfsklassen für Context class Shop { private $id; private $name; private $url; public function __construct() { $this->id = 1; $this->name = 'Webshop'; $this->url = $_SERVER['HTTP_HOST'] ?? 'localhost'; } public function getId() { return $this->id; } public function getName() { return $this->name; } public function getUrl() { return $this->url; } } class Language { private $id; private $iso_code; private $name; public function __construct() { $this->id = 1; $this->iso_code = 'de'; $this->name = 'Deutsch'; } public function getId() { return $this->id; } public function getIsoCode() { return $this->iso_code; } public function getName() { return $this->name; } } class Currency { private $id; private $iso_code; private $symbol; public function __construct() { $this->id = 1; $this->iso_code = 'EUR'; $this->symbol = '€'; } public function getId() { return $this->id; } public function getIsoCode() { return $this->iso_code; } public function getSymbol() { return $this->symbol; } } class Country { private $id; private $iso_code; private $name; public function __construct() { $this->id = 1; $this->iso_code = 'DE'; $this->name = 'Deutschland'; } public function getId() { return $this->id; } public function getIsoCode() { return $this->iso_code; } public function getName() { return $this->name; } } class Cookie { private $data = []; public function __construct() { $this->data = $_COOKIE ?? []; } public function get($key, $default = null) { return isset($this->data[$key]) ? $this->data[$key] : $default; } public function set($key, $value, $expire = 0) { $this->data[$key] = $value; setcookie($key, $value, $expire, '/'); } public function delete($key) { unset($this->data[$key]); setcookie($key, '', time() - 3600, '/'); } } class Link { public function getPageLink($controller, $ssl = null, $id_lang = null, $request = null, $request_url_encode = false, $id_shop = null, $relative_protocol = false) { $baseUrl = 'http://' . ($_SERVER['HTTP_HOST'] ?? 'localhost'); return $baseUrl . '/' . $controller . '.php'; } } class Translator { public function l($string, $class = null, $addslashes = false, $htmlentities = true) { // Einfache Übersetzung - in echten System würde hier eine Übersetzungsdatei geladen $translations = [ 'Home' => 'Startseite', 'Products' => 'Produkte', 'Cart' => 'Warenkorb', 'Checkout' => 'Kasse', 'Login' => 'Anmelden', 'Register' => 'Registrieren', 'Search' => 'Suche', 'Contact' => 'Kontakt', 'About' => 'Über uns', 'Terms' => 'AGB', 'Privacy' => 'Datenschutz', 'Imprint' => 'Impressum' ]; return isset($translations[$string]) ? $translations[$string] : $string; } }