Вы здесь

Реализация кастомных полей для типа материала

0

Вечер добрый! Цель такая: добавить в форму создания/редактирования материала определенного типа:

  • checkbox,
  • четыре поля с датами,

checkbox по умолчанию не поставлен, если его поставить -- вываливаются поля с датами.

Планирую вот что: сделать кастомный модуль, в коде реализовать:

  1. программное создание поля и экземпляра field_create_field и field_create_instanse в .install
  2. hook_form_node_form_alter
  3. в сабмите формы сохраняю значения в поля
  4. в hook_node_prepare будут http запросы, результаты которых запишутся в поля с датами (или не запишутся, если с ответом что-то не то), запросы пойдут при условии, что checkbox не установлен

с таким подходом, на какие я грабли могу наткнуться (чую, что с form_alter)? и что бы вы избрали в качестве решения подобной задачи?

Версия Drupal: 
7.x
Категория: 
Field APIForm API
Вопрос задан 16.03.2016 - 19:50

программное создание поля и экземпляра field_create_field и field_create_instanse в .install

Почему нельзя создать через админку как обычно?

Комментарий оставлен 16.03.2016 - 21:41

мне для деплоя всё равно необходимо все движения в БД реализовывать в коде

Комментарий оставлен 17.03.2016 - 16:29

Странный вопрос. А есть какие то альтернативные решения?

Комментарий оставлен 17.03.2016 - 22:11

про странный вопрос адресовано мне? решений других я с ходу не вижу, подумал о запасных вариантах и потому спросил
запросы для заполнения полей, правда сделал не в prepare, а в _node_submit, остался alter формы

Комментарий оставлен 18.03.2016 - 20:16

Ответы

0

если кому интересно -- сообщаю о результате.

  1. создается всё на отлично, если возникают ошибки FieldException -- проверять таблицы field_data_field_foo и field_revision_field_foo (иногда они остаются в БД после тестов и т.п.) и field_config + field_config_instance

  2. допиливая форму, обнаружил те самые грабли, про которые спрашивал, -- #states (Form API) дружится с полями дат нетривиально — подружил с помощью #after_build (в конструкторе добавил филдсет с заданным #states, в after_build функции перебросил поля в филдсет, unset и вернул форму). И никакой conditional_fields не нужен.

  3. в сабмите поля дат сохраняются подобным образом:
    $node->field_custom_dates[LANGUAGE_NONE][0]['value']
    $node->field_custom_dates[LANGUAGE_NONE][0]['value2'] -- это если используется интервал и нужно задать дату завершения

  4. hook_node_prepare не понадобился, сделал всё в hook_node_submit

Ответ дан 19.03.2016 - 16:55
0

Судя по условию подходит стандартное решение - https://www.drupal.org/project/conditional_fields

Ответ дан 16.03.2016 - 21:17

это же States API для полей. а остальное? это же две-три строки в коде вы предлагаете обменять на целый модуль

Комментарий оставлен 17.03.2016 - 16:43