Multiline textareas
From this version onwards (:input textarea...:)
can handle default text (including values loaded from $InputValues).
To specify a multiline textarea content in the wiki page, enclose it with value=[=...content here...=]
.
(:input form:) (:input textarea t1 value="[=Multiline content=]" cols=20 rows=3:) (:input textarea t2 [=Multi line content=] cols=20 rows=3:) (:input end:) |
Questions answered by this recipe
How to pre-fill a "textarea" input control with a value? (From the wiki page or from a script).
How to preserve textarea content when posting is unsuccessful and you are returned to the form?
Markup allowing to create textareas pre-filled with content
The default PmWiki Forms (:input textarea:)
markup was only able to produce empty text areas.
This recipe adds a new (:textarea:)(:textareaend:)
markup command.
Markup('textarea', '<split', '/\\(:textarea\\s*(.*?):\\)(.*?)\\(:textareaend:\\)/esi', "FmtTextArea(\$pagename,PSS('$1'),PSS('$2'))"); function FmtTextArea($pagename, $args, $value) { global $InputValues; $opt = ParseArgs($args); if (@$opt[''][0]>'' && ! @$opt['name'])$opt['name'] = $opt[''][0]; $attributes = array('name', 'id', 'class', 'rows', 'cols', 'maxlength', 'accesskey', 'disabled', 'readonly', 'style'); $myattr = ""; foreach($attributes as $k) { if(isset($opt[$k])) $myattr.=" $k=\"".htmlspecialchars($opt[$k])."\"";} if(!strlen($value))$value = htmlspecialchars(@$InputValues[@$opt['name']]); return Keep(FmtPageName("<textarea $myattr>$value</textarea>", $pagename)); }
(:textarea name=area1 cols=40 rows=4 class=inputbox:)Some text New line.(:textareaend:)
Perhaps more importantly, it is possible to pre-populate the content from a script/recipe with the $InputValues array. See a section in InputDefault. (I am using it this way). Hope this helps somebody. --Petko
Notes
If you're entering markup in the text area, line breaks like \\ should be entered as \\\\ --SteP
Preserving content
You can preserve content entered into the textarea, so if a posting error occurs, and you are returned to the form, your typed in content is still there. Add to a local config file:
# POST input values will be preserved foreach ($_POST as $k=>$v) { if(!is_array($v)) $InputValues[$k] = htmlspecialchars($v); }
I am using this now for all general form text input, in FoxForum and other Fox applications. HansB
Release Notes
Comments
Hi Petko, this is a very helpful markup! Is it possible to modify it so one can enter into the markup the name without having to write name=text for instance, like (:textarea text :)(:textareaend:)
, the same as it is possible with (:input:)
markup? I keep forgetting to type name= . HansB April 19, 2007, at 03:36 AM
(:textarea Field1 cols=40 rows=2:)
. --Petko April 19, 2007, at 04:23 AM
I see in the page history that there's some controversy about whether this recipe is deprecated or not. As far as I can tell, (:input textarea:) and (:input default:) do not allow line breaks in default values. Since support for line breaks is one of the main reasons to use a textarea reather than a text input, it seems to me that this recipe (or equivalent, such as the one provided by ZAP) will be needed until such time as line breaks are supported. Let me know if I'm wrong about that.
Ben Stallings June 10, 2007, at 10:06 AM
The input textarea field now accepts multiline content if wrapped with [=...=]
, so I am marking this recipe as obsolete. This page could, however, be useful for people searching for this feature to find it. --Petko August 26, 2009, at 08:57 AM