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.).