3. Вторая форма – учимся создавать список и загружать файлы
Создадим более сложную форму, добавив в предыдущий вариант, несколько новых элементов. Чтобы сделать код более компактным, для рассмотренных элементов не будем использовать промежуточные переменные:
<?php include_once("./mainfile.php"); include_once("header.php"); // подключаем классы XoopsForm include_once(XOOPS_ROOT_PATH . "/class/xoopsformloader.php"); // создаём объект $form - форму form $form = new XoopsThemeForm("Форма 2", "form", "index.php"); // Определяем content type содержимого формы как - "multipart/form-data" $form->setExtra("enctype='multipart/form-data'"); // Добавляем элемент text в форму for $form->addElement(new XoopsFormText ("Однострочное текстовое поле", "text", 50, 100, $text)); // Добавляем элемент textarea в форму form $form->addElement(new XoopsFormTextArea("Текстовое поле", "textarea", $textarea, 7)); // Создаем объект $select - раскрывающийся список $select = new XoopsFormSelect("Раскрывающееся меню", "MySelect", "Option2"); // Добавляем первый ряд в список $select->addOption("Option1", "Первая опция"); // Добавляем второй ряд в список $select->addOption("Option2", "Вторая опция"); // Добавляем третий ряд в список $select->addOption("Option3", "Третья опция"); // Добавляем список в форму $form->addElement($select); // Создаем объкт $file - поле для загрузки файлов $file = new XoopsFormFile("Поле для загрузки файлов","MyFile", 122880); // Добавляем поле выбора файла в форму $form->addElement($file); // Создаем объект $reset_button - кнопка очистки формы $reset_button = new XoopsFormButton("Очистить", "reset_button", "Очистить", "reset"); // Добавляем кнопку reset в форму form $form->addElement($reset_button); // Добавляем элемент submit в форму form $form->addElement(new XoopsFormButton("Отправить", "submit_button ", "OK", "submit")); // Включаем проверку полей "text" и "textarea" на заполнение стороне клиента $form->setRequired(array("text", "textarea")); // Выводим форму $form->display(); include_once("footer.php"); ?>
Кроме описанных выше текстовых полей и кнопки submit у нас появились новые элементы:
$select = new XoopsFormSelect("Раскрывающееся меню", "MySelect", "Option2");
Здесь мы создаем объект $select - меню со списком элементов. Первый параметр заголовок строки в таблице, где расположен элемент, второй имя элемента. Третий параметр определяет, какая из опций списка будет предустановленна (выбрана по умолчанию).
Далее с помощью метода addOption() мы добавляем пункты меню:
После чего, как и в предыдущем примере добавляем список в форму с помощью метода addElement()
$form->addElement($select);
Мы еще вернемся к рассмотрению списков, а сейчас рассмотрим еще один новый элемент - поле выбора файла для загрузки. Но прежде нужно обратить внимание на следующее: при создании формы мы не указывали enctype (способ кодирования содержимого формы при отправке), по умолчанию же используется значение x-www-form-encoded. Ниже, мы будем добавлять поле для загрузки файлов. Однако тип содержимого в формах содержащих файлы должен быть "multipart/form-data".
Чтобы изменить значения enctype нам потребуется метод setExtra()
$form->setExtra("enctype='multipart/form-data'");
С помощью метода setExtra() мы можем устанавливать значения дополнительных атрибутов формы, таких как enctype.
Следующий элемент – это поле выбора файла для загрузки:
$file = new XoopsFormFile("Поле для загрузки файлов","MyFile", 122880);
Создаем объект $file и добавляем данный элемент в форму:
$form->addElement($file);
Еще раз хочется напомнить, что в комбинации с полем добавления файлов должен использоваться enctype"multipart/form-data". Поэтому не забывайте определять его с помощью метода setExtra()
И, наконец, создаем и добавляем в форму еще одну кнопку, но на этот раз типа reset – кнопку для очистки формы (используется для восстановления значений, заданных по умолчанию):
$reset_button = new XoopsFormButton("Очистить", "reset_button", "Очистить", "reset"); $form->addElement($reset_button);
В предыдущем примере мы создавали кнопку типа submit – тип кнопки устанавливается в четвертом параметре XoopsFormButton(), в данном случае это reset
После всех манипуляций наша форма примет следующий вид:
Вернемся опять к списку. Как известно элемент <SELECT> может быть как в виде выпадающего меню, так и в виде прокручиваемого списка. Кроме того, имеется возможность разрешать множественный выбор элементов списка (не один, а несколько) и устанавливать количество видимых одновременно рядов в списке. Выше мы рассмотрели первый вариант.
$select = new XoopsFormSelect("Раскрывающееся меню", "MySelect", "Option2");
Чтобы создать список с возможностью выбирать несколько пунктов, мы должны в четвертом аргументе XoopsFormSelect() установить значение большее единицы, а пятый аргумент установить в true
$select = new XoopsFormSelect("Список множественного выбора", "MySelect", "Option2", 3, true);
Соответственно в первом и во втором случае получим:
Еще раз обратим внимание как с помощью метода addOption() мы добавляли пункты меню:
Если пунктов меню/списка много нам не обязательно каждый из них добавлять, используя addOption().
Нам достаточно создать ассоциативный массив, содержащий значения и имена пунктов списка. Индекс массива должен соответствовать значению элемента списка, а значение массива должно соответствовать имени данного пункта списка.
После чего мы должны добавить полученный массив с помощью метода addOptionArray()
В вышеприведенном примере это будет
$select->addOptionArray($options);
Другими словами, мы можем добавлять пункты списка по одиночке, используя метод addOption() или предварительно сформировав массив со значениями и именами пунктов списка, добавить их с помощью метода addOptionArray()
Совершенно аналогично с использованием методов addOption() и addOptionArray() добавляются флажки checkbox и переключатели radio (более подробно смотрите в приложении)