X36 WWW Pear Martin Klíma xklima@fel.cvut.cz
Pear - hruška Systém pro implementaci a distribuci znovupoužitelných komponent (v PHP) Strukturovaná knihovna open-source (PHP) skriptů Systém pro distribuci skriptů a jejich správu Definuje standard, jak psát PHP kód Další podpůrné prostředky Web stránky Mailing listy Bug report...... 2
Co to umí Spousta dobře napsaných kódů Objektově orientované Dokumentované Umí se to samo nainstalovat Kde to je http://pear.php.net 3
4
Instalace Pear je součástí standardní distribuce PHP od verze 4.3.0 Instalace jednotlivých komponent pear install <package> př. pear install HTTP_Upload seznam dostupných balíčků: pear remote-list instalace z lokálního souboru pear install soubor.tgz 5
QuickForm HTML_QucickForm Sada tříd pro obsluhu formulářů Validace Server Klient (JavaScript) Read-only Snadno konfigurovatelné Podpora pro Smarty... 6
Ukázka jednoduchý formulář 7
PHP QuickForm <? require_once('html/quickform.php'); $form = new HTML_QuickForm('frmTest', 'POST'); $form->addelement('header', 'MyHeader', 'Test QuickForm'); $form->addelement('text', 'MyTextBox', 'Jak se jmenujete?'); $form->addelement('reset', 'btnclear', 'Smazat'); $form->addelement('submit', 'btnsubmit', 'Odeslat'); $form->addrule('mytextbox', 'Jméno je povinné', 'required'); if ($form->validate()) { $form->process('process_data', false); # If the form validates then freeze the data $form->freeze(); } $form->display(); function process_data ($values) { echo "<pre>"; var_dump($values); echo "</pre>"; }?> 8 Vložení potřebné knihovny Založení formuláře Element textové pole Tlačítka Jméno je povinné Dopadla validace dobře? Ano: výsledek bude zobrazen jako prostý text Zavolá se po úspěšném ověření formuláře
PHP QuickForm Vytvářet elementy lze několika způsoby 1. pomocí metody addelement(typ,jméno, hodnota,další parametry) 2. pomocí metody HTML_QuickForm::createElement(typ) 3. přímo pomocí konstruktoru elemntu daného typu např new HTML_QuickForm_text( tb1, Text box x'); 9
Ukázka 10
<? require_once('html/quickform.php'); $form = new HTML_QuickForm('frmTest', 'POST'); $form->addelement('header', 'MyHeader', 'Test QuickForm'); // metoda 1 $form->addelement('text', 'MyTextBox', 'Jak se jmenujete?'); //metoda 2 $novy_element = & $form->createelement('text'); $novy_element->setname('mytextbox2'); $novy_element->setlabel('vaše příjmení?'); $form->addelement($novy_element); //metoda 3 include_once('html/quickform/text.php'); $dalsi_element = new HTML_QuickForm_text('MyTextBox3', 'Číslo konta?'); $form->addelement($dalsi_element); $form->display();?> 11
Zobrazování jednotlivých 12
Pravidla - rules Pravidla jsou aplikována při validaci formuláře Existující pravidla Vlastní pravidla $form->addelement('text', 'MyTextBox', 'Jak se jmenujete?'); $form->addrule('mytextbox', 'Jméno je povinné', 'required'); 13
Seznam zabudovaných pravidel Rule Name required maxlength minlength rangelength regex email emailorblank lettersonly alphanumeric numeric nopunctuation nonzero uploadedfile maxfilesize mimetype filename Argument $length $length $min,$max $rx $size $mime $file_rx Rule Description Some input is required in the field. The input can be at most $length characters. The input must be at least $length characters. The input must be between $min and $max characters (inclusive). The input must match the regular expression $rx. The input must be a likely syntactically valid e-mail address.* The input must be blank or satisfy the email rule. The input must contain only alphabetic characters. The input must contain only letters and numbers. The input must contain a valid positive or negative integer or decimal number. The input must not contain any of these characters: ( ). / * ^? #! @ $ % + =, " ' > < ~ [ ] { }. The input must not begin with zero. The element must contain a successfully uploaded file. The uploaded file must be no more than $size bytes. The uploaded file must have a MIME type of $mime. If $mime is an array of MIME types, the uploaded file must have a MIME type equal to one of the elements in $mime. The uploaded file must have a filename that matches the regular 14 expression $file_rx.
Příklad <? require_once('html/quickform.php'); $form = new HTML_QuickForm('frmTest', 'POST'); $form->addelement('text','subject','subjekt: '); // nejmene 5 znaku $form->addrule('subject','enter a valid subject','minlength',5); if ($form->validate()) { $form->freeze(); } $form->display();?> 15
Vlastní validační pravidla Lze vytváře vlastní pravidla pomocí metody registerrule() Vlastní pravidlo jsou dvou typů Regulární Callback 16
Ukázka callback pravidla <? function zacinaspravne($value) { if (empty($value)) { return false; } if (strlen($value) < 2) return false; if (substr($value,0,2) == "Ma") return true; else return false; } require_once('html/quickform.php'); $form = new HTML_QuickForm('frmTest', 'POST'); $form->registerrule('zacina_spravne','callback','zacinaspravne'); $form->addelement('text','subject','subjekt: '); $form->addelement('submit','send','odeslat'); $form->addrule('subject','subjekt musi zacina na Ma','zacina_spravne'); if ($form->validate()) { $form->freeze(); } $form->display();?> 17
Ukázka pravidla pomocí regulárního výrazu <? require_once('html/quickform.php'); $form = new HTML_QuickForm('frmTest', 'POST'); $form->addelement('text','subject','subjekt: '); $form->addelement('submit','send','odeslat'); $form->registerrule('zacina_spravne_reg','regex','/^ma*/'); $form->addrule('subject','subjekt musi zacina na Ma','zacina_spravne_reg'); if ($form->validate()) { $form->freeze(); } $form->display();?> 18
Group rule Pravidla lze sdružovat a aplikovat na celou skupinu formulářových polí příklad: jméno se sestává ze 3 částí, každá musí mít alespoň 2 znaky 19
Group rule - ukázka <? require_once('html/quickform.php'); $form = new HTML_QuickForm('frmTest', 'POST'); $group[] =& HTML_QuickForm::createElement('text','jmeno'); $group[] =& HTML_QuickForm::createElement('text','prijmeni'); $group[] =& HTML_QuickForm::createElement('text','titul'); $form->addgroup($group,'jmeno','vase jmeno:'); $form->addgrouprule('jmeno','vlozte jmeno, min 2 znaky','minlength',2); $form->addelement('submit','send','odeslat'); if ($form->validate()) { $form->freeze(); } $form->display();?> 20
Propojení se Smarty Jak se vlastně určuje rozložení formuláře? Bylo by možné toto rozložení ovlivnit? Když ovlivnit, tak jak pomocí Smarty? 21
Renderers Existuje řada rendererů Na základě objektového stromu formuláře tvoří datové struktury Default: HTML_QuickForm_Renderer_Default Můžeme: Použít jiný renderere Implementovat vlastní HTML_QuickForm_Renderer_ArraySmarty renderer speciálně pro Smarty datová struktura je pole 22
HTML_QuickForm_Renderer_ArraySmarty Myšlenka: Vytvořit pole, které se zarigistruje ve Smarty objektu. Toto pole bude obsahovat veškeré informace potřebné k vykreslení V rámci smarty šablony se pak budou zobrazovat jednotlivé prvky pole 23
Struktura pole array ( ['frozen'] => 'whether the complete form is frozen', ['javascript'] => 'javascript for client-side validation', ['attributes'] => 'attributes for <form> tag', ['hidden'] => 'html of all hidden elements', ['requirednote'] => 'note about the required elements', ['errors'] => Array ( ['1st_element_name'] => 'Error for the 1st element',... ['nth_element_name'] => 'Error for the nth element', ), ['header'] => Array ( ['1st_header_name'] => 'Header text for the 1st header',... ['nth_header_name'] => 'Header text for the nth header' ), ['1st_element_name'] => 'Array for the 1st element',... ['nth_element_name'] => Array for the nth element' ); 24
Struktura pole - elementy array( ['name'] => 'element name', ['value'] => 'element value', ['type'] => 'type of the element', ['frozen'] => 'whether element is frozen', ['label'] => 'label for the element', ['required'] => 'whether element is required', // if element is not a group: ['html'] => 'HTML for the element', // if element is a group: ['separator'] => 'separator for group elements', ['1st_gitem_name'] => 'Array for the 1st element in group',... ['nth_gitem_name'] => 'Array for the nth element in group' ); 25
Jak se to použije - PHP <? require_once("funkce.inc"); require_once("init_smarty.php"); require_once('html/quickform.php'); require_once 'HTML/QuickForm/Renderer/ArraySmarty.php'; $form = new HTML_QuickForm('frmTest', 'POST'); $form->addelement('text','subject','subjekt: '); $form->addelement('submit','send','odeslat'); $templatovaci_objekt = & new T_Template(); $renderer =& new HTML_QuickForm_Renderer_ArraySmarty($templatovaci_objekt, true); $form->accept($renderer); // assign array with form data $templatovaci_objekt->assign('form', $renderer->toarray()); // nech to zobrazit $templatovaci_objekt->display('index.tpl');?> 26
Jak se to použije - šablona <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows- 1250"> <title>pokusny formular</title> <body> <form {$form.attributes}> {$form.hidden} <div>toto je label: {$form.subject.label}</div> <div>toto je formularove pole: {$form.subject.html}</div> </form> </body> </html> 27
Děkujeme za pozornost