Überall in xt:Commerce sind im System sogenannte Hookpunkte ("Einhängepunkte") welche es Plugins erlauben beliebigen php-Code an dieser Stelle in die Funktion bzw. Datei einzubinden.
Ein Hookpunkt in einer Klasse:
($plugin_code = $xtPlugin->PluginCode('class.product.php:_getPrice_center')) ? eval($plugin_code) : false;
Ein Hookpunkt im Template:
{hook key=account_tpl_module_data_bottom}
Beispiel xt_countryprices:
Das Plugin xt_countryprices zeigt den Preis in Abhängigkeit zum Herkunftsland des Kunden an, d.h. es lassen sich für die verschiedenen Länder verschiedene Produktpreise einstellen.
Es ist also erforderlich es die Funktion _getPrice() in der Klasse class.products.php zu erweitern bzw. zu verändern. (In der Funktion wird der Preis eines Produkts abgefragt.)
D.h. in der Installations-Datei des Plugins wird ein Hookpunkt erstellt:
<code> <hook>class.product.php:_getPrice_center</hook> <phpcode><![CDATA[ // hier der phpcode der im Hook class.product.php:_getPrice_center ausgeführt werden soll. if (isset($_SESSION['customer']->customer_default_address['customers_country_code'])) { global $db; $record = $db->Execute("SELECT country_price FROM ".TABLE_PRODUCTS_PRICE_COUNTRY." WHERE products_id='".$this->data['products_id']."' and status='1' and country_code='".$_SESSION['customer']->customer_default_address['customers_country_code']."' LIMIT 0,1"); if($record->RecordCount() == 1){ $products_price = $record->fields['country_price']; return $true; } } ]]></phpcode> <order>1</order> <active>1</active> </code>
Auszug aus der Funktion _getPrice():
// .... // Products Price $products_price = $this->data['products_price']; $format_type = 'default'; // Hookpunkt: ($plugin_code = $xtPlugin->PluginCode('class.product.php:_getPrice_center')) ? eval($plugin_code) : false; if(isset($plugin_return_value)) return $plugin_return_value; // special price ? $special_price_otax = $this->data['flag_has_specials'] ? $this->getSpecialPrice():false; if ($special_price_otax!=false) { // ....
Ist das Plugin installiert führt der Shop den Code so aus:
// .... // Products Price $products_price = $this->data['products_price']; $format_type = 'default'; // Hookpunkt: ($plugin_code = $xtPlugin->PluginCode('class.product.php:_getPrice_center')) ? eval($plugin_code) : false; // <!-- xt_countryprices start --> if (isset($_SESSION['customer']->customer_default_address['customers_country_code'])) { global $db; $record = $db->Execute("SELECT country_price FROM ".TABLE_PRODUCTS_PRICE_COUNTRY." WHERE products_id='".$this->data['products_id']."' and status='1' and country_code='".$_SESSION['customer']->customer_default_address['customers_country_code']."' LIMIT 0,1"); if($record->RecordCount() == 1){ $products_price = $record->fields['country_price']; return $true; } } // <!-- xt_countryprices end --> if(isset($plugin_return_value)) return $plugin_return_value; // special price ? $special_price_otax = $this->data['flag_has_specials'] ? $this->getSpecialPrice():false; if ($special_price_otax!=false) { // ....