我正在尝试开发一个模块,它的输出与视图模块的输出非常相似,但我似乎无法让它工作。我一直在使用主题层(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
中(啤酒是内容类型名称),其中$element
是一个具有#主题的呈现数组
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
都存在于同一个目录中。
我遗漏了什么?)
发布于 2012-07-06 11:47:56
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);
}
然而,这个技巧有一些局限性:
模板不能使用单独的预处理,只有基本的预处理将是launched.
发布于 2012-01-04 19:11:10
您的模式必须与第一个$element['#theme']
选项匹配。
你可以试试
'beerxml_hop' => array (
'template' => 'beerxml-hop',
'render element' => 'beerxml',
'pattern' => 'beerxml_hop__[a-z]+',
'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)
发布于 2013-01-25 14:42:12
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' => array (
'template' => 'beerxml-hop',
'render element' => 'beerxml',
'pattern' => 'beerxml_hop__',
'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)
然后,呈现beerxml-omething.tpl.php文件时,应该使用:
echo theme('beerxml-hop--something', array('n' => 10));
https://stackoverflow.com/questions/8704970
复制相似问题