Продолжаем изучать работу с модулями Panels и Page Manager и сегодня я покажу как написать свой access плагин. К слову сказать существует 6 типов плагинов для модуля Ctools:
- access плагины - данный тип плагинов позволяет указывать критерии доступа к содержимому панелей и для вариантов страниц;
- content_types плагины - данный тип плагинов выводит содержимое на страницу;
- context плагины - данный тип плагинов определяет различные контексты, которые могут быть использованы для передачи во вьюзы, заголовки страниц и фрагменты панелей, а так же для использования взаимосвязей;
- relationships плагины - данный тип плагинов определяет возможные взаимосвязи между сущностями;
- arguments плагины - данный тип плагинов определяет аргументы, которые можно получить из урла страницы;
- cache плагины - данный тип плагинов определяет механизмы кэширования.
Итак, переходим к созданию access плагина.
Шаг 1. Первым делом создаем модуль, я назову его "example". Идем в "sites/all/modules" и создаем там каталог "example". Внутри создаем два файла "example.info" и "example.module". Содержимое "example.info":
name = Example
description = Access plugin example
core = 7.x
dependencies[] = ctools
Шаг 2. Указываем в какой папке будет храниться наш плагин. Плагины принято хранить в папке plugins внутри модуля. Папка указывается в модуле хуком hook_ctools_plugin_directory(). Содержимое "example.module":
<?php
/**
* Implements hook_ctools_plugin_directory().
*/
function example_ctools_plugin_directory($module, $plugin) {
if ($module == 'ctools' && !empty($plugin)) {
return 'plugins/' . $plugin;
}
}
Шаг 3. Далее необходимо создать файл, в котором будет описан наш плагин. Он будет проверять, стоит ли флаг "Помещено на главную страницу" у ноды. Плагин будет хранится по адресу "plugins/access/exampe_promoted.inc". Далее открываем файл "exampe_promoted.inc", его содержимое:
<?php
/**
* Предоставляем информацию об плагине.
*/
$plugin = array(
'title' => t("Node: (not)promoted"), // Название плагина.
'description' => t('Control access by the nodes promoted.'), // Описание плагина.
'callback' => 'example_node_promoted_access_check', // Функция, в которой осуществляется проверка доступа.
'summary' => 'example_node_promoted_access_summary', // Функция, которая выводит краткое описание, основанное на проверке флага помещено на главную страницу у ноды.
'required context' => new ctools_context_required(t('Node'), 'node'), // Обязательный контекст, который необходим для работы плагина, если данный контекст отсутствует, то плагин будет не доступен.
);
/**
* Проверка доступа.
*/
function example_node_promoted_access_check($conf, $context) {
return (!empty($context->data) && $context->data->promote);
}
/**
* Вывод краткого описания, основанное на проверке флага помещено на главную страницу у ноды.
*/
function example_node_promoted_access_summary($conf, $context) {
return t('Returns true if the nodes is "promoted to front page".');
}
Вот и всё. Плагин написан и готов к использованию.