2012-01-02 219 views
0

我想开发一个模块,其输出是可视化的方式非常类似于视图模块,但我似乎无法得到它的工作。我跟着使用主题层(http://drupal.org/node/933976)并搜索了drupal论坛无济于事。Drupal 7动态主题

主题钩在hook_theme定义为

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

我援引node--beer.tpl.php

print render($element); 

主题钩(啤酒是内容的类型名称)其中$element是一个渲染阵列#主题

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

获取invok ed是beerxml_hop,而不是我所希望的beerxml_hop__simcoebeerxml-hop--simcoe.tpl.phpbeerxml-unknown.tpl.phpbeerxml-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-exposed-form', 'pattern'=>'views_exposed_form__', 'render element'=>'form', );' – Thinner 2012-01-05 19:09:28

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 2014-05-07 00:42:02

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', 
) 

呈现beerxml-hop - something.tpl。php文件,然后应该做:

echo theme('beerxml-hop--something', array('n' => 10));