Всплывающее окно с формой, созданной в своём модуле

Постоянно в работе сталкиваюсь с проблемой необходимости вывода своей формы, которую создал в своем модуле, во всплывающем окне.
На текущий момент есть несколько модулей для отображения форм во всплывающем окне, такие как popups, modal_form, colorbox, lightbox2, но они все заточены под конкретные стандартные формы друпала (такие как форма логина или регистрации), или же под модуль webform (чем я, собственно, и обходился в прошлых проектах).
На самом деле нам не нужны никакие лишние модули.
Весь нужный функционал есть в модуле ctools, который и так всегда стоит на всех Друпал-сайтах, потому что он есть в зависимостях модуля views.
Для того, чтобы сделать работающую форму, которая открывается во всплывающем окне, нужно следовать это инструкции: http://deeson-online.co.uk/labs/insert-form-pop-modal-ctools-and-drupal-7
Т.е. принцип действия предельно прост - ctools помогает отобразить нашу форму во всплывающем окне, а мы в сабмите формы используем стандартный друпаловский ajax api для того чтобы взаимодействовать со страницей после сабмита формы (как в том примере - закрыть окно и изменить содержимое какого-то блока, этого в большинстве случаев более чем достаточно).
От себя только добавлю, что для того, чтобы передать параметры в вызываемую форму, можно в массив $form_state добавить еще дополнительный параметр, например:

$form_state = array(
 'ajax' => TRUE,
 'title' => t('Some title'),
 'args' => array('nid' => $nid),
);

и в самой форме получить его:

function some_form($form, $form_state) {
...
drupal_set_message($form_state['args']['nid']);
...
}

Список команд для работы с ajax api можно почитать, например, здесь http://xandeadx.ru/blog/drupal/492

Удачи!

Drupal 7

Comments

Add new comment