0

我有一个名为 page--advertsindex.tpl.php 的文件。现在我要做的是在 page.tpl.php 的内容区域内显示该页面。

page--advertsindex.tpl.php 包含需要在 page.tpl 的内容区域中呈现的 HTML,但是当我导航到 my_drupal_site/advertsindex 时它当前所做的只是显示页面的 html--advertsindex,而不是页面.tpl.php 文件和内容区域中的页面--advertsindex..

我怎样才能做到这一点?还是有不同的方法来实现我的目标?

4

2 回答 2

1

Anypage--<identifier>.tpl.php将用于代替page.tpl.phpurl 。/identifier这是设计和该系统的全部目的。这也可以扩展到更深的路径:page--foo-bar-baz.tpl.php对于/foo/bar/baz.

如果您希望某些内容出现在 上/identifier,您有两种选择:有条件地包含该内容或复制该内容。选择什么取决于你的情况。

有条件地包括:内部page.tpl.php

<div class="footer">
  <?php if (arg(0) == "advertsindex"): ?>
    <?php print theme("advertsindex_disclaimer"); ?>
  <?php endif; ?>
</div>

覆盖:引入一个page--advertsindex.tpl.php

<div id="content">
  <?php print $content ?>
</div>

什么时候选择什么:

仅在以下情况下使用条件包含或条件渲染:

  • 要包含或排除的内容很小且共享。像 `[大 20+ 行的首页 HTML][普通 HTML] 这样的模式非常糟糕。
  • 要包含的内容需要引入各种花哨的新变量。像这样的模式真的很糟糕。Drupals 主题系统是推送(主题从模块中获取变量)并且从不拉取(主题在模块处请求参数)。

在所有其他情况下,您将使用覆盖。是的,这将包括很多重复,但这是设计使然,并被认为是 Drupal 的默认做法。为避免不得不修改 20 多个文件中的某些 HTML,请尽可能晚地“拆分”或“复制”它们。

一个经验法则是条件应该只有几行,并且永远不需要父级中不可用的变量。

于 2013-01-10T07:56:47.290 回答
0

如果advertsindex是您的内容类型之一,那么您必须创建 node--advertsindex.tpl.php 文件而不是 page--advertsindex.tpl.php。或者如果您不想在 page.tpl.php 页面中显示某些内容,那么最好将 page.tpl.php 的所有代码复制到 YOUR-Custom_page.tpl.php 并将您的代码放在 YOUR- 的内容部分中Custom_page.tpl.php。

我认为它有帮助。

于 2013-01-10T07:35:33.880 回答