Commerce Commerce 1.x Snippets get cart
The commerce.get_cart
snippet is used to list cart information outside the actual cart, for example as a sidebar widget or a “You have X items in your cart” link in a header.
To display the fully functional cart to allow the customer to checkout, use the commerce.cart
snippet.
Added in v0.7.
Table of Contents
Usage
[[!commerce.get_cart? &tpl=`name-of-a-chunk`]]
[[!commerce.get_cart? &tpl=`name-of-a-chunk` &emptyTpl=`other-chunk`]]
[[!commerce.get_cart? &toPlaceholders=`cart.`]]
[[!commerce.get_cart? &field=`total_formatted`]]
Properties
-
&tpl
: the name of a chunk (not a twig template file) to show the cart with, only used if the cart has at least one item in it. -
&itemTpl
: the name of a chunk (not a twig template file) used to process each item in the cart. Skip if you don’t need to display individual products. -
&emptyTpl
: the name of a chunk (not a twig template file) used when the cart is empty. -
&toPlaceholders
: prefix to use for setting placeholders with all cart information. -
&field
: specify an order field to return only that field. -
&separator
: string to use to join the product records together, defaults to a newline character. (new in 0.11) -
&loadOrderFields
: loads custom order fields under an order_fields array in the response, defaults to enabled. (added in 1.1)
Returning information
Depending on which properties you’ve provided to the snippet (&toPlaceholders
, &tpl
/&emptyTpl
, or &field
in that order), the snippet will return the product information as follows:
-
&toPlaceholders
will set placeholders with the prefix provided. For example&toPlaceholders=`cart`
will set placeholders like[[!+cart.total_quantity]]
,[[!+cart.total_formatted]]
, etc. -
&tpl
can be set to the name of a chunk. The cart information (without prefix) will be parsed through that chunk. When you also provide&itemTpl
with a chunk name, the items in the cart will be parsed through that chunk, with the results placed in the[[+items]]
placeholder in&tpl
. -
&field
allows to immediately return a single order field. For example&field=`total_formatted`
to return just the formatted total order price. - If none of the above are provided, all available cart information is dumped to screen in a
<pre>
tag. Useful for debugging.
Available placeholders
All cart/order information is made available. If you provide none of the properties discussed above, you will see a dump of the available data, similar to the one below.
Array
(
[id] => 226
[class_key] => comCartOrder
[properties] => Array
(
[expected_address] => Array
(
[state] => Noord-Holland
[country] => NL
)
[logs] => Array
(
[0] => Array
(
[created_on] => 1496069083
[public] =>
[message] => commerce.log.item_added
[properties] => Array
(
[id] => 397
[name] => Product Name
[quantity] => 1
)
)
)
)
[test] => 1
[status] => 1
[currency] => EUR
[subtotal] => 2000
[discount] => 0
[shipping] => 0
[transaction] => 0
[total_before_tax] => 2000
[total_ex_tax] => 2000
[tax] => 420
[total] => 2420
[total_due] => 2420
[total_quantity] => 1
[created_on] => 1496069083
[last_updated_on] => 1496069413
[status_updated_on] => 0
[created_by] => 1
[last_updated_by] => 1
[status_updated_by] => 0
[shipping_method] => 0
[parent] => 0
[user] => 1
[subtotal_formatted] => €20.00
[discount_formatted] => €0.00
[shipping_formatted] => €0.00
[transaction_formatted] => €0.00
[total_before_tax_formatted] => €20.00
[total_ex_tax_formatted] => €20.00
[tax_formatted] => €4.20
[total_formatted] => €24.20
[total_due_formatted] => €24.20
[created_on_formatted] => 2017-05-29 at 16:44:43 CEST
[last_updated_on_formatted] => 2017-05-29 at 16:50:13 CEST
[status_updated_on_formatted] =>
[items] => Array
(
[0] => Array
(
[id] => 398
[class_key] => comOrderItem
[properties] =>
[order] => 226
[product] => Array
(
[id] => 1
[class_key] => comProduct
[properties] =>
[sku] => awesome-product
[name] => Product Name
[description] =>
[price] => 2000
[stock] => 9
[weight] => 3
[weight_unit] => kg
[image] => path/to/image.jpg
[tax_group] => 1
[target] => 0
[removed] =>
[removed_on] => 0
[removed_by] =>
[price_formatted] => €20.00
[removed_on_formatted] =>
[link] =>
[edit_link] => /manager/?namespace=commerce&a=index&ca=product/update&id=1
)
[idx] => 20
[currency] => EUR
[status] => 0
[allow_update] => 1
[sku] => awesome-product
[name] => Product Name
[link] =>
[description] =>
[price] => 2000
[image] => path/to/image.jpg
[quantity] => 1
[subtotal] => 2000
[discount] => 0
[shipping] => 0
[total_before_tax] => 2000
[total_ex_tax] => 2000
[tax] => 420
[total] => 2420
[price_formatted] => €20.00
[subtotal_formatted] => €20.00
[discount_formatted] => €0.00
[shipping_formatted] => €0.00
[total_before_tax_formatted] => €20.00
[total_ex_tax_formatted] => €20.00
[tax_formatted] => €4.20
[total_formatted] => €24.20
)
)
)
Showing cart in the header?
MODX processes snippets from top to bottom, so if you place a cart summary in the header of the page, on the cart and checkout pages it may show old data.
One way around this is to add the get_cart
snippet below the content (so the cart/checkout snippets are executed first), and to use the &toPlaceholders
property to set placeholders, which you can then add into the header of the page.
For example with
[[!commerce.get_cart? &toPlaceholders=`cart`]]
below the content, you can use [[!+cart.total_quantity]]
and [[!+cart.total_formatted]]
in the header of your page.