Forum OpenACS Q&A: Re: E-commerce 'category-browse-subcategory.tcl'
Posted by
Richard Hamilton
on 12/21/08 02:53 PM
# TCL PAGE BEGIN - remove me # Demo of ad_form ad_page_contract { @author Richard Hamilton (mailto:richard.hamilton@webteamworks.com) @creation-date 21-12-2008 @cvs-id@ $Id$ Demonstration of ad_form calls and multiple forms per page } { } -properties { context:onevalue } set title [ad_quotehtml "Ricky's little ad_form demo"] set context [list "Demo"] # The following condition would tel you if the request is for a new form or if the form already exists - i.e. the # user wants to edit the data already submitted. This is used when implementing an add/edit page. # #if {[template::form is_request form_one] } { } # # In contrast, the following condition would tell you if the request is for a valid form that is already defined to # which one may want to add additional fields based upon conditional statements: # #if [template::form is_valid form_one] { } # # When any of the forms is submitted (and you can specify as many buttons as you like on each form), by default # the values will be passed back to this tcl file for processing using the introspective facilities provides by # template::form::get_button or template::form::get_action # # The structure of your add/edit page therefore is basically arranged around three modes controlled by conditional # statements that direct execution according to the current state of the form accessible using the template::form api. # OK, here we go....let's declare the forms template::form create form_one template::form create form_two # By the way, if you add and -html {name value} to the end of the above you can specify any required form attributes # such as javascript references and MIME specs as per oacs documentation on form-procs.tcl # Check whether we arrived here from a previous form submission or if these are to be new forms if {[template::form is_valid form_one]} { set button_clicked "Form One's '[template::form get_button form_one]' Button" } elseif {[template::form is_valid form_two]} { set button_clicked "Form Two's '[template::form get_button form_two]' Button" } else { # The forms have not previously been declared so now declare the form elements # Set this variable to avoid an error in the template set button_clicked "f" # Start of elements for form_one template::element create form_one form_one_id \ -widget hidden \ -datatype number \ -value 1 template::element create form_one form_one_field_one \ -datatype text \ -label "Field 1" \ -html { size 10 maxlength 10} \ -value "" template::element create form_one form_one_field_two \ -widget textarea \ -datatype text \ -label "Field 2" \ -html { rows 5 cols 80 wrap hard } \ -value "You can specify default values" template::element create form_one form_one_field_three \ -widget checkbox \ -datatype boolean \ -label "Field 3" \ -options { { High t } } \ -value "f" # End of elements for form_one # Start of elements for form_two template::element create form_two form_two_id \ -widget hidden \ -datatype number \ -value 1 template::element create form_two form_two_field_one \ -datatype text \ -label "Field 1" \ -html { size 10 maxlength 10} \ -value "" template::element create form_two form_two_field_two \ -widget textarea \ -datatype text \ -label "Field 2" \ -html { rows 8 cols 100 wrap hard } \ -value "You can also specify style sheet classes or other html on a per element basis" template::element create form_two form_two_field_three \ -widget checkbox \ -datatype boolean \ -label "Field 3" \ -options { { High t } } \ -value "f" # End of elements for form_two } ad_return_template # TCL PAGE END - remove me # ADP PAGE BEGIN - remove me <master> <property name="title">@title@</property> <property name="context">@context@</property> <h2>Ricky's little ad_form demo</h2> <if @button_clicked@ eq "f"> <h3>Form One</h1> <formtemplate id="form_one"></formtemplate> <h3>Form Two</h1> <formtemplate id="form_two"></formtemplate> </if> <else> <p> The following button was clicked: @button_clicked@ </p> <p> To try me again click <a href="ad_form_demo">here</a> </p> <p> The documentation for template::form can be found <a href="/api-doc/proc-view?proc=template::form">here</a> </p> </else> # ADP PAGE END - remove me