Создаем style плагин в своем модуле

Я уже писал о том, как создать 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; ?>

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