Динамический список значений для Webform в Drupal

23 сентября 2014 - 12:48

Модуль Webform предоставляет возможность использовать в качестве элементов списка предустановленные значения, которые могут изменяться. Для примера в самом модуле реализованы такие варианты списков как дни недели, список стран и список штатов США. В данной статье я расскажу, как создать свой список, например, нод определенного типа.

Для того чтобы добавить свой список значений в Webform, в своем модуле имплементируем хук hook_webform_select_options_info(). Для примера получим список нод товаров каталога типа с машинным именем product:

<?php

/**
 * Implements hook_webform_select_options_info().
 */

function MY_MODULE_webform_select_options_info() {
  $items = array();
  $items['products'] = array(
    'title43' => t('Products'),
    'options callback' => 'MY_MODULE_webform_options_products',
  );
  return $items;
}

В параметре options callback указана функция, которая собственно и формирует список в виде ассоциативного массива, ключами которого будут nid, а значениями – заголовки нод определенного типа:

function MY_MODULE_webform_options_products() {
  $products = db_select('node', 'n')
   ->fields('n', array('nid', 'title'))
   ->condition('n.type', 'product')
   ->condition('n.status', 1)
   ->execute()
   ->fetchAllKeyed();
  return $products;
}

Теперь среди предустановленных списков значений в настройках поля Webform типа «Список» будет доступен список нод Products.

Комментарии

Массив $products содержит в виде ключей nid, а значений - заголовки нод. Вы можете по нему пробежаться в цикле foreach и сформировать новый массив, где-то так:
$new_products = array();
foreach ($products as $key => $value) {
  $new_products[$key] = $value . ' (' . $key . ')';
}