Documentation of Advanced Shipping extension for Magento 2 by Owebia

Introduction

Advanced Shipping is an extension for the e-commerce solution Magento.

The syntax using PHP 5.6 allows a great flexibility in setting delivery charges.

Technical Informations

The usage of the PHP syntax (with an Abstract Syntax Tree) has been preferred to the usage of a JSON syntax (with regular expressions and the eval function) as in previous versions of the extension. This is the result of considerations on security and performance.

The PHP code defined in the configuration is not evaluated with the eval function for security reasons. The library PHP-Parser is used to obtain an Abstract Syntax Tree (AST). The AST is browsed and only a limited set of functions and variables is allowed.

As the AST is not version-dependent, you can use the PHP 5.6 syntax even if your server uses a lower version of PHP.

Add-ons

You want to do more with Advanced Shipping?

Discover our add-ons on Owebia Store.

Unlimited Carriers Add-on

Create as many carrier as you need with Advanced Shipping

Functions Add-on

Use functions to simplify the writing of your configuration
Look at "With Functions Add-on" tabs in examples to see how easy it becomes with this add-on

Universal Setting Add-on

Hide or change price of methods regardless the shipping module

What's new?

Installation

Please note that you can only install the extension using composer.

Quick start

A call to addMethod function adds a shipping method.

object addMethod ( string $method_id , array $method_properties )

List of method properties:

More examples

Warning: to avoid conflicts, use only the characters a-z, 0-9 and _ for the method id.
You should also avoid identifiers that already correspond to variable names (quote, request…).

Use Variables and Functions

You can use variables, functions and operators to define a dynamic value (all operators are not supported).

1. Variables

There are global variables and local variables that you can access with array functions and callbacks.

If you activate the debug option, you can see all data available for each object that you use.
Remember that you don't have access to all methods of the original objects because they are not accessed directly.

1.1. Global variables

These variables are global variables and can be accessed everywhere (use the global keyword when you are inside a function).

  • The request object (\Magento\Quote\Model\Quote\Address\RateRequest) given by Magento:
    • $request->all_items: array of items in cart
    • The source address:
      • $request->country_id *
      • $request->region_id
      • $request->city
      • $request->postcode
    • The destination address:
    • The package:

      • $request->package_value: value of the package
      • $request->package_value_with_discount: value of the package with discount
      • $request->package_weight: weight of the package
      • $request->package_qty: number of products in the package
    • Other attributes:
      • $request->free_shipping: free shipping calculated by Magento rules
      • $request->*: property of the request object
  • The quote (\Magento\Quote\Model\Quote): (known issue #2, known issue #3)
    • $quote->subtotal: subtotal (excluding tax)
    • $quote->subtotal_with_discount: subtotal (excluding tax) with discount
    • $quote->grand_total: total (including tax) with discount (known issues #3, you should avoid using this value)
    • $quote->base_subtotal: subtotal (excluding tax) in base currency
    • $quote->base_subtotal_with_discount: subtotal (excluding tax) with discount in base currency
    • $quote->base_grand_total: total (including tax) with discount in base currency (known issues #3, you should avoid using this value)
    • $quote->coupon_code: the coupon code used in cart
    • $quote->*: property of the quote (ex: $quote->subtotal)
  • The customer group (\Magento\Customer\Model\Group):
    • $customer_group->id: alias of $customer_group->customer_group_id
    • $customer_group->code: alias of $customer_group->customer_group_code
    • $customer_group->name: alias of $customer_group->customer_group_code
    • $customer_group->*: property of the customer group (ex: $customer_group->tax_class_id)
  • The customer (\Magento\Customer\Model\Customer):
    • $customer->id: alias of $customer->entity_id
    • $customer->*: attribute of the customer (ex: email, lastname, firstname, group_id…)
    • $customer->getCustomAttribute('my_custom_attribute')->value: custom attribute of the customer (where 'my_custom_attribute' should be replaced by custom attribute's code)
  • Custom variables (\Magento\Variable\Model\Variable):
    • $variable->*: custom variable defined in Magento (ex: $variable->my_var)
  • The store (\Magento\Store\Model\Store):
    • $store->id $store->code $store->name $store->address $store->phone

* Magento apparently uses the ISO 3166-1 alpha-2 codes.
Note that the country code for United Kingdom is GB and not UK.

1.2. Accessing items

You can use $request->all_items with array functions.

  • The item (\Magento\Quote\Model\Quote\Item):
    • $item->qty: quantity of the item
    • $item->weight: weight of the item
    • $item->base_original_price: price excluding tax without discount
    • $item->price_incl_tax: price including tax without discount
    • $item->options->*: option (the available options depend on the product)
  • The product (\Magento\Catalog\Model\Product):
    • $item->product->*
      • sku
      • name
      • weight
      • price (as defined in Magento backoffice)
      • special_price: (as defined in Magento backoffice)
      • tax_class_id: the taxclass id
      • getAttributeText('tax_class_id'): the tax class name
        To get the text value of an attribute of type select, use getAttributeText('attribute_code')
    • Categories of the product: (\Magento\Catalog\Model\Category)
      • $item->product->category->*: attribute of the first category
        • id
        • name
        • is_active
    • All product categories (returns an array, examples):
      • $item->product->category_ids: array of id of the categories
    • The attribute set (\Magento\Eav\Model\Entity\Attribute\Set):
      • $item->product->attribute_set: the attribute set
      • $item->product->attribute_set->*: attribute of the attribute set
        • id
        • attribute_set_name
    • The stock item (\Magento\CatalogInventory\Model\Stock\Item):
      • $item->product->stock_item->*: attribute of the product stock
        • is_in_stock
        • qty

2. Functions

Look at the PHP documentation if you want to know how to use these functions.

Functions allowed:

2.1. Functions available with Functions Add-On

Examples

Free shipping

Filter on destination

France excluding DOM/TOM

Filter on customer group

You can use the name or ID of the customer groups.

Using formulas

Formulas can be used to calculate the price of the delivery.

Using the configuration of another element

Using special functions

Defining a table

Using an associative table

Using the attributes and options of products

Count items

Get minimum value, get maximum value

Sum

Using categories

Warning: you must notice that in Magento, a product can be in multiple categories.
So be particularly careful how you use this property.

Hints and tips

Using if/elseif/else statements

Access new customer data (ex. VAT ID)

Known issue with Magento CE < 2.1.8

Using custom customer attribute

In the following example, my_custom_attribute is a custom customer attribute created by a custom extension.

Known issues

© 2016-2017 Owebia