WebsiteBaker Community Forum
WebsiteBaker Support (2.8.x) => Droplets & Snippets => Topic started by: aldus on September 03, 2008, 03:41:10 PM
-
A simple modul snipplet for a class for
formulars forms
Once you have the modul installed you can use a class "cForm" to build forms.
Notice: this is not QuickForm (PEAR) and it is not mean as a portation to WebsiteBaker at all;
even no recoding of the package.
Current Version: 0.1.3.beta - 2008-10-07
update: multiple selections support
Requirements:
- WebsiteBaker 2.7
- PHP 5.2.x
Known issues
- No options/radio - groups
- No validations
- No file-upload
ToDo - Roadmap
- add options/radio - groups
- add simple client/serverside validations
- file-upload
Bugfix in 0.1.2 Alpha: Checkbox-bugfix for missplaced "'" single quote ...
Bugfix in 0.1.1 Alpha: Typos ("cancle" instead of "cancel")
Any kind of improvment, critics, recomentations, code-cleanings, warnings and grumble
are always wellcome.
Some examples:
If you want to use this class in the backend you are in the need to import it first, like
<?php
require_once (WB_PATH.'/modules/x_cform/include.php');
?>
If you want to use it inside a template you don't need it.
Initial within some formattributes, you can use any valid attribute as you like inside an assoc. array.
<?php
$form_attribs = Array (
'name' => "wb_addresses_form",
'class' => "xForm",
'action' => $_SERVER['PHP_SELF']
);
$form = new c_form( $form_attribs );
?>
Add a hidden field with the name "id" and a typical value to the formular
<?php
$form->addElement( Array ('type' => 'hidden', 'name' => "id", "value" => $_REQUEST['id']) );
?>
Add a textfield with an label to the formular
<?php
$form->addElement( Array ('type' => 'text', 'label'=> ucfirst($i), 'name' => $i, 'value' => $data[$i] ) );
?>
Add a textarea to the formular
<?php
$form->addElement( Array ('type' => 'textarea', 'label'=> ucfirst($i), 'name' => $i, 'content' => $data[$i] ) );
?>
Add a select to the formular
As a "content" you will have to pass an assoc. array in the form "Key" = value, where the Key is display
in the popup menu. You can also pass a "select"-value to the select.
<?php
$content = array (
'Anna' => 1,
'Judith' => 2,
'Mary Lou' => 3,
'Xanthippe' => 4
}
$form->addElement( Array ('type' => 'select', 'label' => ucfirst($i), 'name' => $i, 'content' => $group_select, 'select'=>3 ) );
?>
Add a submit-button within some javascript.
<?php
$form->addElement ( Array ('type' => 'submit', 'name' => 'submit', 'value' => $TEXT['SAVE'], 'onclick' => "this.submit();") );
?>
update 0.1.3: support for multiple select ...
<?php
$form->addElement ( Array (
'type' => 'select',
'name' => "group_id[]",
'label' => $ADDRESSES['DISPLAYGROUP'],
'content' => $group_select,
'select' => explode(",",$temp_data['groups']), // !
'multiple' =>'multiple',
'size' => 4,
'onload' => "alert(this);"
) );
?>
echo the complete form out of a module or template
<?php
echo $form->toHTML();
?>
Also supported types are "html", for "pur" html-code, "button", "cancel" and "checkbox".
To modify the output you can manipulate/change the template-strings (all public):
- $form_template - holds the complete form, default is:
"\n<form {{ attribs }}>\n{{ hidden }}\n<table>\n{{ content }}</table>\n</form>\n";
within the markers for
- {{ attribs }} :: the formular-attributes, e.g. name, class, onchange, onsubmit, action, method ...
- {{ hidden }} :: where to place the hidden values; by default at the begin of the formular
- {{ content }} :: the complete formular-content
- $element_template - holds a single element, default is:
"<tr>\n\t<td class='left'>{{ label }}</td>\n\t<td class='right'>{{ content }}</td>\n</tr>\n"
within the markers for
- {{ label }} :: where to display the label of the element
- {{ content }} :: where to display the element
So if you want to display the formular-elements inside divs you can easy overwrite the templates as you needed.
Regards
Aldus
[gelöscht durch Administrator]
-
Update/Bugfix for 0.1.2 alpha
- Bugfix for "checkboxes" -> missplaced single quote bug ... could be problematic for some browsers
- Minor typos in the "info.php!" ...
Regards
Aldus
-
Any kind of improvment, critics, recomentations, code-cleanings, warnings and grumble
are always wellcome.
Have some "grumble" 8-)
I don't get the clue what this is all about.
I can't figure out what to do with this - no idea.
But looks very interesting.
Maybe a working example would help understanding.
Regards,
Stefek
-
Make a new Page, Type: "code2", and place the following inside (PHP)
<?php
/**
* @version 0.1.0
* @date 2008-09-16
* @author aldus
* @package WebsiteBaker - code-examples
*
*/
$form_attribs = Array (
'name' => "search",
'class' => "xForm",
'action'=> WB_URL."/search/index.php"
);
$form = new c_form( $form_attribs );
$form->addElement( Array ('type' => 'hidden', 'name' => "page_id", "value" => $page_id ) );
$form->addElement( Array ('type' => 'hidden', 'name' => "section_id", "value" => $section_id ) );
$form->addElement( Array (
'type' => 'text',
'label' => "Suchbegriff: ",
'name' => "string",
'style' => "display:block;float:left;width:200px;"
)
);
$form->addElement( Array('type' => 'html', 'content' => " ") );
$form->addElement( Array (
'type' => 'submit',
'name' => 'submit',
'value' => "Suchen",
'onclick' => "this.submit();",
'style' => "display:block;float:left;width:200px;"
)
);
echo $form->toHTML();
?>
As for other working examples you can take a look at "addresses" ...
Regards
Aldus
-
Make a new Page, Type: "code2", and place the following inside (PHP)
Cool.
Best Regards,
Stefek
-
What's a "formular"?
Can someone please explain in a few sentences what this thingy is and does, without people having to install it first?
Thanks.
-
What's a "formular"?
Can someone please explain in a few sentences what this thingy is and does, without people having to install it first?
Thanks.
I must apologize for the "dinglish" and the confusion about the word - it's simple a form.
Regards
Aldus
-
Update for 0.1.3 -
multiple select support for elementType "select".
Regards
Aldus
-
I just installed x_cForm 0.14 from AMASP successfully.
But when I want to add a page, I can't choose this page type x_cForm because I don't see it in the list.
What's wrong here?
-
Because it's a "code"-modul (snippet) - not a page-module like "form" ...
To use it for the frontend you can use a code/code2 page like in the examples.
If you want to use it for the backend, e.g. inside a modul in "modify.php", you will have to include it first.
Regards
Aldus
-
I found a small bug in your snippet and maybe I can get some help in return...
In line 358 of include.php there is one parameter too much, which brings up an error in php 5.3, as this parameter is deprecated.
$t = mktime( 0, 0, 0, $month, 1, 1, 2001);
However, the deprecated parameter was never intended to use, instead you just can delete on of the numbers "1", as they obviously somehow doubles unintended. Why the code worked anyways I did not follow up.
Well, and now here is my problem:
I see I can do nice date fields with that class, but how can this be integrated with a form? I expect I have somehow to do an addelement() with the date, but don't get it... Any hints?
regards,
Benny
-
Hello Benny
There is a littel "test.php" inside the modules itsleft within some example-code for the use of "dateSelect".
The simples way is to place it as an HTML-content - e.g.
<?php
/**
* Just a simple call within inside a code/code2 section
* Please keep in mind, you don't have to include the module file here, as this one
* is a code-snippet.
* If you want to use it in the backend you will have to include it first, e.g.
* require_once (WB_PATH."/modules/x_cForm/include.php");
*
*/
$form_args = array(
'method' => "post",
'action' => "#",
'class' => "my_example_form_class"
);
$form = new c_form( $form_args );
/**
* Add a simple date-select
*
*/
$form->addElement( array(
'type' => "html",
'name' => "example",
'content' => $form->dateSelect(),
'label' => "example"
)
);
/**
* Add submit button
*
*/
$form->addElement ( array (
'type' => 'submit',
'name' => 'submit',
'value' => $TEXT['SAVE'],
'onclick' => "this.submit();"
)
);
echo $form->toHTML();
unset( $form );
e.g. inside a code/code2 section. As for the (mini)-bug - thanks - as far as i can see version 0.2.0 is uploaded on AMASP.
Kind regards
-
Thanks a lot, that was quite helpful!
Regards,
Benny
-
Hi,
here is some of my code:
$form->addElement( Array (
'type' => 'submit',
'name' => 'submit',
'value' => "Sichern",
'onclick' => "this.submit();",
'style' => "display:block;float:left;width:100px;"
)
);
$form->addElement( Array (
'type' => 'cancel',
'name' => 'cancel',
'value' => "Abbrechen",
'style' => "display:block;float:right;width:100px;"
)
);
These are two buttons, a Submit and a Cancel button. Unfortunately the "cancel" button is interpreted as Textfield. I also checked the code of x_cForm and the word "cancel" is used as type directly. I cannot find anywhere in HTML a type "cancel". Actually the name of the type is "reset"...
Am i getting something wrong here?
Regards,
Benny
-
The second array must have value of 'submit' in the 'type' index.
Regards,
Stefek
-
Can someone describe why to use this in stead of pmform?
-
Can someone describe why to use this in stead of pmform?
Good question. I need those values to put them into a database. To my knowledge PMForm puts all data into one field. This does not allow the use of foreign keys and a couple of more reasons why data usually is put into DB...
I'd be glad if I'm not right....
regards,
Benny
-
Make a new Page, Type: "code2", and place the following inside (PHP)
<?php
/**
* @version 0.1.0
* @date 2008-09-16
* @author aldus
* @package WebsiteBaker - code-examples
*
*/
code example doesnt work when place in code 2 and code 3. Help?
$form_attribs = Array (
'name' => "search",
'class' => "xForm",
'action'=> WB_URL."/search/index.php"
);
$form = new c_form( $form_attribs );
$form->addElement( Array ('type' => 'hidden', 'name' => "page_id", "value" => $page_id ) );
$form->addElement( Array ('type' => 'hidden', 'name' => "section_id", "value" => $section_id ) );
$form->addElement( Array (
'type' => 'text',
'label' => "Suchbegriff: ",
'name' => "string",
'style' => "display:block;float:left;width:200px;"
)
);
$form->addElement( Array('type' => 'html', 'content' => " ") );
$form->addElement( Array (
'type' => 'submit',
'name' => 'submit',
'value' => "Suchen",
'onclick' => "this.submit();",
'style' => "display:block;float:left;width:200px;"
)
);
echo $form->toHTML();
?>
As for other working examples you can take a look at "addresses" ...
Regards
Aldus