8.19. How do I modify the Save Cart and Recurring Cart feature? How do they work?
The code for these features is in templates/components/cart. The relative portion that is executed first when you call the basket page is this:
[button
text="Save This Cart"
src="__THEME__/savecart.gif"
extra="class=contentbar2"
hidetext=1
form=basket
mv_check="Save This Cart"
]
mv_todo=return
mv_nextpage=ord/basket
save_cart=cart
[/button]
[button
text="Set As Recurring Order"
src="__THEME__/saverecur.gif"
extra="class=contentbar2"
hidetext=1
form=basket
mv_check="Set As Recurring Order"
]
[set save_cart]recurring[/set]
mv_todo=return
mv_nextpage=ord/basket
save_cart=recurring
[/button]
This creates two buttons that set save_cart to either 'cart' or 'recurring', then go to the ord/basket page (where you are already). When clicked, one of these two code blocks will be executed:
[if value save_cart eq 'recurring']
<FORM ACTION="[process-target]" METHOD=POST>
To save this recurring order, give it a nickname, then press 'Save Cart'.<br>
Nickname:
<INPUT TYPE=TEXT NAME="c_nickname" SIZE=11 VALUE="[scratch just_nickname]">
<input type=hidden name=mv_session_id value="[data session id]">
<INPUT TYPE=HIDDEN NAME="c_recurring" VALUE="1">
<INPUT TYPE=HIDDEN NAME="save_cart" VALUE="recurring">
<INPUT TYPE=HIDDEN NAME="mv_todo" VALUE="return">
<INPUT TYPE=HIDDEN NAME="mv_check" VALUE="Save Cart">
<INPUT TYPE=SUBMIT VALUE="Save Cart">
</FORM>
[elsif value save_cart eq 'cart']
<FORM ACTION="[process-target]" METHOD=POST>
To save this cart, give it a nickname, then press 'Save Cart'.<br>
Nickname:
<INPUT TYPE=TEXT NAME="c_nickname" SIZE=11 VALUE="[scratch just_nickname]">
<INPUT TYPE=HIDDEN NAME="c_recurring" VALUE="0">
<INPUT TYPE=HIDDEN NAME="save_cart" VALUE="cart">
<INPUT TYPE=HIDDEN NAME="mv_todo" VALUE="return">
<INPUT TYPE=HIDDEN NAME="mv_check" VALUE="Save Cart">
<input type=hidden name=mv_session_id vlaue="[data session id]">
<INPUT TYPE=SUBMIT VALUE="Save Cart">
</FORM>
[/elsif]
The "nickname" for the cart is set earlier via:
[if !scratch just_nickname] [seti just_nickname][tag time]%b-%d-%Y[/tag][/seti] [/if]
The real work is done because of this: <INPUT TYPE=HIDDEN NAME="mv_check" VALUE="Save Cart"> which calls the following code after the the user clicks "Save Cart":
[set Save Cart] mv_todo=return mv_nextpage=ord/basket save_cart=none [save_cart nickname="[value c_nickname]" recurring="[value c_recurring]"] [/set]
Which in turn calls the usertag "save_cart" with a nickname parameter and a recurring parameter. Depending on which button was clicked, recurring will either be 0 (for "Save This Cart") or 1 (for "Set As Recurring Order"). The save_cart usertag adds the cart to the userdb.carts field as a Perl data structure (hashes, arrays, etc.).