Изменяем дефолтное значение поля Term reference на значение из последнего созданного материала

При наполнение какого-нибудь каталога, основанного на таксономии, в форме создания материала удобно изменять дефолтное значение поля таксономии на значение из предыдущего созданного материала. Например создав материал с термином "Горячие блюда" и открыв форму добавления нового материала, в поле будет выбрано не значение указанное в настройках поля, а термин "Горячие блюда":
/**
 * Implements hook_form_alter()
 */
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'NODETYPE_node_form' && !$form['nid']['#value']) {
    $last_tid = db_select('field_data_FIELDNAME', 'f')
      ->fields('f', array('FIELDNAME_tid'))
      ->condition('f.entity_type', 'node')
      ->condition('f.bundle', 'NODETYPE')
      ->orderBy('f.entity_id', 'DESC')
      ->range(0, 1)
      ->execute()
      ->fetchField();
    $lang = $form['FIELDNAME']['#language'];
    $form['FIELDNAME'][$lang]['#default_value'][0] = $last_tid;
  }
}

Вместо MODULENAME прописать имя модуля, вместо NODETYPE — тип материала, вместо FIELDNAME — имя поля.

Код работает для виджета Select. С другими не пробовал.

Написанное актуально для
Drupal 7
Теги:
работа с полями, работа с формами, таксономия
Добавлено: 30 Июля 2018 07:17:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...