PHP class diSelect: PHP-класс для быстрого и удобного создания элементов SELECT на странице
всякий раз, когда я сталкиваюсь с формированием форм на сайте, у меня понижается давление, настроение и вообще общий жизненный тонус. не люблю я их. но деваться некуда, формы нужны, без них никуда. раз работать с ними в любом случае придется, попробуем немного упростить себе жизнь: хотя бы SELECT-ы будем формировать динамически, причем быстро, легко и удобно. для этого 7 лет назад у меня родился класс, который понемногу дорабатывался все эти годы, но не утратил компактность и лаконичность.
начнем с конца, то есть с примеров, как этот класс применяется, сам исходник будет в конце статьи.
итак, представим, что у нас есть хеш-массив (или ассоциативный массив, кому как нравится):
$sel = new diSelect("user_type", "user"); //1-й параметр - это name и id атрибуты будущего SELECT-а
//2-й - выбранное значение SELECT-а по умолчанию
$sel->AddItemArray($user_types_ar); // добавляем возможные варианты из нашего массива
echo $sel->CreateHTML(); // все, выводим SELECT
если массив у нас не ассоциативный, а обычный, то используем метод AddItemArray2 (при этом значение выбранного пункта и текстовое его представление внутри SELECT-а будут совпадать):
добавлять элементы можно и по одному, причем задавая индивидуальные параметры для каждого пункта, например класс для одного из элементов. плюс параметры можно задавать и для SELECT-а в целом:
есть также метод, который упрощает формирование SELECT-а на основе выборки из базы данных, правда в нем используется класс, о котором мы поговорим в будущих статьях. но примера я все же приведу:
$sel = new diSelect("article_id", "");
$sel->AddItemsFromDB($db->rs("articles", "WHERE visible='1' ORDER BY title ASC LIMIT 3"), array("" => "Выберите статью"));
echo $sel->CreateHTML();
результат:
<select id="article_id" name="article_id" size="1">
<option value="8">10 причин, почему дизайнеры бросают дизайн</option>
<option value="9">Как не срывать сроки и планировать время проекта</option>
<option value="3">Как повысить производительность сотрудников офиса</option>
</select>
ну и самое удобное, что есть в классе: быстрый его вызов и формирование SELECT-а одной строкой. покажу два примера: первый на основе все того же хеш-массива $user_types_ar:
<div>Тип: <?=diSelect::FastCreate("user_type", "admin", $user_types_ar, array("" => "Выберите тип пользователя"))?></div>