ВопросКак форму запихать в popup окно?

Всем привет! Подскажите- может кто делал, как форму (реализована в webform) выводить в popup окне... Ставил модуль popup- но так и не понял как он работает! буду признателен!

Комментарии

Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

присоединяюсь к вопросу. Но думаю для этого надо создать форму через forms api прикрутить к slidebox.

19.04.2012 14:15
Аватар пользователя Spleshka
Spleshka написал:

Сделайте по аналогии с логином, только в качестве ID укажите ID блока с вебформой. И, соответственно, уберите проверку на залогиненого пользователя. А так смысл остаётся тем же.

24.04.2012 14:15
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

А через ajax_command_invoke? получится сделать?

27.04.2012 13:45
Аватар пользователя Spleshka
Spleshka написал:

Получится. Как-то так:

$form = drupal_get_form('webform_form_blabla'); // Получить вебформу по её build id.
drupal_add_library('system', 'ui.dialog'); // Подключаем библиотеки для попапа.
 
$commands = array();
$commands[] = ajax_command_append('body', '<div id="popup"></div>'); // Создаём элемент на странице.
$commands[] = ajax_command_html('#popup', render($form)); // Ложим в созданный div форму.
$commands[] = ajax_command_invoke('#popup', 'dialog'); // Открываем форму в попапе.
 
return array('#type' => 'ajax', '#commands' => $commands);

Набросал на коленке, но выглядит рабочим ;)

27.04.2012 14:01
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

Да рабочий код, смотрел выступление твое MinskCamp, ты вроде упоминал об этом, если не webforms а форма созданная мною, я запихаю этот код в функция callback и возвращаю в элемент? Или мне надо создать отдельную форму с одним элементом "Submit" при клике открыватся вторая форма с элементами. Буду признателен. Спасибо

27.04.2012 14:11
Аватар пользователя Spleshka
Spleshka написал:

Если эти формы появляются в разных местах - то делай 2 разных формы. Если же на месте одной появляется другая - то можно и на колбэке от первой. Посмотри в исходники модуля, который я писал для кэмпа (функция dcm_ajax_example_form_ajax_callback()). Там как раз одна форма на колбэке заменяется другой.

27.04.2012 14:16
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

Да можно и так, благадарю за советы)

27.04.2012 14:25
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

Добрый день SplasH!

Что то не получается вывести в popup. Вот сниппет. в Чем проблема?

function input_menu() {
 
  $items['input/examples/more'] = array(
    'page callback' => 'input_page_ajax_callback',
    'access callback' => TRUE,
    'delivery callback' => 'ajax_deliver',
    'theme callback' => 'ajax_base_page_theme',
    'type' => MENU_CALLBACK,
    'file' => 'input.pages.inc',
  );
 
  $items['input/more'] = array(
    'title' => 'Popup',
     'page callback' => 'drupal_get_form',
    'page arguments' => array('input_form'),
    'access arguments' => array('view input'),
  );
 
  return $items;
}
function input_permission() {
  return array(
    'view input' => array(
      'title' => t('View DCM Ajax example page'),
    ),
  );
}
 
function input_form($form, &$form_state) {
 $form['#prefix'] = '<div id="input-form-wrapper">';
  $form['#suffix'] = '</div>';
 
$form['actions'] = array(
    '#type' => 'actions',
  );
 
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Написать заявку'),
    '#ajax' => array(
      'callback' => 'input_form_ajax_callback',
      'wrapper' => 'input-form-wrapper',
    ),
  );
 return $form;
 }

и callback функция

function input_form_ajax_callback($form, $form_state) {
 
    $form = drupal_get_form('input_more_form');
 
   $commands = array();
 
    $commands[] = ajax_command_invoke('#example-form-popup', 'dialog', array('close'));
    $commands[] = ajax_command_invoke('input[name="action"]', 'click');
 
    ctools_include('ajax');
    $commands[] = ctools_ajax_command_redirect('<front>');
 
 return array('#type' => 'ajax', '#commands' => $commands);
28.04.2012 13:29
Аватар пользователя 2goo
2goo написал:

Куда это вообще вставлять?

22.11.2012 07:57
Аватар пользователя Spleshka
Spleshka написал:
function input_menu() {
 
  $items['input/more'] = array(
    'title' => 'Popup',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('input_form'),
    'access arguments' => array('view input'),
  );
 
  return $items;
}
 
function input_permission() {
  return array(
    'view input' => array(
      'title' => t('View DCM Ajax example page'),
    ),
  );
}
 
function input_form($form, &$form_state) {
 
  $form['actions'] = array(
    '#type' => 'actions',
  );
 
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Написать заявку',
    '#ajax' => array(
      'callback' => 'input_form_ajax_callback',
    ),
  );
 
  $form['#attached']['library'][] = array('system', 'ui.dialog');
 
  return $form;
}
 
function input_form_ajax_callback($form, $form_state) {
 
  $form = drupal_get_form('input_more_form');
 
  $commands = array();
 
  // А вот тут чего-то несовсем понятно в вашей логике. 
  // Зачем вы автоматически нажимаете на какую-то кнопку, а потом сразу редирект на главную??
  // Я написал в меру своего понимания ваших действий.
  $commands[] = ajax_command_append('body', '<div id="example-form-popup"></div>');
  $commands[] = ajax_command_html('#example-form-popup', render($form));
  $commands[] = ajax_command_invoke('#example-form-popup', 'dialog');  
  $commands[] = ajax_command_invoke('input[name="action"]', 'click');
 
  ctools_include('ajax');
  $commands[] = ctools_ajax_command_redirect('<front>');
 
  return array('#type' => 'ajax', '#commands' => $commands);
}

Обратите внимание на коменты в коде.

30.04.2012 00:58
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

да редирект надо убрать, там раньше был условия if else. Долго мучался разбирая код в кэмпе. Спасибо огромное

30.04.2012 15:13
Аватар пользователя Code Your Dream
Code Your Dream написал:

Вы можете использовать https://drupal.org/project/popup_forms

07.10.2013 14:00

Комментировать