Как создать access плагин для модуля Ctools

Продолжаем изучать работу с модулями 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".');
}

Вот и всё. Плагин написан и готов к использованию.

Комментарии (0)