Most of the forms in OpenACS are created using the form builder, see the section -called “Using Form Builder: building html forms -dynamically”. For detailed information on the API -take a look here.
The following section shows how you can modify your form to +called “Using Form Builder: building html forms dynamically”. +For detailed information on the API take a look here.
The following section shows how you can modify your form to allow WYSIWYG functionalities.
Convert your page to use ad_form
(some
changes but worth it)
Here an examples. From:
template::form create my_form template::element create my_form my_form_id -label "The ID" -datatype integer -widget hidden template::element create my_form my_input_field_1 -html { size 30 } -label "Label 1" -datatype text -optional template::element create my_form my_input_field_2 -label "Label 2" -datatype text -help_text "Some Help" -after_html {<a name="#">Anchor</a>} - -
To:
+
To:
ad_form -name my_form -form { my_form_id:key(acs_object_id_seq) {my_input_field_1:text,optional @@ -36,20 +34,17 @@ {after_html {<a name="#">Anchor</a>}}} } ... - -
You must not give your your form the same name that your page -has. Otherwise HTMLArea won't load.
+You must not give your form the same name that your page has. +Otherwise HTMLArea won't load.
Convert your textarea widget to a richtext widget and enable htmlarea.
The htmlarea_p
-flag can be used to
prevent WYSIWYG functionality. Defaults to true if left away.
From:
{my_input_field_2:text - -
To:
+
To:
{my_input_field_2:richtext(richtext) {htmlarea_p "t"} - -
The richtext widget presents a list with two elements: text and +
The richtext widget presents a list with two elements: text and
content type. To learn more on existing content types search in
Google for "MIME-TYPES" or take a look at the
cr_mime_types
table.
Make sure that both values are passed as a list to your
@@ -63,16 +58,14 @@
-on_request
block. If you have the format
stored in the database pass this as well else use "text/html"
:
set my_input_field_2 [template::util::richtext::create $my_input_field_2 "text/html"] - -
Now make sure that your SQL queries that do the data +
Now make sure that your SQL queries that do the data
manipulation retrieve the correct value. If you simply use
my_input_field_2
you will store a list.
Thus you need to add an -on_submit
block:
set my_input_field_2 [ template::util::richtext::get_property contents $my_input_field_2] set format [ template::util::richtext::get_property format $my_input_field_2] #This is optional - -
Now the correct values for my_input_field_2
and format
+
Now the correct values for my_input_field_2
and format
are passed to the -new_data
and
-edit_data
blocks which don't need to
get touched.
To make HTMLArea optional per package instance define a string @@ -84,12 +77,10 @@ ... {htmlarea_p $use_wysiwyg_p} - -
The -on_request
switch should set this
+
The -on_request
switch should set this
value for your form.
set htmlarea_p $use_wysiwyg_p - -
All you need now is a configuration page where the user can +
All you need now is a configuration page where the user can
change this setting. Create a configure.tcl
file:
ad_page_contract { @@ -124,20 +115,18 @@ <property name="context">\@context\@</property> <formtemplate id="categories_mode"></formtemplate> - -
And finally reference this page from your admin page
+
And finally reference this page from your admin page
#TCL: set return_url [ad_conn url] #ADP: <a href=configure?<%=[export_vars -url {return_url}]%>>Configure</a> - -+