Модуль CTools, был написан программистом по имени Earl Miles. Он так же написал такие модули Views, Panels и другие. CTools предоставляет большое количество вспомогательных функций, которые упрощают жизнь программисту. На текущий момент у модуля CTools нет официальной страницы с документацией.

Это описание одной из фич модуля CTools, а именно изменение модального окна.

Простой вариант

Темизируем любое окно, вызванное ссылкой/кнопкой.

<?php
/**
 * Implements hook_init()
 */
function example_init() {
  // Стиль для модального окна.
  drupal_add_js(array(
    'example-modal' => array(
      'modalSize' => array(
        'type' => 'fixed',
        'width' => 850,
        'height' => 550,
      ),
      // Добавляем анимацию.
      'animation' => 'fadeIn',
    ),
  ), 'setting');
}
// Остается добавить класс "ctools-example-modal" в ссылку,
// кнопку или другой элемент, который вызывает модальное окно.

Вариант сложнее

Так можно создавать страницы, вызывая форму создания страницы в модальном окне.

<?php
/**
 * Implements hook_menu().
 */
function example_menu(){
  $items['ajax-create-page'] = array(
    'title'             => 'Create page',
    'type'              => MENU_CALLBACK,
    'access callback'   => true,
    'page callback'     => 'example_ajax_callback',
    'delivery callback' => 'ajax_deliver',
  );
  return $items;
}

/**
 * Ajax callback for create page using modal window.
 *
 * @return array
 * @throws \Exception
 */
function example_ajax_callback() {
  // Подключение CTools файлов для работы с AJAX и модальными окнами.
  ctools_include('ajax');
  ctools_include('modal');
  // Подключает CTools js файлы.
  ctools_modal_add_js();
  // Создаем свои настройки, которые будут помещены
  // в javascript для темизации модального окна.
  $example_style = array(
    'CToolsModal' => array(
      'modalSize' => array(
        // display: fixed;
        'type' => 'fixed',
        'width' => 1000,
        'height' => 500,
        'addWidth' => 10,
        'addHeight' => 10,
        'contentRight' => 0,
        'contentBottom' => 0,
      ),
      'modalOptions' => array(
        'opacity' => .7,
        'background-color' => '#fff',
      ),
      // Анимация для заднего фона.
      'animation' => 'fadeIn',
      // При необходимости можно объявить свою функцию
      // темизации модального окна в JS.
      // Drupal.theme.example_modal();
      # 'modalTheme' => 'example_modal',
      // Изменение AJAX-throbber'а. Использую эту функцию предполагается,
      // что изображения находятся в папке "images" модуля.
      // ctools_image_path($image, $module = 'ctools', $dir = 'images')
      #'throbber'   => theme('image', array(
      #  'path'  => ctools_image_path('throbber.gif', 'example'),
      #  'alt'   => t('Loading...'),
      #  'title' => t('Loading'),
      #)),
      // Изменение значка закрытия модального окна.
      #'closeImage' => theme('image', array(
      #  'path'  => ctools_image_path('close.png', 'example'),
      #  'alt'   => t('Close window'),
      #  'title' => t('Close window'),
      #)),
    ),
  );

  // Добавляем настройки стиля модального окна.
  drupal_add_js($example_style, 'setting');
  // Добавляем заголовок модального окна в форму.
  $form_state = array(
    'title' => t('Create page'),
  );

  // Подключаем файл, где находится функция формы создания ноды.
  module_load_include('inc', 'node','node.pages');
  return array(
    '#type' => 'ajax',
    '#commands' => ctools_modal_form_render($form_state, node_add('page')),
  );
}

Остается создать где-нибудь ссылку

<a href="/ajax-create-page" class="use-ajax">Создать страницу</a>

при этом нужно иметь тип материала page. Также для полноценной работы не хватает обработчиков закрытия модального окна после нажатия на кнопку Save, но это уже другая тема.
create page

Другие посты