Drupal - динамические параметры для поля text_list

У меня есть пользовательский тип узла, для которого я хочу иметь поле, использующее специальный список со списком на основе list_text. Когда кто-то выбирает тип list_text, обычно можно ввести статический список выбираемых текстов, однако я хочу, чтобы этот список был динамическим, т.е. основанным на результатах db_query. Как лучше всего это сделать с помощью Drupal 7?

Простой пример для пояснения: узел этого пользовательского типа X содержит поле, указывающее на другой узел, поэтому всякий раз, когда создается узел типа X, мне нужно поле со списком, содержащее все остальные узлы.

(Лучшим решением было бы отображать поле со списком только во время создания узла, а не во время редактирования. Но я также мог бы жить с этим, если бы поле со списком отображалось и во время редактирования.)

Я попытался настроить options_select, определив свой собственный тип данных и соответствующим образом реализовав hook_options_list. Поле со списком отображалось во время создания с правильными значениями, однако я не смог его сохранить. Я понятия не имею, что там пошло не так, но при первой отправке оно изменилось на другую тему, и когда я попытался еще раз, я получил Внутренняя Ошибка Сервера. Я вообще на правильном пути, определяя совершенно новый тип данных для поля? наверняка должен быть более простой способ?


person Frank    schedule 17.01.2011    source источник


Ответы (2)


Вы правы в том, что вам не нужен новый тип данных. Вот хорошее руководство о том, как это сделать . Это не специально для D7, но я не видел многого, что еще не применимо. Возможно, есть лучший способ сделать это конкретно в D7, но я бы тоже хотел это знать, если это так :)

person tkrajcar    schedule 18.01.2011
comment
спасибо за ссылку на урок. Это направило меня на правильный путь, и я действительно нашел гораздо более простой способ сделать это с помощью модуля webform. - person Frank; 18.01.2011

Учебник, на который ссылается allegroconmolto, направил меня на правильный путь. Спасибо за это.

Вот более простой способ: руководство

В принципе, как я и предполагал, это распространенная проблема, и, следовательно, простое решение для нее уже включено в модуль webform. Он предоставляет hook_webform_select_options_info, который можно использовать для регистрации метода обратного вызова. Затем метод обратного вызова вызывается каждый раз, когда отображается соответствующий вариант выбора веб-формы, так что вы можете легко заполнить его результатами dbquery или чем-либо еще. Работает как шарм и практически не требует времени для реализации.

person Frank    schedule 18.01.2011