Открытие формы в модальном окне (ajax)

Часто нужно вызвать форму в окне. Вот самы просто пример как это сделать (Drupal 7) .

function name_module_menu() {
 
  $items = array();
 
  $items['test/test_link/%'] = array(
    'page callback' =------> 'name_module_f',
    'page arguments' => array(2),
    'access callback' => true,
    'type' => MENU_CALLBACK,
  );
  return $items;
}
 
 
function name_module_f($name_argument){
//!!!! внимание ! обычнй контент не вернется. работает всегда только с ajax
    $ajax='ajax';
    if ($ajax) {
        ctools_include('ajax');
        ctools_include('modal');
        $form_state = array(
            'ajax' => TRUE,
            'title' => t('Test'), //название формы
        );
 
//передача аргумента в форму
        $form_state['build_info']['args'] = array('name_argument' => $name_argument);
        $output = ctools_modal_form_wrapper('name_module_f_form', $form_state);
 
//если передали в субмите аякс комманду то выполнится он
        if (!empty($form_state['ajax_commands'])) {
            $output = $form_state['ajax_commands'];
        }
 
//рендер ajax
        print ajax_render($output);
        drupal_exit();
    }
    else {
        return drupal_exit();
    }
}
 
function name_module_f_form($form, &$form_state,$name_argument){
 
//храним аргумент если он нужен
        $form['name_argument'] = array(
            '#type' => 'hidden',
            '#value' => $name_argument,
        );
 
// тестовое поле для ввода . например логин
 $form['login'] = array(
        '#type'    => 'textfield',
        '#title'   => '',
        '#description' => '',
        '#required' => TRUE,
        '#default_value' => t('Enter login *'),
        '#attributes' => array(
            'onblur' => "if (this.value == '') {this.value = 'Enter login *'}",
            'onfocus' => "if (this.value == 'Enter login *') {this.value = ''}",
        ),
    );
 
 
 
        $form['actions'] = array('#type' => 'actions');
//для отмены
        $form['actions']['cancel'] = array(
            '#type' => 'submit',
            '#value' => t('Cancel'),
        );
//для выполнения
        $form['actions']['submit'] = array(
            '#type' => 'submit',
            '#value' => t('Delete'),
        );
        return $form;
 
}
 
function name_module_f_form_submit($form, &$form_state)
{
    if ($form_state['clicked_button']['#parents'][0] == 'submit')
    {
//забираем введенные переменные
        $name_argument = $form_state['values']['name_argument'];
        $login = $form_state['values']['login'];
 
//делаем что необходимо
// вызываем например фун-ию которая возвращает при исполнении TRUE или FALSE
 
	$is_ok = TRUE;// статус выболнения нужно операции . можно убрать 
 
	if($is_ok) 
        {
//закрываем форму
            $com[] = ctools_modal_command_dismiss();
// перегружаем страницу , можно не использовать
            $com[] = ctools_ajax_command_reload();
            $form_state['ajax_commands'] = $com;
        }
        else
        {
            drupal_set_message(t("Error: Try again!"), 'error');
            $form_state['rebuild'] = true;
        }
        }
    }
// если нажали кнопку отмена
    else 
    {
        $com[] = ctools_modal_command_dismiss();
        $form_state['ajax_commands'] = $com;
    }
 
}

 

Похожие записи

Комментарии: 2
Аватар пользователя Дмитрий

Так вроде бы все понятно. Вот только не нашел каким именно образом вызывается форма. То есть все есть, и как форма строится и как что работает, а вот как вызывается модальное окно и форма в нем не могу понять. Может подскажете?

Аватар пользователя admin

Ставим ссылку где вам удобно. и модальное окно вызывается

<a href="/test/test_link/name_argument" class="ctools-use-modal">click</a>

 

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

Содержание этого поля является приватным и не предназначено к показу. Если у вас есть аккаунт в Gravatar, связанный с этим e-mail адресом, то он будет использован для отображения аватара.

ЧТО ТО НОВЕНЬКОЕ

О НАС

i-Drup - Это команда молодых и энергичных людей, которые занимаются разработкой и продвижением сайтов. Наша цель - Ваш успех!

КОНТАКТЫ

По всем вопросам создания сайта или других услугах Вы можете написать в форме обратной связи либо нам на почту idrupstudio@gmail.com