Add new comment

Как создать свой CTools Content type

CTools Content type

Преимущества

  • Могут выводить любую информацию (вьюхи, формы, custom HTML);
  • Хорошо структурируются - теминг, препроцесс и форма настроек для каждого ctools content type описывается внутри него самого. Средний по величине проект легко может насчитывать 50 и более блоков, в этом случае при использовании блоков hook_block и hook_theme превращаются в настоящее мясо. Помимо этого мы можем немного разгрузить template.php от препроцессов описывая их в ctools content types.
  • Работают с контекстами панелей;
  • Легко реализовать форму настроек отображения.

Первым делом объявим hook_ctools_plugin_directory

Аргументы хука

  • $plugin_type - название параметра говорит само за себя - это строковое название типа плагина('Panels', 'layouts', 'styles' и т.д.)
  • $owner - обязательный параметр, ибо ctools соблюдает пространство имен по плагинам в зависимости от того какому модулю они принадлежат. Обычно используется путь "plugins/$plugin_type".

/*
* Implements hook_ctools_plugin_directory -
*/
function mymodule_ctools_plugin_directory($owner, $plugin_type) {
if ($owner == 'ctools' && $plugin_type == 'content_types') {
return 'plugins/content_types';
}
}

Далее создаем папку "plugins/content_types" и помещаем туда файл с нашим плагином, например "mymodule_content_type.inc".

В этом файле первым делом описываем плагин. Доступные параметры:

  • 'title' - название нашего типа контента
  • 'description' - детальное его описание
  • 'single' - если здесь TRUE, то в этом типе контента подтипов нет
  • 'content_types' - массив определений типа контента либо функция, возвращающая этот массив
  • 'render callback' - название функции, которая будет отвечать за вывод блока
  • 'defaults' - контекст по умолчанию
  • 'edit form' - название функции, которая будет отвечать за вывод формы редактирования типа контента
  • 'icon' - иконка, которая будет отображаться в админ интерфейсе. Иконка должна находиться в папке с плагином
  • 'category' - категория, к которой будет относиться новосозданный тип контента

/**
* Plugins are described by creating a $plugin array which will be used
* by the system that includes this file.
*/
$plugin = array(
'title' => t('My title'),
'description' => t('My description'),
// 'single' => TRUE means has no subtypes.
'single' => TRUE,
// Constructor.
'content_types' => array('no_context_content_type'),
// Name of a function which will render the block.
'render callback' => 'mymodule_example_block_render',
// The default context.
'defaults' => array(),

// This explicitly declares the config form. Without this line, the func would be
// ctools_plugin_example_no_context_content_type_edit_form.
'edit form' => 'mymodule_example_block_edit_form',
'icon' => 'favicon.ico',
'category' => array(t('My category'), -9),
);

DrlEVbyHYozZmP.jpg

Далее нам нужно определить функцию для формы настроек нашей панели

/**
* Generates static block edit form.
*/
function mymodule_example_block_edit_form($form, &$form_state) {
return $form;
}

В данном случае мы не добавляем никаких настроек.
VrwplbjIpEDdmX.jpg

К форме редактирования ctools типа контента можно добавлять submit/validate - обработчики также как и к стандартным формам в Drupal.

Категория: 
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.