如何替换从 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 7 向 Drupal 8 贡献一个模块
需要有关 drupal、ubercart 和产品加载模块挂钩的帮助