Anypage--<identifier>.tpl.php
将用于代替page.tpl.php
url 。/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,请尽可能晚地“拆分”或“复制”它们。
一个经验法则是条件应该只有几行,并且永远不需要父级中不可用的变量。