Drupal 7 Dynamic Theming - PullRequest
       42

Drupal 7 Dynamic Theming

0 голосов
/ 03 января 2012

Я пытаюсь разработать модуль, вывод которого должен быть отображаемым, очень похожим на вывод модуля Модули, но я не могу заставить его работать.Я следил за , используя Тематический Слой (http://drupal.org/node/933976), и безуспешно искал форумы drupal.

Хук темы определен в hook_theme как

'beerxml_hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml_hop__',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)

И я вызываю ловушку темы с помощью

print render($element);

в node--beer.tpl.php (beer - это имя типа контента), где $element - это массив визуализации с # theme

array(3) {
    [0] => string(19) "beerxml_hop__simcoe"
    [1] => string(11) "beerxml_hop"
    [2] => string(15) "beerxml_unknown"
}

.вызывается beerxml_hop, а не beerxml_hop__simcoe, как я бы надеялся. Оба beerxml-hop--simcoe.tpl.php и beerxml-unknown.tpl.php существуют в том же каталоге, что и beerxml-hop.tpl.php, а beerxml-unknown.tpl.php используется в других местах вывода.

Что мне не хватает?:)

Ответы [ 3 ]

3 голосов
/ 06 июля 2012

Drupal не ищет шаблоны с динамической частью внутри папки модуля. Вы должны сделать это вручную с помощью нескольких строк кода:

/**
 * Implements hook_theme_registry_alter().
 */
function MY_MODULE_theme_registry_alter(&$registry) {
  $path = drupal_get_path('module', 'MY_MODULE') . '/subfolder/with/templates';
  $registry += drupal_find_theme_templates($registry, '.tpl.php', $path);
}

Однако у этого трюка есть некоторые ограничения:

  • Вы не можете использовать отдельные препроцессы для шаблонов, будет запущен только базовый препроцесс.
  • Расширение файлов шаблонов жестко запрограммировано.
0 голосов
/ 25 января 2013

Реализация hook_theme_registry_alter была ключевой в решении проблемы.

Еще одна очень важная вещь - избегать использования '-' в именах шаблонов!

Например, это не будет работать:

'beerxml-hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml-hop__',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)

Это ключ (как и в вопросе):

  • использовать '_' в имени крюка темы ('beerxml_hop') и шаблоне ('beerxml_hop__)')
  • но' - 'в аргументе' template '(' beerxml-hop ') и имени файла шаблона (' beerxml-hop --thing.tpl.php ')

.

'beerxml_hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml_hop__',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)

Рендеринг файла beerxml-hop - файл some.tpl.php затем следует выполнить с помощью:

echo theme('beerxml-hop--something', array('n' => 10));
0 голосов
/ 04 января 2012

Ваш шаблон должен соответствовать вашей первой опции $element['#theme']

Вы можете попробовать

'beerxml_hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml_hop__[a-z]+',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)
...