2012-01-02 3 views
0

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

Тема крючок определяется в 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 (пиво имя типа контента), где $element является рендер массив с #theme

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

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

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

ответ

0

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

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

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

Да, я также думал, что в шаблоне есть что-то о регулярном выражении. Является ли это регулярным синтаксисом регулярных выражений PHP? Однако, я не могу заставить приведенный выше пример работать. И, смотря на исходный код модуля Views, в их темах темы нет признаков регулярных выражений. Это пример крючков модуля Views: '$ hooks ['views_exposed_form'] = $ base + array ( 'template' => 'views-exposure-form', 'pattern' => 'views_exposed_form__', 'render element' => 'form', ); ' – Thinner

3

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

Вы были правы. благодаря! – Capy

0

Внедрение 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__ ')
  • но '-' в 'шаблон' аргумент (' beerxml-хоп ') и шаблон имени файла (' beerxml-хоп - something.tpl.php ')

.

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

Оказание пива xml-hop - something.tpl.php-файл должен быть выполнен следующим образом:

echo theme('beerxml-hop--something', array('n' => 10)); 
Смежные вопросы