Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Ü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:

/xtFramework/classes/class.product.php
($plugin_code = $xtPlugin->PluginCode('class.product.php:_getPrice_center')) ? eval($plugin_code) : false;

Ein Hookpunkt im Template:

/templates/xt_grid/xtCore/pages/account.html
{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:

/plugins/xt_countryprices/installer/xt_countryprices.xml
<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():

/xtFramework/classes/class.product.php
// ....
// 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:

/xtFramework/classes/class.product.php
// ....
// 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) {

// ....

 

 

  • No labels