Я уже писал о том, как создать style плагин для модуля Panels. Но в том уроке я в большей степени описал процесс создания внутри темы, а создание в модуле описал кратко и у некоторых читателей возникли вопросы, поэтому в этом уроке я исправлю этот недочет и опишу процесс создания style плагина в своем модуле.
Шаг 1. В файл module_name.info добавляем следующие строки:
name = Module name
description = Style plugin example.
core = 7.x
package = "Panels"
dependencies[] = panels
Шаг 2. В файл module_name.module имплементируем хук hook_ctools_plugin_directory():
/**
* Implements hook_ctools_plugin_directory().
*/
function module_name_ctools_plugin_directory($module, $plugin) {
if ($module == 'panels') {
return 'plugins/' . $plugin;
}
}
Шаг 3. Создаем в каталоге с модулем каталог plugins, внутри него создаем каталог styles и внутри каталога styles создаем каталог shadow_box (так называется мой плагин, внутри этого каталога будут находиться все файлы, которые необходимы для работы плагина).
Шаг 4. Внутри каталога shadow_box создаем файлы shadow_box.inc, shadow-box.css и module-name-shadow-box.tpl.php.
Шаг 5. В файл shadow_box.inc добавляем следующие строки:
// Plugin definition.
$plugin = array(
'title' => t('Shadow box'),
'description' => t('The output a content pane with shadow.'),
'render pane' => 'module_name_shadow_box_style_render_pane',
'hook theme' => array(
module_name_shadow_box' => array(
'variables' => array('content' => NULL),
'path' => drupal_get_path('module', 'module_name') . '/plugins/styles/shadow_box',
'template' => module-name-shadow-box',
),
),
);
/**
* Render callback for a single pane.
*/
function theme_module_name_shadow_box_style_render_pane($variables) {
$output = '';
if (!empty($variables['content']->content)) {
$output = theme('panels_pane', array(
'content' => $variables['content'],
'pane' => $variables['pane'],
'display' => $variables['display'],
));
// Just stick a box around the standard theme_panels_pane.
$output = theme('module_name_shadow_box', array('content' => $output));
drupal_add_css(drupal_get_path('module', 'module_name') . '/plugins/styles/shadow_box/shadow-box.css');
}
return $output;
}
Шаг 6. В файл shadow-box.css добавляем следующие строки:
.module-name-shadow-box {
box-shadow: 0 0 5px #000;
}
Шаг 7. Файл module-name-shadow-box.tpl.php это шаблон, в него добавляем следующую разметку:
<?php
/**
* @file
* Display the pane in shadow box.
*
* - $content: The content of the pane.
*/
?>
<?php if (!empty($content)): ?>
<div class="module-name-shadow-box">
<?php print $content; ?>
</div>
<?php endif; ?>