在视图 2 (Drupal 6) 中检索被覆盖的主题钩子的名称

Posted

技术标签:

【中文标题】在视图 2 (Drupal 6) 中检索被覆盖的主题钩子的名称【英文标题】:Retrieving names of over-ridden theme hooks in views 2 (Drupal 6) 【发布时间】:2009-11-26 08:25:03 【问题描述】:

我创建了一个视图(我们称之为my_view)。

在主题:信息部分中,如果我已经注意到建议的模板名称之一(views-view--my-view--default.tpl.php(或接近该名称)),并使用该名称创建了我自己的模板文件。

这一切都很好,当我访问主题注册表时,我可以看到那里有一个带有模板名称的钩子 (views-view--my-view--default)。然而,这个钩子的类型字段是“引擎”而不是“模块”。我认为这是为了查看视图本身的主题?

我想实现hook_registry_alter 来修改这个主题钩子(以及其他以相同方式创建的钩子),但我不知道如何检索这些钩子的列表。

我尝试使用 array_keys(views_theme()) 来获取所有视图挂钩,但此列表不包含由覆盖模板文件创建的挂钩。它只包含默认的钩子,如views_views_field 等

有没有办法恢复以这种方式覆盖的视图主题挂钩列表?

【问题讨论】:

你的最终目标是什么?我不确定您是否以正确的方式进行此操作。 最终目标是能够告诉主题系统首先在站点默认主题中查找视图模板,然后是管理主题。我将通过修改主题挂钩的“主题路径”属性来实现这一点。这是为了覆盖仅在显示视图的主题中搜索模板的默认行为。但是在花了一段时间之后,我意识到这种方法是有缺陷的,因为视图主题挂钩没有使用正常的模板建议方法。 【参考方案1】:

我在这里回答,因为您的最后一条评论似乎表明您不再对采用最初的方法感兴趣,而且无论如何 600 个字符是不够的。

实现您想要的另一种方法可能是使用子主题从其父主题的“继承”。换句话说,您可以将您的用户主题定义为管理主题的子主题。

以这种方式,主题引擎将搜索模板——如果用户通过用户主题查看网站——首先在用户主题文件夹中,然后在管理主题文件夹中,然后然后在模块目录中。

这与zen 使用的机制相同,用于让您使用入门工具包创建主题。

希望这会有所帮助!

【讨论】:

感谢您的建议。不幸的是,我的用例有点不寻常,因为视图显示在管理主题中,但我仍然希望主题系统首先在默认主题中查找视图模板,然后是管理主题。 @granhamu - 这两个主题有何不同?将它们合并成一个并在主题功能中插入一些基于角色的逻辑是一种选择吗?虽然我确信有一些方法可以实现您想要的(如果不是使用 Drupal,至少直接使用 PHP)drupal 旨在将主题分开,而您想要/需要做的事情似乎朝着相反的方向发展(如果我得到你说得对:你想强制一个主题使用另一个不相关的部分)。 @granhamu - 在上面的评论中,我假设您总是在管理主题中有一个“备份模板”,但您只想在用户主题有的情况下使用它没有任何替代方案。如果不是这种情况(即:当用户主题没有时,管理主题只有模板),那么解决方案很明显:只需采用我的原始答案并交换层次结构逻辑:将管理主题设为子主题用户一

以上是关于在视图 2 (Drupal 6) 中检索被覆盖的主题钩子的名称的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖drupal视图寻呼机查询?

2 寻呼机在视图中 - Drupal 6

drupal 6 - 我可以使用一个公开的视图过滤器来搜索/过滤几个类似的 cck 字段吗?

Drupal 6 十进制和视图

Drupal 6 视图 2:PHP 片段

Drupal 6视图2嵌入