<?php class sm_my_shipping_module { public $id = __CLASS__; public $name = 'My Shipping Module'; public $description = ''; public $author = 'ACME Corp.'; public $version = '1.0'; public $website = 'http://www.acme.com'; public function options($items, $subtotal, $tax, $currency_code, $customer) { if (empty($this->settings['status'])) return; return array( 'title' => $this->name, 'options' => array( array( 'id' => 'option_1', 'icon' => $this->settings['icon'], 'name' => 'Option 1', 'description' => 'This is the description for option 1', 'fields' => '', 'cost' => $this->settings['fee_1'], 'tax_class_id' => $this->settings['tax_class_id'], 'exclude_cheapest' => false, ), array( 'id' => 'option_2', 'icon' => $this->settings['icon'], 'name' => 'Option 2', 'description' => 'This is the description for option 2', 'fields' => '', 'cost' => $this->settings['fee_2'], 'tax_class_id' => $this->settings['tax_class_id'], 'exclude_cheapest' => false, ), ), ); } public function settings() { return array( array( 'key' => 'status', 'default_value' => '1', 'title' => language::translate(__CLASS__.':title_status', 'Status'), 'description' => language::translate(__CLASS__.':description_status', ''), 'function' => 'toggle("e/d")', ), array( 'key' => 'icon', 'default_value' => '', 'title' => language::translate(__CLASS__.':title_icon', 'Icon'), 'description' => language::translate(__CLASS__.':description_icon', 'Web path of the icon to be displayed.'), 'function' => 'input()', ), array( 'key' => 'fee_1', 'default_value' => '10', 'title' => 'Fee 1', 'description' => 'This is the fee for option 1', 'function' => 'decimal()', ), array( 'key' => 'fee_2', 'default_value' => '10', 'title' => 'Fee 2', 'description' => 'This is the fee for option 2', 'function' => 'decimal()', ), array( 'key' => 'tax_class_id', 'default_value' => '', 'title' => language::translate(__CLASS__.':title_tax_class', 'Tax Class'), 'description' => language::translate(__CLASS__.':description_tax_class', 'The tax class for the shipping cost.'), 'function' => 'tax_classes()', ), array( 'key' => 'priority', 'default_value' => '0', 'title' => language::translate(__CLASS__.':title_priority', 'Priority'), 'description' => language::translate(__CLASS__.':description_priority', 'Process this module by the given priority value.'), 'function' => 'int()', ), ); } } ?>
This method is called by the checkout page requesting available shipping options.
public function options($items, $subtotal, $tax, $currency_code, $customer) { return array( 'title' => $this->name, 'options' => array( array( 'id' => 'option_1', 'icon' => $this->settings['icon'], 'name' => 'Option 1', 'description' => 'This is the description for option 1', 'fields' => '<input type="text" name="foo" value="'. @$this->userdata['foo'] .'" />' . PHP_EOL . '<input type="text" name="bar" value="'. @$this->userdata['bar'] .'" />', 'cost' => $this->settings['fee_1'], 'tax_class_id' => $this->settings['tax_class_id'], 'exclude_cheapest' => false, ), ), ); }
The method is triggered upon the module is selected. Making it possible to verify any input data.
public function select($module_id, $option_id) { // Do something // ... }
This method is triggered after the order has been created, making it possible to automate e.g. booking of shipping.
public function after_process($order) { // Do something // ... // Save order $order->save(); }
The method is triggered upon installing the module. Good for creating necessary database tables or such.
public function install() { // Do something // ... }
The method is triggered upon uninstalling the module. Good for cleaning up database tables and such.
public function uninstall() { // Do something // ... }
The method is triggered upon changing the module configuration. Good for updating database tables and such.
public function update() { // Do something // ... }
This method returns a settings structure with editable parameters. Mandatory parameters are status, icon and priority.
public function settings() { return array( array( 'key' => 'status', 'default_value' => '1', 'title' => language::translate(__CLASS__.':title_status', 'Status'), 'description' => language::translate(__CLASS__.':description_status', ''), 'function' => 'toggle("e/d")', ), array( 'key' => 'icon', 'default_value' => '', 'title' => language::translate(__CLASS__.':title_icon', 'Icon'), 'description' => language::translate(__CLASS__.':description_icon', 'Web path of the icon to be displayed.'), 'function' => 'input()', ), array( 'key' => 'weight_class', 'default_value' => '', 'title' => language::translate(__CLASS__.':title_weight_class', 'Weight Class'), 'description' => language::translate(__CLASS__.':description_weight_class', 'The weight class for the rate table.'), 'function' => 'weight_classes()', ), array( 'key' => 'geo_zone_id', 'default_value' => '', 'title' => language::translate(__CLASS__.':title_zone', 'Zone') . language::translate(__CLASS__.':title_geo_zone', 'Geo Zone'), 'description' => language::translate(__CLASS__.':description_geo_zone', 'Geo zone to which the cost applies.'), 'function' => 'geo_zones()', ), array( 'key' => 'rate_table', 'default_value' => '5:8.95;10:15.95', 'title' => language::translate(__CLASS__.':title_rate_table', 'Rate Table'). language::translate(__CLASS__.':title_rate_table', 'Rate Table'), 'description' => language::translate(__CLASS__.':description_rate_table', 'Ascending rate table of the shipping cost. The format must be weight:cost;weight:cost;.. (I.e. 5:8.95;10:15.95;..)'), 'function' => 'input()', ), array( 'key' => 'tax_class_id', 'default_value' => '', 'title' => language::translate(__CLASS__.':title_tax_class', 'Tax Class'), 'description' => language::translate(__CLASS__.':description_tax_class', 'The tax class for the shipping cost.'), 'function' => 'tax_classes()', ), array( 'key' => 'priority', 'default_value' => '0', 'title' => language::translate(__CLASS__.':title_priority', 'Priority'), 'description' => language::translate(__CLASS__.':description_priority', 'Process this module by the given priority value.'), 'function' => 'int()', ), ); }