User Tools

Site Tools


how_to_create_a_shipping_module

How To Create A shipping Module

A Basic Example

/includes/modules/shipping/sm_my_shipping_module.inc.php
<?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()',
        ),
      );
    }
  }
 
?>

Class Methods

options($items, $subtotal, $tax, $currency_code, $customer)

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' => '',
            'cost' => $this->settings['fee_1'],
            'tax_class_id' => $this->settings['tax_class_id'],
            'exclude_cheapest' => false,
          ),
        ),
      );
    }

select($module_id, $option_id)

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
      // ...
    }

after_process($order)

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();
    }

install()

The method is triggered upon installing the module. Good for creating necessary database tables or such.

    public function install() {
    // Do something
      // ...
    }

uninstall()

The method is triggered upon uninstalling the module. Good for cleaning up database tables and such.

    public function uninstall() {
    // Do something
      // ...
    }

update()

The method is triggered upon changing the module configuration. Good for updating database tables and such.

    public function update() {
    // Do something
      // ...
    }

settings()

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()',
        ),
      );
    }
how_to_create_a_shipping_module.txt · Last modified: 2016/01/30 20:23 by 174.55.109.10