Forms API. Пустое значение селекта и значение по умолчанию

Главные вкладки

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 25 декабря 2011 в 2:22

Добрый вечер, коллеги!

Появилось пара вопросов по Forms API, подскажите, пожалуйста, решение. Рисую форму, которая имеет несколько однотипных строк с одинаковым набором полей. Выглядит примерно так:
Предположим, что форму отображаем на странице ноды с id 53.
Селект (обязательный): Малина (value = 1), Черника (value = 2), Брусника (value = 3), Клюква (value = 4). Селект (необязательный): 1-10.
Селект (обязательный): Малина (value = 1), Черника (value = 2), Брусника (value = 3), Клюква (value = 4). Селект (необязательный): 1-10.
Селект (обязательный): Малина (value = 1), Черника (value = 2), Брусника (value = 3), Клюква (value = 4). Селект (необязательный): 1-10.
После отправки на сервер данные должны сохраняться в мою таблицу вида:
nid, berry, rate
53, 1, 8
53, 4, 0
53, 2, NULL
Как видно, каждая строка формы сохраняется в отдельной строке таблицы, там есть общий идентификатор (nid), значения для обязательного селекта и значения необязательного селекта. Вопросы следующие:

1. Есть select с набором опций 0-10. Выбор значения не является обязательным. Пользователь должен указать его только в том случае, если знает/хочет выбрать конкретную цифру. Соответственно, #required стоит false. Но я не могу найти, как сделать так, чтобы в том случае, если пользователь не выбрал руками ни одной опции, на сервер не отправлялось ничего (там тогда по дефолту будет выставлен NULL). В данной ситуации всегда отправляется значение 0 (потому что это первый вариант в списке опций). Возможно, ответ лежит на поверхности, но я уже несколько часов не могу понять, каков он Smile Как сделать первую пустую опцию без value?
2. Данные должны сохраняться в мою таблицу и хочется дать возможность с помощью той же формы эти данные редактировать. Как правильно выбирать и подставлять данные? Писать функцию, которая делает select к моей таблице и подставляет в каждой строке значения для каждого input через default_value?
3. Как передать в форме то, что значения каждой строки этой формы должны записываться в отдельную строку таблицы? Объединять каждую строку в отдельный fieldset или как-то ещё?

Комментарии

Аватар пользователя enemis enemis 25 декабря 2011 в 2:53

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
Рисую форму, которая имеет несколько однотипных строк с одинаковым набором полей

В чем рисуете paint, photoshop, corel? Поделитесь технологией...

1. Напишите в первый option необязательного селекта что то типа невыбрано. А в коде проверку если 0 то а лучше храните 0 и считайте его не выбранным.
2.Да делаете запрос и формируете $formstate. Потом формируете из formstate $form дальше используйте hook_validate для валидации и hook_submit для сохранения, там пишите запросы к бд куда и как сохранить данные из $formstate;
3.Оберните fieldset и потом в submit переберите по fieldset и выполните 3 запрос на insert или update.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 25 декабря 2011 в 13:30

"enemis" wrote:
В чем рисуете paint, photoshop, corel? Поделитесь технологией...
Если это ирония, то совершенно неуместная. Я написал, что пользуюсь Forms API или вам это оказалось непонятным из поста?
"enemis" wrote:
Напишите в первый option необязательного селекта что то типа невыбрано. А в коде проверку если 0 то а лучше храните 0 и считайте его не выбранным.
Так как у меня там целочисленные значения, и в качестве одного из значений есть 0, потому я бы предпочёл не назначать пустому пункту 0.
"enemis" wrote:
2.Да делаете запрос и формируете $formstate. Потом формируете из formstate $form дальше используйте hook_validate для валидации и hook_submit для сохранения, там пишите запросы к бд куда и как сохранить данные из $formstate;
3.Оберните fieldset и потом в submit переберите по fieldset и выполните 3 запрос на insert или update.
Спасибо!