视图内部和外部内容类型的不同模板

Different templates for a content type inside and outside a view

我为文章内容类型节点准备了两个不同的模板。我想在首页中使用其中一个模板(并将它们显示在视图中,作为未格式化的列表),并在网站的其余部分(在视​​图外)使用另一个模板。

我可以为所有文章定义 node--article.tpl.php,但我不知道为某些节点定义另一个,当它们是视图的一部分时(或在首页内,我不知道不管用什么来区分两者)。

我知道这是一个老问题,但由于没有得到解答,我在搜索相同问题时发现了它,所以我想给出一个快速的解决方案。

由于 drupal 7 模板是 php,您可以快速检查是否有 "parent" 视图并通过 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 视图中的替代视图的模板名称。无论视图内部填充什么样的节点,此模板都在一般模板之前使用。