首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Drupal 7动态主题

Drupal 7动态主题
EN

Stack Overflow用户
提问于 2012-01-02 20:21:32
回答 3查看 1.2K关注 0票数 0

我正在尝试开发一个模块,它的输出与视图模块的输出非常相似,但我似乎无法让它工作。我一直在使用主题层(http://drupal.org/node/933976)进行跟踪,并搜索了drupal论坛,但没有结果。

主题钩子在hook_theme中定义为

代码语言:javascript
运行
复制
'beerxml_hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml_hop__',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)

我引用主题钩子

代码语言:javascript
运行
复制
print render($element);

node--beer.tpl.php中(啤酒是内容类型名称),其中$element是一个具有#主题的呈现数组

代码语言:javascript
运行
复制
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.phpbeerxml-unknown.tpl.php时,beerxml-hop.tpl.phpbeerxml-unknown.tpl.php都存在于同一个目录中。

我遗漏了什么?)

EN

回答 3

Stack Overflow用户

发布于 2012-07-06 11:47:56

Drupal没有在模块文件夹中搜索动态部分的模板。您必须用几行代码手动完成此操作:

代码语言:javascript
运行
复制
/**
 * 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.

  • Extension的模板文件是硬编码的.
票数 3
EN

Stack Overflow用户

发布于 2012-01-04 19:11:10

您的模式必须与第一个$element['#theme']选项匹配。

你可以试试

代码语言:javascript
运行
复制
'beerxml_hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml_hop__[a-z]+',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)
票数 0
EN

Stack Overflow用户

发布于 2013-01-25 14:42:12

hook_theme_registry_alter的实现是解决这一问题的关键。

另一件非常重要的事情是避免在模板名称中使用“-”!

例如,这是行不通的:

代码语言:javascript
运行
复制
'beerxml-hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml-hop__',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)

关键(如问题中所述)是:

在主题钩子名(‘('beerxml_hop__')

  • but’)和模式('beerxml-hop--something.tpl.php')

中,

  • 在‘’参数('beerxml_hop')中使用'_‘和模板文件名(’beerxml-hop--something.tpl.php‘)。

代码语言:javascript
运行
复制
'beerxml_hop' => array (
    'template' => 'beerxml-hop',
    'render element' => 'beerxml',
    'pattern' => 'beerxml_hop__',
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates',
)

然后,呈现beerxml-omething.tpl.php文件时,应该使用:

代码语言:javascript
运行
复制
echo theme('beerxml-hop--something', array('n' => 10));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8704970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档