О проекте | Услуги  | 

Удаленная работа
для творческих личностей

dimaninc
VIP аккаунт
[dimaninc] рейтинг: 1009.68
Веб-проекты любой сложности

Хотите опередить других фрилансеров?

интересное  |  блоги

фрилансеры  |  рейтинг

sunnyshine
[sunnyshine] рейтинг: 1992.50
В портфолио 172 работы
st_valentin
[st_valentin] рейтинг: 1986.13
В портфолио 321 работа
v-grebennikov
[v-grebennikov] рейтинг: 1383.25
В портфолио 1798 работ
dimaninc
VIP аккаунт
[dimaninc] рейтинг: 1009.68
В портфолио 70 работ
stg
[stg] рейтинг: 831.59
В портфолио 211 работ

работы  |  лучшие

интересное  |  статьи

фрилансеры  |  свежак

georgy25
[georgy25] рейтинг: 0.00
Зарегистрирован 22.05.2017 17:54
В портфолио нет работ
mishastik77
[mishastik77] рейтинг: 0.00
Зарегистрирован 22.05.2017 14:27
В портфолио нет работ
mpl8tig
[mpl8tig] рейтинг: 0.00
Зарегистрирован 22.05.2017 12:22
В портфолио нет работ
tgfhkseer
[tgfhkseer] рейтинг: 0.00
Зарегистрирован 21.05.2017 23:51
В портфолио нет работ
kerelojawel97
[kerelojawel97] рейтинг: 0.00
Зарегистрирован 21.05.2017 18:11
В портфолио нет работ

интересное  |  новости

обратная связь
Замечания или пожелания по работе сайта?
Улучшим его персонально для Вас!
Либо пишите на
Пользователей: 62719 | Проектов: 26844

Статьи / PHP class diSelect: PHP-класс для быстрого и удобного создания элементов SELECT на странице

PHP class diSelect: PHP-класс для быстрого и удобного создания элементов SELECT на странице
всякий раз, когда я сталкиваюсь с формированием форм на сайте, у меня понижается давление, настроение и вообще общий жизненный тонус. не люблю я их. но деваться некуда, формы нужны, без них никуда. раз работать с ними в любом случае придется, попробуем немного упростить себе жизнь: хотя бы SELECT-ы будем формировать динамически, причем быстро, легко и удобно. для этого 7 лет назад у меня родился класс, который понемногу дорабатывался все эти годы, но не утратил компактность и лаконичность.

начнем с конца, то есть с примеров, как этот класс применяется, сам исходник будет в конце статьи.

итак, представим, что у нас есть хеш-массив (или ассоциативный массив, кому как нравится):
$user_types_ar = array(
"user" => "Простой пользователь",
"manager" => "Начальник",
"admin" => "Администратор",
);

как из этого сделать SELECT? все просто:
$sel = new diSelect("user_type", "user"); //1-й параметр - это name и id атрибуты будущего SELECT-а
//2-й - выбранное значение SELECT-а по умолчанию
$sel->AddItemArray($user_types_ar); // добавляем возможные варианты из нашего массива
echo $sel->CreateHTML(); // все, выводим SELECT

на выходе получаем вот что:
<select id="user_type" name="user_type" size="1">
<option selected="selected" value="user">Простой пользователь</option>
<option value="manager">Начальник</option>
<option value="admin">Администратор</option>
</select>

если массив у нас не ассоциативный, а обычный, то используем метод AddItemArray2 (при этом значение выбранного пункта и текстовое его представление внутри SELECT-а будут совпадать):
$fruits_ar = array(
"Яблоко",
"Груша",
"Абрикос",
);
$default_fruit = current($fruits_ar);

$sel = new diSelect("fruit", $default_fruit);
$sel->AddItemArray2($fruits_ar);
echo $sel->CreateHTML();

и вот результат:
<select id="fruit" name="fruit" size="1">
<option selected="selected" value="Яблоко">Яблоко</option>
<option value="Груша">Груша</option>
<option value="Абрикос">Абрикос</option>
</select>


добавлять элементы можно и по одному, причем задавая индивидуальные параметры для каждого пункта, например класс для одного из элементов. плюс параметры можно задавать и для SELECT-а в целом:

$sel = new diSelect("character", "");

$sel->SetParam("onchange", "character_onchange();");
$sel->SetParam("style", "width: 100px;");

$sel->AddItem("", "Выберите, кто вам милее");
$sel->AddItem("chtulhu", "Ктулху", array("class" => "kewl"));
$sel->AddItem("lobster", "Лобстер");
$sel->AddItem("shrimp", "Креведко");
echo $sel->CreateHTML();

результат:
<select id="character" name="character" size="1" onchange="character_onchange();" style="width: 100px;">
<option selected="selected" value="">Выберите, кто вам милее</option>
<option value="chtulhu" class="kewl">Ктулху</option>
<option value="lobster">Лобстер</option>
<option value="shrimp">Креведко</option>
</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>

<div>Тип: <select id="user_type" name="user_type" size="1">
<option value="">Выберите тип пользователя</option>
<option value="user">Простой пользователь</option>
<option value="manager">Начальник</option>
<option selected="selected" value="admin">Администратор</option>
</select>
</div>

второй - для выбора даты:
<div>Число: <?=diSelect::FastCreate("day", "", array_combine(range(1,31), range(1,31)), array("" => "Выберите число"))?></div>

<div>Число: <select id="day" name="day" size="1">
<option selected="selected" value="">Выберите число</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
</div>


ссылка на исходник: _class_diselect.php



буду рад выслушать замечания и предложения
( Комментировать )
Тема:
Сообщение:

...