X36 WWW Pear Martin Klíma
[email protected]
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 ... ...
X36WWW: extra přednáška - Šablony 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
X36WWW: extra přednáška - Šablony 3
X36WWW: extra přednáška - Šablony 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 X36WWW: extra přednáška - Šablony 5
QuickForm • HTML_QucickForm • Sada tříd pro obsluhu formulářů • Validace • Server • Klient (JavaScript)
• • • •
Read-only Snadno konfigurovatelné Podpora pro Smarty ...
X36WWW: extra přednáška - Šablony 6
Ukázka – jednoduchý formulář
X36WWW: extra přednáška - Šablony 7
PHP QuickForm
Vložení potřebné knihovny
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 ""; } ?>
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
X36WWW: extra přednáška - Šablony 8
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');
X36WWW: extra přednáška - Šablony 9
Ukázka
X36WWW: extra přednáška - Šablony 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(); ?>
X36WWW: extra přednáška - Šablony 11
Zobrazování jednotlivých
X36WWW: extra přednáška - Šablony 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');
X36WWW: extra přednáška - Šablony 13
Seznam zabudovaných pravidel Rule Name
Argument
required
Rule Description Some input is required in the field.
maxlength
$length
The input can be at most $length characters.
minlength
$length
The input must be at least $length characters.
rangelength
$min,$max
The input must be between $min and $max characters (inclusive).
regex
$rx
The input must match the regular expression $rx.
email
The input must be a likely syntactically valid e-mail address.*
emailorblank
The input must be blank or satisfy the email rule.
lettersonly
The input must contain only alphabetic characters.
alphanumeric
The input must contain only letters and numbers.
numeric
The input must contain a valid positive or negative integer or decimal number.
nopunctuation
The input must not contain any of these characters: ( ) . / * ^ ? # ! @ $ % + = , " ' > < ~ [ ] { }.
nonzero
The input must not begin with zero.
uploadedfile
The element must contain a successfully uploaded file.
maxfilesize
mimetype filename
$size
The uploaded file must be no more than $size bytes.
$mime
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.
$file_rx
X36WWW: extra přednáška - Šablony 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(); ?> X36WWW: extra přednáška - Šablony 15
Vlastní validační pravidla • Lze vytváře vlastní pravidla pomocí metody registerRule() • Vlastní pravidlo jsou dvou typů • Regulární • Callback
X36WWW: extra přednáška - Šablony 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(); ?>
X36WWW: extra přednáška - Šablony 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(); ?>
X36WWW: extra přednáška - Šablony 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
X36WWW: extra přednáška - Šablony 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(); ?> X36WWW: extra přednáška - Šablony 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?
X36WWW: extra přednáška - Šablony 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
X36WWW: extra přednáška - Šablony 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
X36WWW: extra přednáška - Šablony 23
Struktura pole array ( ['frozen'] => 'whether the complete form is frozen', ['javascript'] => 'javascript for client-side validation', ['attributes'] => 'attributes for
X36WWW: extra přednáška - Šablony 27
Děkujeme za pozornost