Форма регистрации в мероприятии с помощью webform в Drupal 7

Понадобилось сделать на сайте формочку, в который бы выводились запланированные администрацией клуба тренировки, а зарегистрированные пользователи могли выбрать из списка тренировку и оставить свою заявку на участие. Итак, приступим!

Скажу сразу, решения из коробки не нашлось. Но в реализации нет ничего хитрого для тех кто знает тонкости работы Webform, умеет делать модули и эксплуатировать хуки.

  1. Устанавливаем модуль Webform.
  2. Создаем тип материала Тренировка, рабочее название training. И сразу создадим несколько материалов-тренировок. Я вместо заголовка поставил даты.
  3. Создаем форму, а вней создаем компонент формы Тренировка типа select. Теперь все внимание на опцию Load a pre-built option list.

    2.png

Идея собственно заключается в том, чтобы написать модуль, в котором мы сделаем свой собственный тип Training, который будет возвращать ноды типа training в это поле выбора.

Итак, создадим простейший модуль, в котором переопределим хук, отвечающий за вывод набора опций в Load a pre-built option list

function mymodule_webform_select_options_info()
{
    $items = array();
    if (function_exists('_mymodule_get_nodes')) {
        $items['event-nodes'] = array(
            'title' => t('Trainings'),
            'options callback' => '_mymodule_get_nodes',
        );
    }
    return $items;
}

Эта функция добавит новый вид содержимого для поля выбора под названием Trainings. Теперь в этом же модуле нужно разместить функцию которая будет выполняться при выборе опции Training в Load a pre-built option list.

function _mymodule_get_nodes()
{
    $query = db_select('node','n')
            ->fields('n', array('nid', 'title'))
            ->condition('type', 'training')
            ->orderBy('title');

    $items = array();
    foreach ($query->execute() as $node) {
        $items[$node->nid] = $node->title;
    }
    return $items;
}

Эта функция находит все ноды типа training и отдает их список.

Теперь, если мы зайдем в редактирование компонента Training в нашей форме и откроем список Load a pre-built option list, увидим нашу опцию Training.

1.png

Вы берем эту опцию и увидим как список Options наполнится датами из наших, созданных ранее, материалов.

3.png

В дальнейшем, при добавление новых материалов типа training, этот список будет пополняться автоматически. Все!

Комментарии