Form API, AHAH и значение по умолчанию в элементе select

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

Аватар пользователя t1mm1 t1mm1 25 ноября 2011 в 3:34

немного предыстории..

столкнулся КЛАДР.
немного покурив документацию, сделал импорт через батч. кому надо, могу поделиться. Но все равно документацию надо курить.

Здача стояла выбора регион - (район или населенный пункт) - населенный пункт - улица.

Теперь суть проблемы. Скажу сразу - в поиске не нашел. Ни тут, ни на других ресурсах. На орге только открытый ишур о дефолтном значении. Модуль examples этом отношении не помог.

в 6-ой ветке можно использовать технологию ahah.
я делаю форму.
есть элемент tree, который объединяет несколько select.
есть внешний select который отрабатывает через ahah функцию выбора "райна" через выбор "региона".
Такого вида
Селект региона
Селект района
Селект населенного пункта
Селект улицы

Callback возращает значения в массивы без проблем.
Но!
выбирая значение в "Селект района" (на котором тоже есть обработчик ахах), я получаю верный массив значений в "Селект населенного пункта". НО! значение в "Селект района" переходит на "по умолчанию", а не тот, который был выбран действием ранее. Да, я делаю в функции коллбека заново билд формы, точнее элемента tree. Делаю запись в кеш формы новых значений массивов района, населенного пункта (без кеша не пропустит внутренний валидатор форм друпала).
то есть выборка происходит, ребилд и запись в кеш - тоже. но почему принимает прежднее значение для селекта?

Если не делать обновление кеша формы, то значения выбирает, и все ок. Но тогда не пропускает валидатор. Говорит, что недопустимое значение.
Если делать кеширование формы - то ошибки само собой не будет. Но тогда селекты сбиваются на дефолтное значение.

А теперь вопрос знатокам и гуру.
Как мне перед записью кеша передать дефолтное значние? установка #default_value не работает. Пробовал.
Или как обойти внутренний валидатор?
Или. Как мне формировать tree, сохраняя значения элементов select, которые не меняются (аналог дефолтного значения options).

Могу конечно обработать это через jquery, ибо толк в извращениях знаю. Но тут будет очень брутально тогда.

Апдейт 1. Посмотрел код модуля иерархикал селект - ответа не нашел. С примером работы с терминами - там генерируется вся форма не один раз. Я не могу этого делать. В клиенской базе только улиц более 800 тыс.
Апдейт 2. Пинать за то, что не выкладываю код - не стоит. Кто сталкивался с работой с селектами и ахах - знают о чем я. Если бы выбор был одного селекта - то проблемы нет. А тут их три.
Апдейт 3. Тем, кто курил Кладр. Есть ли решения по зависимому выбору полной иерархии? Я не знаю что употребляют программисты налоговой РФ, но бд забавная. Мжно загнать это в таксономию, но друпал очень медленно работает в итоге, если очень много терминов....

В общем, Данила, ай нид хелп.

Комментарии

Аватар пользователя tonyk tonyk 25 ноября 2011 в 11:26

Ничего не понятно, тем более без кода.

"t1mm1" wrote:
Кто сталкивался с работой с селектами и ахах - знают о чем я. Если бы выбор был одного селекта - то проблемы нет. А тут их три.

Могу вам одно сказать - практика показывает, что с помощью этих ахахных коллбэков и $form_state['storage'] можно сохранять любые значения и перерисовывать форму как угодно.

Аватар пользователя t1mm1 t1mm1 25 ноября 2011 в 15:17

$form_state['storage']
тут попродробнее можете расписать?
я то меняю форму. я не могу заставить формируемый селект автоматом выставить нужное мне значение.

я уже нашел иной выход из ситуации (связанный с юзабилити, чем с реализацией)

но. проблема вот в чем. при записи кеша, как и ппри рендере элемента формы напрочь отказывается передавать дефолтное значение.

Аватар пользователя tonyk tonyk 30 ноября 2011 в 23:35

"t1mm1" wrote:
$form_state['storage']
тут попродробнее можете расписать?

Ну это прочитайте, что ли:
http://drupal.org/node/144132
http://www.ferolen.com/blog/how-to-create-multistep-form-in-drupal-6-tut...

Без кода я ничего более конкретного сказать не могу.