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

Сегодня речь пойдет о том, как создать style плагин для модуля Panels. Styles плагины, как и layouts плагины принято подключать через тему оформления, но можно и через модуль.

Подключение style плагина через тему оформления

Примерная структура каталогов будет следующей:

themeName
  panels
    styles
      first_style
        first_style.css
        first_style.inc
        first-style-shadow-box.tpl.php

Первым делом открываем themeName.info и добавляем туда следующую строку:

plugins[panels][styles] = panels/styles

Этой строкой мы указали путь к каталогу, в котором будут находится наши styles плагины (не забываем почистить кэш после добавления данной строки). Теперь нам необходимо в корне темы создать каталог panels, а внутри него каталог styles. Все наши styles плагины будут находится в этом каталоге.

Переходим непосредственно к созданию первого плагина. Идем в каталог styles и создаем каталог "first_style". Далее заходим в этот каталог и создаем в нем файл first_style.inc. Содержимого этого файла:

<?php

$plugin = array(
  'title' => t('Shadow box'), // Название плагина.
  'description' => t('The output a content pane with shadow.'), // Описание плагина.
  'render pane' => 'first_style_shadow_render_pane', // Функция, которая будет выводить содержимое.
  'hook theme' => array(
    'first_style_shadow_box' => array(
      'variables' => array('content' => NULL), // Список переменных, которые может принимать функция.
      'path' => drupal_get_path('theme', 'themeName') . '/plugins/styles/first_style', // Путь к плагину.
      'template' => 'first-style-shadow-box', // Название шаблона.
    ),
  ), 
);

function theme_first_style_shadow_render_pane($vars) {
  $content = $vars['content'];
  $pane = $vars['pane'];
  $display = $vars['display'];

  if (empty($content->content)) {
    return;
  }

  // Формируем содержимое стандартной функцией theme_panels_pane.
  $output = theme('panels_pane', array('content' => $content, 'pane' => $pane, 'display' => $display));

  // Формируем содержимое нашей функцией theme_first_style_shadow_box.
  $output = theme('first_style_shadow_box', array('content' => $output));

  // Подключаем файл со стилями.
  drupal_add_css(drupal_get_path('theme', 'themeName') . '/panels/styles/first_style/first_style.css');
  return $output;
}

Теперь необходимо создать шаблон first-style-shadow-box.tpl.php. Он очень похож на любой другой файл шаблона. Его содержимое:

<div class="first-style-shadow-box">
  <?php print $content; ?>
</div>

Затем необходимо создать first_style.css. Этот файл ничем не отличается от других css файлов. Его содержимое:

.first-style-shadow-box {
  box-shadow: 0 0 5px #000;
}

Все, наш плагин готов к использованию.

Подключение style плагина через модуль

Примерная структура каталогов будет следующей:

style_sample
  style_sample.info
  style_sample.module
  plugins
    styles
      first_style
        first_style.css
        first_style.inc
        first-style-shadow-box.tpl.php

Создаем в каталоге sites/all/modules каталог style_sample. Внутри него создаем файл style_sample.info. Содержимое этого файла:

name = Style Sample
description = Style plugin example.
core = 7.x
package = "Panels"

dependencies[] = panels

Затем создаем файл style_sample.module. Его содержимое:

<?php

/**
 * Implements hook_ctools_plugin_directory().
 */
function style_sample_ctools_plugin_directory($module, $plugin) {
  if ($module == 'panels') {
    return 'plugins/styles';
  }
}

Дальнейший процесс аналогичен подключению плагина через тему, с небольшими правками в файле first_style.inc.

Более подробный процесс создания style плагина в своем модуле можно прочитать в этом уроке.

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

Аватар пользователя Андрей
Андрей

Очень бы желательно и вариант first_style.inc для модуля.
Что-то не получается правками добиться результата. При выборе этого плагина - пропадает результат работы content_type плагина. Один только заголовок страницы рисуется.
Спасибо.

Аватар пользователя Сергй
Сергй

А как из модуля создать, а не из темы?

Аватар пользователя Benya
Benya

В ближайшее время напишу урок

Аватар пользователя Alex Mazaltov
Alex Mazaltov

Осваиваю D8, В этой связи хочу спросить может кто уже нашел как реализовать стиль для panel pane в D8?