Versandkosten manipulieren

Dieses einfache Beispiel zeigt wie Versandkosten manipuliert werden können:

Zunächst wird eine Versandart "xt_shipping_test" in die Datenbank geschrieben, mit Name und Default-Versandkosten:

<db_install><![CDATA[
/* Anlegen einer Versandart "xt_shipping_test" via Datenbank */
$db->Execute("INSERT INTO ".TABLE_SHIPPING." (`shipping_code`, `shipping_dir`, `shipping_icon`, `shipping_tax_class`, `status`, `sort_order`, `shipping_type`, `shipping_tpl`, `use_shipping_zone`) VALUES
('xt_shipping_test', '', '', 1, 1, 1, 'price', '', NULL);");

$rs= $db->Execute("Select shipping_id FROM ".TABLE_SHIPPING." where shipping_code = 'xt_shipping_test' ");
/* Shipping ID von "xt_shipping_test" abfragen*/ 

if ($rs->RecordCount()>0)
{
/* Default Shippingkosten für "xt_shipping_test" einfügen: Keine Einschränkung auf Zonen, 0 - 9999 €/kg/items */
    $db->Execute("INSERT INTO ".TABLE_SHIPPING_COST." ( `shipping_id`, `shipping_geo_zone`, `shipping_country_code`, `shipping_type_value_from`, `shipping_type_value_to`, `shipping_price`, `shipping_allowed`) VALUES
( '".$rs->fields['shipping_id']."', 0, '', '0.00', '9999.00', '2.0000', 1);");

/* Name der Versandart wird hinzugefügt, da ansonsten keine Ausgabe im FE erfolgt */

    $db->Execute("INSERT INTO ".TABLE_SHIPPING_DESCRIPTION." (`shipping_id` ,`language_code` ,`shipping_name` ,`shipping_desc`) VALUES 
('".$rs->fields['shipping_id']."', 'de', 'xt:Shipping Test-Plugin', NULL);");
}

]]></db_install>
<db_uninstall><![CDATA[

/* Die Versandart und Versandregel kann durch benutzer im BE des Shops händisch entfernt werden, daher nur bedingt notwenig */

]]></db_uninstall>

Nun muss an mindestens zwei Hooks code eingefügt werden:

Hier wird der Preis der Versandart "xt_shipping_test" angepasst:

Kommt der Kunde aus DE (Deutschland) wird der Versandpreis auf "10" gesetzt, kommt der Kunde aus AT (Österreich) wird der Versandpreis auf "14" gesetzt.    

Diese Manipulation ist in der Praxis natürlich Unsinn, da es auch über das Backend weitaus angenehmer Angepasst werden könnte, jedoch könnten hier auch Schnittstellen von versendern abgefragt werden und eine dynamischen Preis frü die exakte Adresse des Kunden zurückgeben.

Hookposition:

Datei: "/xtFramework/classes/class.shipping.php"

Funktion "calcPrice()"

Name: "class.shipping.php:_calcPrice"

<code>
<hook>class.shipping.php:_calcPrice</hook>
<phpcode><![CDATA[
if ($data['shipping_code']=='xt_shipping_test')
{
    $arr = $_SESSION['customer'];
    $customer_address = $arr->customer_default_address;

    
    if ($customer_address['customers_country_code']=='DE') $shipping_price = 10;
    else if ($customer_address['customers_country_code']=='AT') $shipping_price = 14;
    else  $shipping_price = 3;
}
]]></phpcode>
<order>1</order>
<active>1</active>
</code>

 

Die in class.shipping.php:_calcPrice definierten Preisanpassungen werden in das Array eingefügt, welches an das Template des Shops übergeben wird.Über das FE des Shops werden die Werte im späteren verlauf der Bestellung dann auch in die xt_orders geschrieben. (Was jedoch automatisch passiert.)

Hookposition:

Datei: "/xtFramework/classes/class.shipping.php"

Funktion "calcPrice()"

Name: "class.shipping.php:_calcPrice_bottom"

<code>
<hook>class.shipping.php:_calcPrice_bottom</hook>
<phpcode><![CDATA[

$shipping_price['shipping_tax_class'] = $data['shipping_tax_class'];
]]></phpcode>
<order>1</order>
<active>1</active>
</code>

Optional:

Um ggf. die Kundenadresse bei der Versandart anzuzeigen, werden hier die entsprechenden Werte aus der Session zurück an dieses Template übergeben

 

Hookposition:

Datei: "/xtFramework/classes/class.checkout.php"

Funktion "_selectShipping()"

Name: "_selectShipping_tpl_data"

<code>
<hook>class.checkout.php:_selectShipping_tpl_data</hook>
<phpcode><![CDATA[

$tpl_data['custom_xt_shipping_test_var'] = $_SESSION['customer'];
$tpl_data['custom_field'] = 'any value here';
]]></phpcode>
<order>1</order>
<active>1</active>
</code>

Der gesamte Code:

Wenn Sie das Plugin ausführen wollen erstellen Sie den Ordner "xt_shipping_test" im Ordner "/plugins/", den Ordner "/installer/" im Ordner "/xt_shipping_test/" und kopieren Sie den letzten Quelltext-Block in die Datei xt_shipping_test.xml in diesen Ordner.

Also: /plugins/xt_shipping_test/installer/xt_shipping_test.xml

( Das Logo ist nicht zwingend erforderlich.)

 

<?xml version="1.0" encoding="utf8"?>
<xtcommerceplugin>
<title>TEST Shipping</title>
<version>1.0.0</version>
<code>xt_shipping_test</code>
<url>http://www.xt-commerce.com</url>
<description></description>
<type>shipping</type>
<icon>xt-commerce_logo.jpg</icon>
<db_install><![CDATA[

$db->Execute("INSERT INTO ".TABLE_SHIPPING." (`shipping_code`, `shipping_dir`, `shipping_icon`, `shipping_tax_class`, `status`, `sort_order`, `shipping_type`, `shipping_tpl`, `use_shipping_zone`) VALUES
('xt_shipping_test', '', '', 1, 1, 1, 'price', '', NULL);");

$rs= $db->Execute("Select shipping_id FROM ".TABLE_SHIPPING." where shipping_code = 'xt_shipping_test' ");

if ($rs->RecordCount()>0)
{
    $db->Execute("INSERT INTO ".TABLE_SHIPPING_COST." ( `shipping_id`, `shipping_geo_zone`, `shipping_country_code`, `shipping_type_value_from`, `shipping_type_value_to`, `shipping_price`, `shipping_allowed`) VALUES
( '".$rs->fields['shipping_id']."', 0, '', '0.00', '9999.00', '2.0000', 1);");

    $db->Execute("INSERT INTO ".TABLE_SHIPPING_DESCRIPTION." (`shipping_id` ,`language_code` ,`shipping_name` ,`shipping_desc`) VALUES 
('".$rs->fields['shipping_id']."', 'de', 'xt:Shipping Test-Plugin', NULL);");
}

]]></db_install>
<db_uninstall><![CDATA[

/* Die Versandart und Versandregel kann durch benutzer im BE des Shops händisch entfernt werden, daher nur bedingt notwenig */

]]></db_uninstall>
<plugin_code>
<code>
<hook>class.shipping.php:_calcPrice</hook>
<phpcode><![CDATA[

if ($data['shipping_code']=='xt_shipping_test')
{
    $arr = $_SESSION['customer'];
    $customer_address = $arr->customer_default_address;

    
    if ($customer_address['customers_country_code']=='DE') $shipping_price = 10;
    else if ($customer_address['customers_country_code']=='AT') $shipping_price = 14;
    else  $shipping_price = 3;
}

]]></phpcode>
<order>1</order>
<active>1</active>
</code>
<code>
<hook>class.shipping.php:_calcPrice_bottom</hook>
<phpcode><![CDATA[

$shipping_price['shipping_tax_class'] = $data['shipping_tax_class'];

]]></phpcode>
<order>1</order>
<active>1</active>
</code>
<code>
<hook>class.checkout.php:_selectShipping_tpl_data</hook>
<phpcode><![CDATA[

$tpl_data['custom_xt_shipping_test_var'] = $_SESSION['customer'];
$tpl_data['custom_field'] = 'any value here';

]]></phpcode>
<order>1</order>
<active>1</active>
</code>
</plugin_code>
</xtcommerceplugin>

Support
Shop Support: Support zum Shop und anderen
Produkten von xt:Commerce.

Fehler melden
Report a Bug: Fehler gefunden?
Informieren Sie uns.

xt:Commerce Marketplace
Plugins & Templates: Über 500 Möglichkeiten in unserem
Store zur Shop-Optimierung.

xt:Commerce Service Team
Services: Wir übernehmen individuelle
Anpassungen für Ihren Shop.

Impressum