Add new comment

Простое модальное окно при помощи CTools


/**
* Implementation of hook_menu().
*/
//Объявляем меню
function example_menu() {
$items = array();
//Обычная страница
$items['test'] = array(
'title' => 'Ajax Test',
'page callback' => 'example_test_main',
'access arguments' => array('access content'),
);
//Страница с сылкой на аякс
$items['test/%ctools_js'] = array(
'page callback' => 'example_test_modal_callback',
'page arguments' => array(1),
//1 аргумент - %ctools используется для передачи аякс
'access arguments' => array('access content'),
);
return $items;
}

/**
* The main page that holds the link to the modal.
*/
function example_test_main() {
// Load the modal library and add the modal javascript.
// Загружаем необходимые подмодули .
ctools_include('modal');
ctools_modal_add_js();
//Делаем ссылку аякс ,для рабочего варианта нужен обязательный класс ctools-use-modal
$output = l('Load modal content', 'test/nojs', array(
'attributes' => array('class' => 'ctools-use-modal')));

return $output;
}
//Функция для передачи в модальное окно
function example_test_modal_callback($js = FALSE) {
$output = t('

Lorem ipsum dolor sit amet...

');
$title = t('Modal example');
//Если передача параметра через аргумент состоялась то
if ($js) {
//Подключение необходимых подмодулей
ctools_include('ajax');
ctools_include('modal');
//Выполняет визуализацию данных ctools_modal_render($title, $output)
/* Раскрытый вариант функции
* function ctools_modal_render($title, $output) {
$commands = array();
$commands[] = ctools_modal_command_display($title, $output);
print ajax_render($commands);
}
*/
ctools_modal_render($title, $output);
// above command will exit().
}
//Если передача не состоялась или отключен джаваскрипт
else {
//Показать заголовок и данные если отключен джаваскрипт
drupal_set_title($title);
return $output;
}
}

/******************************************FORMS**************************************************/
//Второй варинат - более усложненный с передачей формы в модальное окно
function example_test_modal_callback($js = FALSE) {
if ($js) {
//Подключение необходимых подмодулей
ctools_include('ajax');
ctools_include('modal');
//Для работы функции вызова формы в окно ctools_modal_form_wrapper в массив $form_state необходимо передать 2 параметра "ajax" и "title
$form_state = array(
'ajax' => TRUE,
'title' => t('Login'),
);
//Помещаем в выходные данные нужную нам форму
$output = ctools_modal_form_wrapper('user_login', $form_state);
if (empty($output)) {
$output[] = ctools_modal_command_loading();
$output[] = ctools_ajax_command_redirect('user');
}
//Выводим форму функцией ajax_render();
print ajax_render($output);
}
//если джаваскрипт не включен или не передан аргумент
else {
return drupal_get_form('user_login');
}
}

Категория: 
The code has been tested and works
Мультитег: 

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.