Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

 

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
languagexml
<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
languagexml
<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
languagexml
<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
languagexml
<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
languagexml
<?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

...