Рассмотрим случай, когда нужно предварительно заполнить поле (ряд полей) формы при переходе на страницу с этой формой в Drupal. Данные для инициализации передаём как часть uri (т.е. метод GET).
Подход проверен для Drupal 7.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//Первый шаг используем hook_form_ID_alter. //Надеюсь, не нужно пояснять что название функции //состовляется из имени модуля и АйДи формы? function moduleName_formID_alter(&$form, &$form_state) { //модифицируем форму, если параметр был передан if (isset($_GET['param'])) { $form['#after_build'][] = '_moduleName_after_build'; } } //тут мы выполним пред-установку значения и вернем модифицированную форму function _moduleName_after_build($form, &$form_state) { //нужно выбрать из form ветку нужного параметра _moduleName_set_elements_value($form['field_param'], $_GET['param']); //если параметров несколько - вызовите ф-цию установки значения для каждого из них ... return $form; } //процедура модификации универсальная, потому её код //объявлен как отдельная функция, ей можно воспользоваться //и для других форм function _moduleName_set_elements_value(&$elements, $value) { foreach (element_children($elements) as $key) { if (isset($elements[$key]) && $elements[$key]) { //Рекурсия по дереву элемента moduleName_set_elements_value($elements[$key], $value); } } if (isset($elements['#type'])) { $elements['#value'] = $value; $elements['#default_value']['value'] = $value; } } |