AxKit::XSP::Handel::Cart - XSP Cart Taglib
Add this taglib to AxKit in your http.conf or .htaccess:
AxAddXSPTaglib AxKit::XSP::Handel::Cart
Add the namespace to your XSP file and use the tags:
<xsp:page language="Perl" xmlns:xsp="http://apache.org/xsp/core/v1" xmlns:cart="http://today.icantfocus.com/CPAN/AxKit/XSP/Handel/Cart" > <cart:load type="1"> <cart:filter name="id"><request:idparam/></cart:filter> <cart:cart> <cart> <id><cart:id/></id> <name><cart:name/></name> <description><cart:description/></description> <subtotal><cart:subtotal/></subtotal> <cart:items> <item> <sku><cart:sku/></sku> <description><cart:description/></description> <quantity><cart:quantity/></quantity> <price><cart:price/></price> <total><cart:total/></total> </item> </cart:items> </cart> </cart:cart> </cart:load>
This tag library provides an interface to use Handel::Cart inside of your AxKit XSP pages.
Handel::Cart
<cart:load> <cart:filter> <cart:cart> <cart:add> <cart:description></cart:description> <cart:id></cart:id> <cart:sku></cart:sku> <cart:quantity></cart:quantity> <cart:price></cart:price> </cart:add> <cart:clear/> <cart:count/> <cart:description/> <cart:id/> <cart:item> <cart:filter> <cart:description/> <cart:id/> <cart:sku/> <cart:quantity/> <cart:update> <cart:description></cart:description> <cart:sku></cart:sku> <cart:quantity></cart:quantity> <cart:price></cart:price> </cart:update> <cart:price/> <cart:total/> </cart:item> <cart:items> <cart:description/> <cart:id/> <cart:sku/> <cart:quantity/> <cart:price/> <cart:total/> </cart:items> <cart:name/> <cart:save/> <cart:subtotal/> <cart:type/> <cart:update> <cart:description></cart:description> <cart:name></cart:name> <cart:shopper></cart:shopper> <cart:type></cart:type> </cart:update> </cart:cart> <cart:carts> <cart:count/> <cart:description/> <cart:id/> <cart:items> <cart:description/> <cart:id/> <cart:sku/> <cart:quantity/> <cart:price/> <cart:total/> </cart:items> <cart:name/> <cart:subtotal/> <cart:type/> </cart:carts> </cart:load> <cart:new> <cart:description></cart:description> <cart:id></cart:id> <cart:name></cart:name> <cart:shopper></cart:shopper> <cart:type></cart:type> </cart:new>
<cart:add>
Adds an a item to the current cart. You can specify the item properties as attributes in the tag itself:
<cart:add description="My New Part" id="11111111-1111-1111-1111-111111111111" sku="1234" quantity="1" price="1.23" />
or you can add them as child elements:
<cart:add> <cart:description>My New Part</cart:description> <cart:id>11111111-1111-1111-1111-111111111111</cart:id> <cart:sku>1234</cart:sku> <cart:quantity>1</cart:quantity> <cart:price>1.23</cart:price> </cart:add>
or any combination of the two:
<cart:add quantity="1"> <cart:description>My New Part</cart:description> <cart:id>11111111-1111-1111-1111-111111111111</cart:id> <cart:sku>1234</cart:sku> <cart:price>1.23</cart:price> </cart:add>
This tag is only valid within the <cart:cart> block. See Handel::Cart for more information about adding parts to the shopping cart.
<cart:cart>
Container tag for the current cart inside of the <cart:load> tag. If load or it's filters load more than one cart, cart will contain only the first cart. If you're looking for loop through multiple carts, try <cart:carts> instead.
<cart:load>
load
filter
cart
<cart:carts>
<cart> <cart:cart> <id><cart:id/></id> <name><<cart:name/></name> <description><cart:description/></description> <subtotal><cart:subtotal/></subtotal> <items> <cart:items> ... </cart:items> </items> </cart:cart> </cart>
Loops through all loaded carts inside of the <cart:load> tag.
<carts> <cart:carts> <cart> <id><cart:id/></id> <name><<cart:name/></name> <description><cart:description/></description> <subtotal><cart:subtotal/></subtotal> <items> <cart:items> ... </cart:items> </items> </cart> </cart:carts> </carts>
<cart:clear>
Deletes all items in the current shopping cart. This tag is only valid inside of <cart:cart>, not inside of <cart:carts>.
<cart:carts> <cart:clear/> </cart:carts>
<cart:count>
Returns the number of items in the current shopping cart. This is valid in both <cart:cart> and <cart:carts>.
<cart:carts> <cart> <id><cart:id/></id> <name><<cart:name/></name> <description><cart:description/></description> <subtotal><cart:subtotal/></subtotal> <count>cart:count/></count> </cart> </cart:carts>
<cart:description>
Context aware tag to get or set the description of various other tags. Within <cart:cart> and <cart:carts> it returns the current carts description:
<cart:cart> <description><cart:description/></description> </cart:cart>
Within <cart:add> or <cart:update> it sets the current cart or cart items description:
<cart:update>
<cart:cart> <cart:update> <cart:description>My Updated Cart Description</cart:description> </cart:update> <cart:add> <cart:description>My New SKU Description</cart:description> </cart:add> <cart:item sku="1234"> <cart:update> <cart:description>My Updated SKU Description</cart:description> <cart:update> <cart:item> </cart:cart>
<cart:filter>
Adds a new name/value pair to the filter used in <cart:load>, <cart:delete>, and <cart:item>. Pass the name of the pair in the name atttribute and the value between the start and end filter tags:
<cart:delete>
<cart:item>
name
<cart:load type="0"> <cart:filter name="shopper">12345678-9098-7654-3212-345678909876</cart:filter> <cart:delete> <cart:filter name="sku">sku1234</cart:filter> <cart:delete> </cart:load>
If the same attribute is specified in a filter, the filter takes precedence.
<cart:load type="0"> <!-- type == 0 --> <cart:filter name="type">1</cart:filter> <!-- type == 1 --> </cart:load>
You can supply as many filters as needed.
<cart:load> <cart:filter name="type">0</cart:filter> <cart:filter name="shopper">12345678-9098-7654-3212-345678909876</cart:filter> </cart:load>
<cart:id>
Context aware tag to get or set the record id within various other tags. In <cart:cart>, <cart:carts>, <cart:item>, and <cart:items> it returns the record id for the object:
<cart:items>
<cart:cart> <id><cart:id/></id> <cart:items> <item> <id><cart:id/></id> </item> </cart:items> </cart:cart>
Within <cart:delete>, and <cart:new> it sets the id value used in the operation specified:
<cart:new>
<cart:cart> <cart:delete> <cart:id>11111111-1111-1111-1111-111111111111</cart:id> </cart:delete> </cart:cart> ... <cart:new> <cart:id>11112222-3333-4444-5555-6666777788889999</cart:id> <cart:name>New Cart</cart:name> </cart:new>
It cannot be used within <cart:update> and will die if you try updating the record ids.
die
Loops through all items in the current cart:
<cart:cart> <items> <cart:items> <item> <sku><cart:sku/></sku> <description><cart:description/></cart:description> <sku><cart:sku/></sku> <quantity><cart:quantity/></quantity> <price><cart:price/></price> <total><cart:total/></total> </item> </cart:items> </items> </cart:cart>
Load a specified shopping cart. You can pass filter name/value pairs as attributes or you can use <cart:filter<gt> to add them within load:
<cart:filter<gt
<cart:load type="1"> <cart:filter name="shopper">12345678-9098-7654-3212-345678909876</cart:filter> </cart:load>
load must be a top level tag within it's declared namespace. It will die otherwise.
<cart:name>
Context aware tag to get or set the name within various other tags. In <cart:cart>, or <cart:carts> it returns the name for the object:
<cart:cart> <name><cart:name/></name> ... </cart:cart>
Within <cart:update> and <cart:new> it sets the name value used in the operation specified:
<cart:cart> <cart:update> <cart:name>My Updated Cart Name</cart:name> </cart:update> </cart:cart> ... <cart:new> <cart:name>New Cart</cart:name> </cart:new>
Creates a new shopping cart using the supplied attributes and child tags:
<cart:new type="1"> <cart:id>22222222-2222-2222-2222-222222222222</cart:id> <cart:shopper><request:shopper/></cart:shopper> <cart:name>New Cart</cart:name> </cart:new>
The child tags take precedence over the attributes of the same name. load must be a top level tag within it's declared namespace. It will die otherwise.
<cart:price>
Context aware tag to get or set the price of a cart item. In <cart:add> and <cart:update> it sets the price:
<cart:cart> <cart:add> <cart:price>1.24</cart:price> </cart:add> </cart:cart>
In <cart:item> and <cart:items> it returns the price for the cart item:
<cart:cart> <cart> <items> <cart:items> <item> <price><cart:price/></price> </item> </cart:items> </items> </cart> </cart:cart>
<cart:quantity>
Context aware tag to get or set the quantity of a cart item. In <cart:add> and <cart:update> it sets the quantity:
<cart:cart> <cart:add> <cart:quantity>1.24</cart:quantity> </cart:add> </cart:cart>
In <cart:item> and <cart:items> it returns the quantity for the cart item:
<cart:cart> <cart> <items> <cart:items> <item> <quantity><cart:quantity/></quantity> </item> </cart:items> </items> </cart> </cart:cart>
Updates the current cart values:
<cart:cart> <cart:update> <cart:name>My Updated Cart Name</cart:update> <cart:update> </cart:cart>
update is only valid within <cart:cart> and <cart:item>. <cart:id> is not valid withing an update statement.
update
<cart:save>
Saves the current cart by setting its type to CART_TYPE_SAVED:
CART_TYPE_SAVED
<cart:cart> <cart:save/> </cart:cart>
save is only valid in <cart:cart>.
save
<cart:sku>
Context aware tag to get or set the sku of a cart item. In <cart:add> and <cart:update> it sets the su:
<cart:cart> <cart:add> <cart:sku>sku1234</cart:sku> </cart:add> </cart:cart>
In <cart:item> and <cart:items> it returns the sku for the cart item:
<cart:cart> <cart> <items> <cart:items> <item> <sku><cart:sku/></sku> </item> </cart:items> </items> </cart> </cart:cart>
<cart:subtotal>
Returns the subtotal of the items in the current cart:
<cart:cart> <subtotal><cart:subtotal/></subtotal> </cart:cart>
<cart:total>
Returns the total of the current cart item:
<cart:cart> <cart> <items> <cart:items> <item> <total><cart:total/></total> </item> </cart:items> </items> </cart> </cart:cart>
<cart:type>
Context aware tag to get or set the type within various other tags. In <cart:cart>, or <cart:carts> it returns the type for the object:
<cart:cart> <type><cart:type/></type> ... </cart:cart>
Within <cart:update> and <cart:new> it sets the type value used in the operation specified:
<cart:cart> <cart:update> <cart:type>1</cart:type> </cart:update> </cart:cart> ... <cart:new> <cart:type>1</cart:type> </cart:new>
Christopher H. Laco CPAN ID: CLACO cpan@chrislaco.com http://today.icantfocus.com/blog/
To install Handel, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Handel
CPAN shell
perl -MCPAN -e shell install Handel
For more information on module installation, please visit the detailed CPAN module installation guide.