我为文章内容类型节点准备了两个不同的模板。我想使用首页中的一个模板(并将它们显示在视图中,作为未格式化的列表),并在站点的其余部分(视图之外)使用另一个模板。
我可以node--article.tpl.php
为所有文章定义,但是当某些节点是视图的一部分时(或在首页内,我不关心用什么来区分两者),我不知道为某些节点定义另一个。
我为文章内容类型节点准备了两个不同的模板。我想使用首页中的一个模板(并将它们显示在视图中,作为未格式化的列表),并在站点的其余部分(视图之外)使用另一个模板。
我可以node--article.tpl.php
为所有文章定义,但是当某些节点是视图的一部分时(或在首页内,我不关心用什么来区分两者),我不知道为某些节点定义另一个。
我知道这是一个老问题,但由于它没有得到解答,我在搜索同样的问题时发现了它,我想给出一个快速的解决方案。
由于 drupal 7 模板是 php,因此您可以快速而肮脏地检查是否存在“父”视图并通过 if 条件分隔两个模板。
<?php
function is_current_node_inside_view() {
return (isset($view) && is_object($view)) ? true : false;
}
if ( is_current_node_inside_view() ) {
?>
<!-- unformatted list template goes here -->
<?php
} else {
?>
<!-- second template goes here -->
<?php
}
?>
我认为 Drupal 的最佳实践是使用视图模式https://drupal.stackexchange.com/questions/37446/how-to-add-additional-displayview-mode-for-node
我终于学到了更多关于 Drupal 7 的知识,正确的做法是(无需任何代码,只需为模板文件使用正确的名称):
node--article.tpl.php
文章详细视图的模板名称。node--view--[name-of-the-view].tpl.php
当它们在视图中时,用作相同文章的替代视图的模板名称name-of-the-view
。不管视图内部膨胀了什么样的节点,这个模板都是先于通用的。