如何替换从 Drupal 中的模块加载的 page.tpl.php?

Posted

技术标签:

【中文标题】如何替换从 Drupal 中的模块加载的 page.tpl.php?【英文标题】:How do you replace the page.tpl.php that loads from a module in Drupal? 【发布时间】:2010-01-20 15:51:32 【问题描述】:

我在 Drupal 中有一个自定义模块,可以输出序列化的数据转储。我希望这个转储似乎不使用活动主题的页面。相反,我只希望数据转储显示没有任何 html 标记、主题、JS、CSS 等。只是转储(另一个网站将使用它)。

如果我在主题级别执行此操作,我只需为特定内容类型创建一个新的 page.tpl.php 文件,以显示没有任何主题、HTML 等。但我需要在模块级别执行此操作只是该模块创建的这一页面,因为该模块将安装在不同的 Drupal 站点上。

有没有办法在模块级别禁用所有主题并控制模块页面的 HTML 包装输出?如果可能的话,我真正想做的就是“关掉它”。

我正在运行 Drupal 6。

【问题讨论】:

【参考方案1】:

嗯,这是一种不同的方法,但对我来说总是有效的。

当您的页面回调在模块中被调用时,而不是返回数据(将主题化),只是打印或回显数据并且不返回函数。

【讨论】:

没错。 Drupal 核心也是如此,例如参见 api.drupal.org/api/function/upload_js/6。【参考方案2】:

对于给定的用例(输出原始数据以供自动消费),Chris 的回答绝对是可行的方法 (+1)。

为了完整起见,作为对在模块中替换 page.tpl.php 问题的明确回答,还可以实现moduleName_preprocess_page(&$variables) 函数。在该函数中,$variables['template_files'] 将包含一组文件名建议。与 Drupal 实例中现有 *.php.tpl 文件匹配的第一个将用作该请求的 page.tpl.php 文件,因此将现有条目替换为例如'moduleName_page.tpl.php' 会导致该页面用于主题化页面。

当然,必须确保之后没有其他模块再次操纵建议。或者,也可以将文件名放入$variables['template_file'] - 稍后将与$variables['template_files'] 合并,但“template_file”条目将作为第一个条目结束。

【讨论】:

以上是关于如何替换从 Drupal 中的模块加载的 page.tpl.php?的主要内容,如果未能解决你的问题,请参考以下文章

使用 drupal boost 模块仍然可以随机加载图像

如何从 Drupal 7 向 Drupal 8 贡献一个模块

需要有关 drupal、ubercart 和产品加载模块挂钩的帮助

如何使用 Drupal 视图模块实现 node-VIEWNAME.tpl.php?

在Drupal中有选择地删除样式表以获取页面

Drupal7 查看多语言问题