Читать «Журнал PC Magazine/RE №11/2009» онлайн - страница 97
PC Magazine/RE
Функция-валидатор проверяет выбранное в выпадающем списке значение и, если оно не one, посылает сообщение об ошибке с указанием, какой элемент формы вызвал ошибку. Функция-сабмиттер выводит на экран введенные пользователем значения. В реальном случае эта функция должна будет сохранить данные в базе данных.
При желании программист может в массиве $form функции test_form задать свойство #submit, содержащее массив обработчиков значений и свойство #validate с массивом валидаторов (см. листинг 4). Зеленым цветом выделены строки, добавленные к ранее описанным функциям. Код модуля также дополнится функциями из листинга 5.
Листинг 4
function test_form($form_state) {
$form["example_text_field"] = array(
'#type' => 'textfield',
'#title' => 'Example text field',
'#description' => 'Text must contain more then
3 symbols',
);
$options = array(
0 => 'zero',
1 => 'one',
2 => 'two',
);
$form["example_select"] = array(
'#type' => 'select',
'#title' => 'Example select list',
'#options' => $options,
'#description' => t('You can select only value "one"
in this form'),
);
$form["submit"] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form["#validate"] = array('test_validate_first',
'test_validate_second');
$form["#submit"] = array('test_submit_first',
'test_submit_second');
return $form;
}
Листинг 5
function test_validate_first($form, &$form_state) {
if(mb_strlen($form_state['values']['example_text_field']) < 3) {
form_set_error('example_text_field', t('Text must contain more then 3 symbols'));
}
}
function test_validate_second($form, &$form_state) {
if($form_state['values']['example_select'] != 1) {
form_set_error('example_select', t('You must select value "one" in select list :)'));
}
}
function test_submit_first($form, &$form_state) {
drupal_set_message('First submitter');
drupal_set_message("textbox: " . $form_state['values']['example_text']);
}
function test_submit_second($form, &$form_state) {
drupal_set_message('Second submitter');
drupal_set_message("selectlist: " . $form_state['values']['example_select']);
}
Здесь добавлен валидатор, который проверяет текст, введенный в текстовое поле; если его длина оказывается меньше трех символов, то генерируется сообщение об ошибке.
При создании форм всегда рекомендуется использовать не стандартные валидаторы и сабмиттеры, а объявлять их явно, так как в этом случае сторонние программисты смогут дополнить массивы #submit и #validate своими функциями. Если используются стандартные валидаторы и сабмиттеры, то сторонние программисты смогут только заменить существующие функции своими, а это не всегда удобно.
На заметку: полезные модули
Signwriter. Часто бывает необходимо использовать в заголовке страницы или меню какой-либо экзотический шрифт, отсутствующий у большинства посетителей сайта. Модуль Signwriter генерирует картинки с текстом, написанным заданным шрифтом (шрифт предварительно должен был закачан на сервер). Через меню администратор может включить замену заголовков страниц и блоков созданными картинками, а через специальную функцию и вовсе можно заменить картинками любой текст.
Blocktheme. Не всегда удобно создавать и закачивать на сервер шаблоны под каждый используемый на сайте блок. Кроме того, реализованная в Drupal система масок имен для шаблонов не для всех задач бывает достаточно гибкой. Модуль Blocktheme позволяет через интерфейс управления блоками выбрать для каждого из них один из заранее созданных шаблонов.
Devel. Мощный инструмент в руках Drupal-разработчика. Разработчику тем оформления модуль Devel предоставляет информацию обо всех используемых для генерации страницы шаблонах и функциях темизации.
PNG Fix. Модуль, исправляющий проблему с непрозрачностью PNG-файлов в браузерах IE 5.5 и IE 6. Настраивается работа модуля через интерфейс администратора, изменение файлов темы оформления не требуется.