Программное создание node_reference поля

Опубликовано 2014.08.01

Добавить такое поле очень просто. Для этого подойдёт стандартный hook_form_alter. Для создания поля типа Node reference нужно создать обыкновенное текстовое поле. А чтобы текстовое поле стало с автокомплитом - в него нужно добавить путь, по которому друпал будет аяксом дергать список подходящих значений. Выглядит это так:
  1. $form['my_author'] = array(
  2. '#type' => 'textfield',
  3. '#title' => 'Автор фото',
  4. '#autocomplete_path' => 'node_reference/autocomplete/node/node_gallery_item/field_coll_photo_author',
  5. );
Этим кодом, я добавил к форме поле с именем my_author. Значение свойства autocomplete_path говорит о том, что значения для автокомплит поля будут такие же, как и у поля с машинным именем field_coll_photo_author у сущности типа node типа node_gallery_item. Что собственно и так визуально видно. Чтобы получить свой путь - добавьте к ноде автокомплит поле, стандартными средствами cck. Затем откройте ноду на редактирование и начните туда что-нибудь вводить. В файербаг браузера вы сразу же увидите путь. Смело его копируйте и подставляйте в свой хук. Готово, пол работы сделано. Вторая часть работы - это добавление дефолтного значения. Допустим, что у вас уже есть идентификатор ноды, который нужно подставить как дефолтный. И чтобы он преобразовался в "Заголовок ноды [nid:3532]" - необходимо добавить к полю свойство value_callback, со значением node_reference_autocomplete_value.
  1. $form['my_author']['#default_value'] = 3532;
  2. $form['#value_callback'] = 'node_reference_autocomplete_value';
После этого всё будет работать как надо. Не забывайте, также, о валидации полей.