Dieses einfache Beispiel zeigt wie Versandkosten manipuliert werden können:
Zunächst wird eineVersandart "xt_shipping_test" in die Datenbank geschrieben, mit Name und Default-Versandkosten:
Code Block | ||
---|---|---|
| ||
<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:
...
Code Block | ||
---|---|---|
| ||
<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.)
...
Code Block | ||
---|---|---|
| ||
<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
...
Code Block | ||
---|---|---|
| ||
<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.)
Code Block | ||
---|---|---|
| ||
<?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> |
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
...