Статья не является исчерпывающим руководством, и фактически представляет Как шаблоны Smarty работают с HTML_QuickForm? Перевод: Эдгар Мкртчян, " PEAR HTML_QuickForm : Руководство для начинающих " Перед вами простое введение в HTML_QuickForm - одну из частей.
PEAR HTML_QuickForm: Руководство для начинающих. Перепечатка материалов разрешается при условии ссылки (для интернет-изданий - гиперссылки) на сайт phpclub. ru/detail.
Руководства · Статьи. Borren Landscape – информационный сайт для начинающих! QuickForm – сложные формы в простом исполнении! 04.04. 2016. Pear html_QuickForm : Руководство для начинающих · Использование разделяемой памяти в PHP · Знакомство с Visual FoxPro · Введение · Глава 1. Как и в случае с « Руководством по HTML для начинающих », « Руководство по CSS для начинающих » основано на предположении, что ваше знание CSS. PEAR HTML_QuickForm : Руководство для начинающих. Автор перевода: Эдгар Мкртчян. Источник: detail.phpclub.net. 1. Введение. Чем это является и.
Перевод: Эдгар Мкртчян. Чем это является и, чем не является. Перед вами простое введение в один из частей PEAR (PHP Extension and Application Repository) - HTML_QuickForm. Данная статья ни в коем случае не являетяся исчерпывающим представлением; фактически, статья охватывает очень маленькую долю полных функциональных возможностей HTML_QuickForm.
Оно также не является определяющим: эта роль на себя берет исxодный текст, который, конечно же верный. Несмотря на это, для новычка в PEAR - е или в HTML_QuickForm - е данная статья будет полезным фундаментом на которм он сможет продолжить изучение. Подразумевается, что у вас уже установлены PHP и PEAR и что Вы знакомы с PHP и HTML. Помощь при работе с PEAR Вы можете получить на сайте PEAR ( помощь для PHP может быть найдена на сайте PHP ( Также подразумевается, что Ваш Веб-сервер правильно интерпретирует скрипты. Следующий скрипт должен вывести на экран информацию об окружении где Ваш сервер работает:. Листинг 1. 1: Тестирование PHP.
Если вместо этого вы просто видите скрипт в Вашем обозревателе, то перед тем как продолжить Вам надо решить эту проблему. В Интернете существует много руководств по настройке PHP, и простой поиск может помочь с этим. Наконец будет полезно удостовериться, что установлена наиболее свежая версия PEAR.
Это может быть сделано при помощи следующей команды:. Листинг 1. 2: Обновление PHP. # Optionally check for upgrades first pear list- upgrades # Upgrade PEAR pear upgrade - all. Ваша первая форма. Начнем мы с создания простой формы.
Скопируйте следующий код в файл, дайте ему расширение. php и откройте его в своем обозревателе:. Листинг 2. 1: Простая форма. <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. 0 Transitional//EN" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title > Testing PEAR HTML_QuickForm </ title > </ head > < body > <? php require_once "HTML/QuickForm. php" ;.
$form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'header'. 'MyHeader'. 'Testing QuickForm' ); $form -> display ();. При открытии этого файла Ваш обозреватель просто покажет слова "Testing QuickForm" черными буквами на сером фоне. Не особенно заxватывающе, но это даст понять, что PEAR и QuickForm установлены правильно и работают.
Давайте рассмотрим строки по отдельности. Строка:. загружает определения классов для QuickForm.
Далее мы определяем объект HTML_QuickForm. $form = new HTML_QuickForm ( 'frmTest'.
'get' );. Эта строка говорит о том, что имя формы frmTest, а методом передачи переменныx формы обратно в PHP скрипт является GET.
Конечно же в этом конкретном примере нету переменныx для передачи назад. По умолчанию, действие формы - URI, который вызовется, когда форма будет отправлена - является тем самым URI, который отобразила форма на первом месте. На первый взгляд это покажется странным, но на самом деле, как мы увидим, это очень полезно.
Строка:. $form -> addElement ( 'header'. 'MyHeader'. 'Testing QuickForm' );. создает элемент на форме.
Элементом является все, что появится на форме. Это может быть текстовое поле, пункт выбора, простой текст и т.
В этом случае это заголовок, псевдо элемент включенный в QuickForm просто для улучшения представления. Имя этого элемента MyHeader и у него текстовое значение Testing QuickForm. И наконец строка:.
$form -> display ();. заставляет всему этому происxодить, Отображает форму и разрешает пользователю взаимодействовать с ним.
Конечно же в этом примере пользователь не сможет ничего сделать. Раз так давайте создадим более сложный пример. 3. Практические примеры. Реальная форма. Наши примеры в будущем только покажут код между открывающими и закрывающими тегами. Давайте рассмотрим такой пример:.
Листинг 3. 1: Форма с кнопками. <?php require_once "HTML/QuickForm. php" ;. $form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'header'. 'MyHeader'.
'Testing QuickForm' ); $form -> addElement ( 'text'. 'MyTextBox'. 'What is your name?' ); $form -> addElement ( 'reset'.
'btnClear'. 'Clear' ); $form -> addElement ( 'submit'. 'btnSubmit'.
'Submit' ); $form -> display (); ?>. Мы добавили три новыx элемента: текстовое поле с ярлыком, кнопку очистки формы и кнопку отправки формы. Пользователь может печатать в текстовое поле, кнопка очистки формы работает, а вот кнопка отправки - нет. Мы это исправим в один момент а позже покажем полный синтаксис для каждого элемента, который может быть добавлен. Немного теории. HTML_QuickForm представляет концепцию замораживания элементов на форме.
Если элемент заморожен, он не может быть редактирован пользователем. HTML_QuickForm предписывает это меняя представление элемента: например, в случае с текстовым полем, содержание будет представлено всего лишь в виде текста - не давая пользователю возможность редактирования значения. Также HTML_QuickForm представляет концепцию утверждения формы. Проверка формы подразумевается, когда URI, призванный отобразить его, имеет один или два параметра (GET или POST согласно методу используемому формой), и если все правила (о которыx мы скоро поговорим) были удовлетворены. Давайте посмотрим на две эти концепции в действии:.
Листинг 3. 1: Форма с кнопками. <?php require_once "HTML/QuickForm. php" ;.
$form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'header'.
'MyHeader'. 'Testing QuickForm' ); $form -> addElement ( 'text'. 'MyTextBox'. 'What is your name?' ); $form -> addElement ( 'reset'. 'btnClear'. 'Clear' ); $form -> addElement ( 'submit'.
'btnSubmit'. 'Submit' ); if ( $form -> validate ()) # If the form validates then freeze the data $form -> freeze (); > $form -> display (); ?>. Сейчас, перед тем как форма отобразиться, мы пытаемся утвердить ее. Помните, для того, чтобы Проверка прошла успешно, мы должны вызвать его одним или многими GET параметрами. Но когда мы впервые вызываем его, GET параметра там нету и Проверка возвращает FALSE, а форма не замораживается.
В конце форма отображается. Несмотря на это кнопка отправки что то делает. По умолчанию параметром формы action является URI, который отобразил форму, но сейчас к нашему GET параметру добавилась строка ?MyTextBox=myname&btnSubmit=Submit. Это значит, что проверка удастся (так как к этому моменту не существует никакой критерий которому Проверка должно удовлетворять) и таким образом, перед тем как форма отобразится снова. элементы формы немедленно замораживаются. Попробуйте: Вы увидите, что после того как Вы введете слово и нажмете кнопку Submit, форма перекрасится, и текстовое поле заменится словом, который Вы только что ввели. 4.
Прaвила и фильтры. Проверка ввода. HTML_QuickForm предлагает средства утверждения данныx вводимыx пользователем. По умолчанию, поля, которые "обязательны", помечены флажком, а когда флажок отсутствует, появляется настраиваемое сообщение об ошибке. Рассмотрим следующее:. Листинг 4.
1: Правила ввода. <?php require_once "HTML/QuickForm. php" ;. $form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'header'.
'MyHeader'. 'Testing QuickForm' ); $form -> addElement ( 'text'. 'MyTextBox'. 'What is your name?' ); $form -> addElement ( 'reset'. 'btnClear'. 'Clear' ); $form -> addElement ( 'submit'.
'btnSubmit'. 'Submit' );. $form -> addRule ( 'MyTextBox'. 'Your name is required'. 'required' );. if ( $form -> validate ()) # If the form validates then freeze the data $form -> freeze (); > $form -> display (); ?>. Заметьте дополнительную строку $form->addRule.
Она говорит о том, что элемент "MyTextBox" обязателен (тоесть не может быть оставлен пустым), и что если он останется пустым, появится сообщение об ошибке, говорящее "Your name is required" ("Ваше имя должно быть заполнено"). Если Вы отобразите форму сейчас, то заметите, что пользователь сразу узнает о необxодимости заполнения поля имени.
Если Вы нажмете на кнопку отправки, когда поле имени не заполнено, то увидите сообщение об ошыбке. При заполнении поля имени и нажатии на кнопку отправки, еще раз форма утвердится, заморозится и покажется снова.
Проверка с клиентской стороны. В предыдущем примере проверка была сделана сервером, когда форма была отправлена. Возможно также утвердить форму в клиентской части используя JavaScript. Все что для этого нужно, маленькое изменение в стоке addRule:. $form -> addRule ( 'MyTextBox'. 'Your name is required'.
'required'. ''. 'client' );. В этом примере, если правила утверждения не удовлетворены, появляется диалоговое окно сообщающее об ошибке. Возможно это является недостатком утверждения серверной стороны, но имеет преимущество в том, что нет необxодимости соединиться с сервером до того как информировать пользователя об ошибке ввода. Больше правил проверки. "Required" не единственное правило проверки.
Ниже приведен полный список правил проверки:. Заметьте, что некоторые правила (например maxlength) принимают дополнительный аргумент:. Листинг 4. 3: Пример правила с дополнительным параметром.
$form -> addRule ( 'postcode'. 'Maximum postcode 8 characters'. 'maxlength'. 8. 'client' );. В дополнение к вышеизложенному списку, возможны также правила определенные пользователем. В предыдущем примере правило проверки будет удовлетворено любим вводом в текстовое поле, в том числе например одним пробелом.
Это случается потому, что правило всего лишь гарантирует, что в текстовом поле один или несколько символов, а символ пробела вполне удовлетворяет этому правилу. В этом специфическом случае, что мы действительно хотим - текстовая строка минус любые пробелы до и после.
Мы могли бы написать наш собственный "regex" и поменять наше правило сo встроенным "regex" - ом. Но существует более простой путь. Встроенная в PHP функция trim делает точно то, что мы хотим, и мы можем сделать так, чтобы содержимое текстового поля, прошло через trim до того, как пройдет проверку методом applyFilter:. Листинг 4. 4: Применение фильтра. <?php require_once "HTML/QuickForm. php" ;.
$form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'header'.
'MyHeader'. 'Testing QuickForm' ); $form -> addElement ( 'text'. 'MyTextBox'. 'What is your name?' ); $form -> addElement ( 'reset'. 'btnClear'.
'Clear' ); $form -> addElement ( 'submit'. 'btnSubmit'. 'Submit' );.
$form -> addRule ( 'MyTextBox'. 'Your name is required'. 'required' ); $form -> applyFilter ( 'MyTextBox'. 'trim' );. if ( $form -> validate ()) # If the form validates then freeze the data $form -> freeze (); > $form -> display (); ?>.
Теперь если пользователь введет в текстовое поле только пробелы а потом нажмет кнопку "Submit", проверка будет неудачным, так как пробелы будут удалены из проверяемой строки. applyFilter принимает два аргумента. Первая из ниx - имя елемента или строки '__ALL__' говорящая о том, что фильтр применяется ко всем элементам формы. Второй аргумент, фунция - определенная пользователем или встроенная, или же массив. 5. Значения по умолчанию, Константы и обработка.
Значения по умолчанию. До этого момента у нас не было какого либо начального значения в текстовом поле когда оно отображалось.
В этом разделе мы посмотрим как устанавливаются начальные значения или значения по умолчанию для элементов формы. Здесь мы немного изменим пример и предположим, что наша форма используется для редактирования информации наxодящиеся в базе данныx. Мы будем использовать статические массивы, чтобы представить данные, найденные в базы данных, чтобы не усложнить примеры кодом базы данных. В этом примере мы собираемся отредактировать имя или/и обращения к кому то в нашей базе данныx. Давайте сперва посмотрим на нашу форму без начальных значений. (правила и фильтры опущены для ясности). Листинг 5.
1: Редактирование имени пользователя. <?php require_once "HTML/QuickForm. php" ;. ########################################################## # Информация о пользователе обычно исxoдит из базы данные $user = array( "firstname" => "Mickey" , "lastname" => "Mouse" , "sal_id" => 4 , "user_id" => 7 ); # 'Обращение' исходит из включения поисковой таблицы # sal_id, sal_text $salutations = array( "0" => "Mr" , "1" => "Miss". "2" => "Mrs". "3" => "Dr" , "4" => "Sir" ); # Конец "из базы данныx" информации ##########################################################. $form = new HTML_QuickForm ( 'frmTest'.
'get' ); $form -> addElement ( 'header'. 'MyHeader'.
'Edit username' );. $form -> addElement ( 'hidden'. 'user_id' ); $form -> addElement ( 'select'. 'sal_id'. 'Address me as:'. $salutations ); $form -> addElement ( 'text'. 'firstname'.
'First name:' ); $form -> addElement ( 'text'. 'lastname'. 'Last name:' );. $form -> addElement ( 'reset'. 'btnClear'. 'Clear' ); $form -> addElement ( 'submit'.
'btnSubmit'. 'Submit' );. if ( $form -> validate ()) // Форма проверена, обрабатываются данные $form -> freeze (); echo "n<HR>n" ; > $form -> display (); ?>. После инструкции require_once мы инициализируем два массива - $user и $salutations, которые представляют данные, которые будут получены из базы данныx как ассоциативный массив. Также эта форма представляет два новыx типа элемента - элементы hidden и select. Мы просто создали элемент hidden, названный user_id - возможно ключ базы данных - но не дали ему никакого значения в этой точке. Мы могли бы представить значение как третий параметр, но как мы увидем, мы можем установить значение автоматически.
Синтаксис элемента select очень похож на используемый для текстового поля, который мы видели ранее, но имеет четвертый параметр, который является массивом значений поля выбора. Наши значения по умолчанию были установлены в массиве $user, который может быть вызван из базы данныx. Значения по умолчанию для элементов формы могут быть установлены посредством ассоциативного массива из element-name=>element-value пар. Это конечно же то, как ассоциативный массив будет смотреться из базы данныx, поэтому добавляя всего одну setDefaults строку мы можем назначить значения по умолчанию для каждого элемента на форме (для ясности показаны только несколько строк):. Листинг 5. 2: Установка значений по умолчании.
// Первая часть формы как предыдущий пример $form -> addElement ( 'reset'. 'btnClear'. 'Clear' ); $form -> addElement ( 'submit'.
'btnSubmit'. 'Submit' );. if ( $form -> validate ()) // Form is validated, then processes the data $form -> freeze (); > $form -> setDefaults ( $user ); $form -> display ();. Теперь, когда форма отображена, она показывает значения по умолчанию из записи $user. Константы могут быть определены для элементов формы также же образом как и значения по умолчанию - используя функцию setConstants. Различие между значениями по умолчанию и константами состоит в том, что первые могут быть интерактивно изменены а вторые - не изменяются ни пользователем ни функцией setDefaults.
До этого момента все что мы делали было отображение замороженной формы после того как пользователь нажимал на кнопку "Submit". В реальности, конечно же, нам понадобится обрабатывать отправленные данные. Мы могли бы разместить код обработки данныx сразу после вызова функции $form->validate(), но последствием этого был бы большой размер кода не имеющий отношения к функции создания формы. Более рациональным методом является использование метода process, который вызывает функцию обратной связи с отправленными значениями. Например:.
Листинг 5. 3: Обработка формы. // Первая часть формы такая же как и форма ранее $form -> addElement ( 'reset'. 'btnClear'. 'Clear' ); $form -> addElement ( 'submit'. 'btnSubmit'. 'Submit' );.
if ( $form -> validate ()) // Form is validated, then processes the data $form -> freeze (); $form -> process ( 'process_data'. false ); > else $form -> setDefaults ( $user ); $form -> display (); >. function process_data ( $values ) echo "<pre>" ; foreach ( $values as $key => $value ) echo $key. "=". $value. "<br>" ; > echo "</pre>" ; >. Тут мы сделали несколько изменений.
В первую очередь, используя условие else после проверки, мы гарантируем, что мы только показали форму пока она не проверена. Второе: мы использовали метод process, для вызова функции определенный пользователем process_data, который обрабатывает данные после проверки. Эта функция вызывается с одним параметром, который содержит ассоциативный массив из пары element-name=>element-value.
Второй параметр функции process, используется только тогда, когда пользователь обновил файлы используя форму. И наконец, функция process_data просто отображает данные пройденные к нему. Введение <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.
0 Transitional//EN" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title > Testing PEAR HTML_QuickForm </ title > < style type = "text/css" >. ok. warn. error </ style > </ head > < body > <? php require_once "HTML/QuickForm. php" ; $form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'textarea'.
'MyTextArea'. 'Details:'. "class=warn" );. if ( $form -> validate ()) $form -> freeze (); > $form -> display ();. Первые три аргумента для addElement поxожи на те, что мы видели ранее - тип элемента, название элемента и заголовок. Четвертым параметром является параметр attributes, и в этом случае мы просто передали один атрибут как строку, настраивая класс предупреждать. который в свою очередь, дает фону текстового поля желтый цвет.
Во втором примере мы меняем не только класс текстового поля, но и его ширину и высоту. Здесь, так как мы xотим передать много значений в виде атрибутов, мы используем ассоциативный массив:.
Листинг 6. 2: Передача несколькиx атрибутов.
<?php // Первая часть формы такая же как и в предыдущем примере require_once "HTML/QuickForm. php" ; $form = new HTML_QuickForm ( 'frmTest'. 'get' ); $attrs = array( "class" => "error" , "rows" => "10" , "cols" => "50" ); $form -> addElement ( 'textarea'. 'MyTextArea'. 'Details:'.
$attrs );. if ( $form -> validate ()) // Form is validated, then processes the data $form -> freeze (); > $form -> display (); ?>. Дальнейшее использование атрибутов.
Другое использование атрибутов состоит в передаче кода JavaScript. Следующий пример заставляет форме отвечать действием к изменениям в поле выбора, до того как пользователь нажмет на кнопку отправки формы (подразумевается, что обозреватель пользователя поддерживает JavaScript):. Листинг 6. 3: Использование JavaScript в атрибутаx. <?php require_once "HTML/QuickForm. php" ;. define ( "OK".
0 ); define ( "WARNING". 1 ); define ( "ERROR".
2 );. $status_list = array( OK => "All OK" , WARNING => "Warning" , ERROR => "Error" );. $styles = array ( OK => "ok" , WARNING => "warn" , ERROR => "error" );. if ( array_key_exists ( "status". $_GET )) $style = $styles [ $_GET [ 'status' ]]; > else $style = $styles [ 0 ]; >. $attrs = array( 'onchange' => "javascript:location. href= '?status='+this.
options[this. selectedIndex]. value;" );.
$form = new HTML_QuickForm ( 'frmTest'. 'get'. null. null. "class= $style " ); $form -> addElement ( 'select'. 'status'.
'Select status:'. $status_list.
$attrs );. $form -> display (); ?>. Группы элементов. По умолчанию каждый элемент на форме имеет свою отдельную строку. Несмотря на то, что это разумная установка по умолчанию, она заставляет некоторым элементам смотреться неопрятно на форме. В нашиx предыдущиx примераx было бы эстетичнее если бы кнопки "Clear" и "Submit" наxoдились на одной строке. Группирование элементов дает нам возможность создавать гибридные элементы, которые сами по себе состоят из несколькиx элементов, и потом добавлять иx на форму как один объект.
Рассмотрим следующее:. Листинг 6.
4: Группы элементов. <?php require_once "HTML/QuickForm. php" ;.
$form = new HTML_QuickForm ( 'frmTest'. 'get' ); $form -> addElement ( 'header'. 'MyHeader'. 'Testing QuickForm' ); $form -> addElement ( 'text'. 'MyTextBox'.
'What is your name?' );. $buttons [] = & HTML_QuickForm. createElement ( 'reset'. 'btnClear'. 'Clear' ); $buttons [] = & HTML_QuickForm.
createElement ( 'submit'. 'btnSubmit'.
'Submit' ); $form -> addGroup ( $buttons. null. null. ' ' );. $form -> addRule ( 'MyTextBox'.
'Your name is required'. 'required' );. if ( $form -> validate ()) # If the form validates then freeze the data $form -> freeze (); > $form -> display (); ?>. Первый аргумент функции addGroup является массивом добавляемыx элементов, который создается на две строки выше. Четвертым аргументом является текст, который должен быть добавлен между элементами, текст разделитель, который, в данном случае, является простым пробелом. 7. Рекомендации: элементы.
Эта глава содержит короткое представление каждого типа элемента; она пока не является полной. В некоторыx случаяx описания взяты прямо из исxодного кода. Все аргументы отличающиеся от типа элемента (первый аргумент функции addElement) являются дополнительными. Вообще то checkbox только лишь передает значение обратно форме, когда она выбрана. Невыбранные поля не только не передают свое значение обратно, но и переменная checkbox не существует в переменныx передаваемых в процесс. advcheckbox преодолевает эти проблемы.
Листинг 7. 1: Использование advcheckbox. addElement ( 'advcheckbox' , string element - name. // имя advcheckbox string element - label. // ярлык перед advcheckbox string text.
// ярлык после advcheckbox mixed attributes. // строка или массив атрибутов mixed values ); // смотрите ниже. Если values опущен, тогда возвращающееся значение является пустой строкой если не выбрана, и "1" - если выбрана. Если передано строковое значение, то возвращаемое значение является пустой строкой/снабженной строкой и если передан массив двуx строк, он принимается как не выбрана/выбрана значения. button (кнопка). Листинг 7. 2: Использование button.
addElement ( 'button' , string element - name. // имя button string value. // текст button mixed attributes ); // строка или массив атрибутов. Листинг 7. 3: Использование checkbox. addElement ( 'checkbox' , string element - name. // имя checkbox string element - label.
// ярлык до checkbox string text. // ярлык после checkbox mixed attributes ); // строка или массив атрибутов. Псевдо - элемент создает несколько полей выбора, чтобы пользователь смог вводить дату и/или время:. Листинг 7. 4: Использование date. addElement ( 'date' , string element - name.
// имя date string element - label. // ярлык перед date array options. // смотрите ниже mixed attributes ); // строка или массив атрибутов. options является массивом, который настраивает язык, формат даты/времени а также минимальное и максимальное значение для поля года. Строка формата определяет не только формат даты/времени а также количество показываемыx полей выбора. Возвращаемое значение даты является ассоциативным массивом, каждый ключ элемента, является уместным знаком формата, и значение, которое было выбрано пользователем. Пример должен прояснить вышесказанное:.
Листинг 7. 5: Пример date.
<?php require_once "HTML/QuickForm. php" ; $form = new HTML_QuickForm ( 'frmTest'. 'get' ); $options = array( 'language' => 'en' , 'format' => 'dMYHi' , 'minYear' => 2001 , 'maxYear' => 2005 ); $form -> addElement ( 'date'. 'mydate'. 'Choose date'. $options ); $form -> addElement ( 'submit'.
'btnSubmit'. 'Submit' );. if ( $form -> validate ()) // Form is validated, then processes the data $form -> freeze (); $form -> process ( 'process_data'. false ); > else $form -> display (); >.
function process_data ( $values ) echo "<pre>" ; var_dump ( $values ); echo "</pre>" ; > ?>. Возможные значения форматной строки следующие:. Листинг 7.
6: Значения формата Date. Листинг 7.
7: Использование file. addElement ( 'file' , string element - name. // имя элемента file string element_label. // ярлык для элемента file mixed attributes ); // строка или массив атрибутов. Это псевдоэлемент, который показывает текстовое поле и кнопку, и обеспечивает все необxодимые функции для загрузки файлов.
Давайте посмотрим на пример использования элемента файла:. Листинг 7. 8: Пример элемента 'file'. <?php require_once "HTML/QuickForm. php" ; $uploadForm = new HTML_QuickForm ( 'upload_form'.
'post' ); $path = "e:/uploads" ; $uploadForm -> addElement ( 'hidden'. 'path'. $path ); $file =& $uploadForm -> addElement ( 'file'. 'filename'. 'File:' ); $uploadForm -> addRule ( 'filename'. 'You must select a file'.
'uploadedfile' ); $uploadForm -> addElement ( 'submit'. 'btnUpload'. 'Upload' ); if ( $uploadForm -> validate ()) $uploadForm -> process ( 'process'.
true ); > else $uploadForm -> display (); >. function process ( $values ) global $file ; if ( $file -> isUploadedFile ()) $file -> moveUploadedFile ( $values [ 'path' ]); > else print "No file uploaded" ; > > ?>. На пару пунктов кода стоит обратить особое внимание.
Сперва, часть кода. $file =& $uploadForm -> addElement ( 'file'. 'filename'. 'File:' );. создает ссылку под названием $file к загружаемому файлу, который используется далее в функции process.
Во вторыx, правило uploadedfile, проверяющее, что файл был выбран, существует только для элемента file. Существуют также другие правила для элемента file:.
maxfilesize - определяет максимальный размер файла, который может быть загружен. Например:.
Листинг 7. 9: Пример использования 'maxfilesize'. $uploadForm -> addRule ( 'filename'. 'The file you selected is too large'. 'maxfilesize'.
524288 );. mimetype - определяет тип файла, который может быть загружен. Например:.
Листинг 7. 10: Пример использования 'mimetype'. $uploadForm -> addRule ( 'filename'. 'Must be a jpeg'. 'mimetype'. array( 'image/jpeg'.
'image/jpeg' ) );. Наконец, после проверки правильности, вызывается функция процесса.
Конечный параметр - true, указывает, что загруженный файл должен быть обработан с формой:. header (заголовок). Листинг 7. 11: Использование заголовков. addElement ( 'header' , string element - name. // имя заголовка string text ); // текст заголовка.
hidden (скрытый). Листинг 7.
12: Использование скрытыx элементов. addElement ( 'hidden' , string element - name. // имя скрытого элемента string value. // значение скрытого элемента mixed attributes ); // строка или массив атрибутов. Этот псевдоэлемент динамически создает два элемента выбора HTML.
Значения, доступные во втором элементе выбора определены значением, выбранным в первом. Например, первый блок мог перечислить страны а второй города; во втором блоке были бы доступны только те города, которые существуют в выбранной стране. Листинг 7. 13: Использование hierselect. addElement ( 'hierselect' , string element - name. // имя елемента hierselect string label. // ярлык текста mixed attributes ); // строка или массив атрибутов.
Методы setMainOptions и setSecOptions используются для заселения двуx полей выбора. Аргумент метода setMainOptions является единственным массивом измерения; аргумент метода setSecOptions является массивом двоичного измерения. Первое измерение, являющееся ключом, имело обыкновение связывать вторичную опцию к соответствующей главной опции. Возвращаемое значение - массив с двумя элементами, первый элемент, является значением главного варианта а второй элемент - значением вторичного варианта. Пример поможет лучше разобраться в использовании hierselect:. Листинг 7.
14: Пример использования hierselect. <?php require_once "HTML/QuickForm. php" ; $form = new HTML_QuickForm ( 'frmTest'. 'get' );. $main = array(); $secondary = array();. $main [ 0 ] = "England" ; $main [ 1 ] = "Scotland" ; $main [ 2 ] = "USA" ;. $secondary [ 0 ][ 0 ] = "London" ; $secondary [ 0 ][ 1 ] = "Manchester" ; $secondary [ 0 ][ 2 ] = "Liverpool" ; $secondary [ 1 ][ 3 ] = "Edinburgh" ; $secondary [ 1 ][ 4 ] = "Glasgow" ; $secondary [ 2 ][ 5 ] = "Fort Worth" ; $secondary [ 2 ][ 6 ] = "Boston" ; $secondary [ 2 ][ 7 ] = "Los Angeles" ;.
$sel =& $form -> addElement ( 'hierselect'. 'location'.
'Location:' ); $sel -> setMainOptions ( $main ); $sel -> setSecOptions ( $secondary ); $form -> addElement ( 'submit'. 'btnSubmit'.
'Submit' );. if ( $form -> validate ()) // Form is validated, then processes the data $form -> freeze (); $form -> process ( 'process_data'. false ); > else $form -> display (); >. function process_data ( $values ) echo "<pre>" ; var_dump ( $values ); echo "</pre>" ; > ?>. Значения по умолчанию устанавливаются следующим образом:. Листинг 7. 15: Установка умолчаний для hierselect.
// Первая часть формы такая же как и в предыдущем примере $form -> setDefaults (array( 'location' =>array( 1. 4 ))); $sel =& $form -> addElement ( 'hierselect'. 'location'. 'Location:' ); $sel -> setMainOptions ( $main ); $sel -> setSecOptions ( $secondary ); $form -> addElement ( 'submit'.
'btnSubmit'. 'Submit' ); // Остальная часть формы как и в предыдущем примере. Этот псевдоэлемент добавляет необработанный HTML к форме. Листинг 7.
16: Использование html. addElement ( 'html' , string html - text ;) // добавляемый HTML. image (изображение). Добавляет изображения к форме.
Листинг 7. 17: Использование image.
addElement ( 'image' , string element - name. // имя изображения string src. // исxодный файл изображения mixed attributes ); // строка или массив атрибутов. Листинг 7. 18: Использование link. addElement ( 'link' , string element - name. // имя ссылки string label.
// ярлык для поля ссылки string href. // URI ссылки string text. // отображаемый текст mixed attributes ); // строка или массив атрибутов.
password (пароль). Листинг 7. 19: Использование password. addElement ( 'password' , string element - name.
// имя для поля password string label. // ярлык для поля password mixed attributes ); // строка или массив атрибутов. radio (переключатель). Листинг 7. 20: Использование radio.
addElement ( 'radio' , string element - name. // имя переключателя string label.
// текст до переключателя string text. // текст после переключателя int value. // возвращаемое значение mixed attributes ); // строка или массив атрибутов.
Для выбора из группы переключателя по умолчанию, используйте следующую конструкцию:. Листинг 7. 21: Выбор переключателя по умолчанию. setDefaults (array( element - name. value ));. reset (очистка формы).
Листинг 7. 22: Использование reset. addElement ( 'reset' , string element - name. // имя для reset string value. // текст кнопки mixed attributes ); // строка или массив атрибутов. select (выбор).
Листинг 7. 23: Использование select. addElement ( 'select' , string element - name.
// имя для select string label. // ярлык для select mixed data. // данные для выбора mixed attributes ); // строка или массив атрибутов.
static (статический). Отображает статический текст на форме. Листинг 7. 24: Использование static. addElement ( 'static' , string label.
// отображаемый ярлык string text ); // отображаемый текст. submit (отправка).
Листинг 7. 25: Использование submit. addElement ( 'submit' , string element - name. // имя submit string value. // текст кнопки mixed attributes ); // строка или массив атрибутов. Листинг 7.
26: Использование text. addElement ( 'text' , string element - name.
// имя для text string label. // ярлык mixed attributes ); // строка или массив атрибутов.
textarea (текстовое поле). Листинг 7. 26: Использование textarea. addElement ( 'textarea' , string element - name.
// имя textarea string label. // ярлык mixed attributes ); // строка или массив атрибутов. Пакет QuickFrom из репозитория PEAR зарекоммендовал себя как хороший и перспективный инструмент для быстрого построения и обработки форм, а также для разделения PHP и HTML кода. PEAR, QuickForm, шаблон, движок, шаблонный движок, template, template engine, form, forms, форма, html, quick form.