好的,虽然我认为这是一个优雅的解决方案,但它有点冗长。我希望它不会吓到你——它确实并不复杂,但与代码不同,它很难用文本解释。弄清楚这一点很有趣。此答案适用于 Views 版本 2 或更高版本。本质上,该解决方案结合了两个模块
- 视图附加(http://drupal.org/project/views_attach)
- 节点队列(特别是分类队列)
在继续之前,请阅读附加视图。此视频最好地解释了观看次数http://mustardseedmedia.com/podcast/episode37
分类队列只不过是为词汇表中的每个分类术语自动创建的节点队列。假设我们有一个名为的分类节点队列My Lists。假设您有一个名为的词汇表Series,它有 3 个术语:Apache Solr Tutorial Series、CSS Tips and Techniques Series、Drupal Views Tips Series。如果My Lists将Series用作其分类源,则将创建 3 个子队列——每个术语一个。
在您的博客上,您将拥有多个系列文章(您称其为带有“共同主题”的文章)。每个系列都将独立于另一个系列。每个系列将包含 2 个或更多博客的列表。重要的是要注意,在我提出的解决方案中,博客只能成为 1 系列的一部分——我希望没问题。我们正在使用基于 Nodequeue 的解决方案,因为您要求系列中博客的列出顺序很重要并且必须保留。
首先,您需要创建一个词汇表(假设我们称之为Series)。每次创建新的博客系列时,您都会创建一个新的分类术语,例如Apache Solr Tutorials Series,CSS Tips and Techniques Series等等。确保Series词汇表适用于您的blog内容类型。
您现在需要创建分类队列。只需Smartqueue Taxonomy在模块列表中启用。它带有标准的 Nodequeue 模块。单击内容管理 > 节点队列 > 分类队列。命名队列My Lists。确保选择Series作为词汇表。您可以将队列的长度保留为0(无限制),因为每个系列的博客都可以包含任意数量的博客。现在:
Link "add to queue" text:放Add to %subqueue
Link "remove from" queue text:放Remove from %subqueue
这是一种方便的事情。它将在每个blog节点的底部为您提供链接,以在相应的分类队列中添加或删除。因此,如果一篇博客文章有分类术语CSS Tips and Techniques,它将在完整节点页面(甚至是预告视图)的底部获得一个链接,以便可以将其添加到节点CSS Tips and Techniques队列中的子队列中My Lists。
这样就完成了分类队列的设置。
现在我们进入视图附加。请在继续之前启用视图附加模块。本质Views attach上在节点的末尾附加了一个视图。在我们的例子中,我们的视图将是系列中其他文章的列表(仅当博客是系列的一部分时)。
我们基本上需要将节点的分类术语“传递”给视图。此分类术语将在节点队列中选择适当的子队列My Lists。该子队列中的所有项目都将按照您指定的确切顺序显示(通过标准 Nodequeue 接口)。
制作视图的步骤。
- 让我们调用视图
display_other_blogs_in_series。
- 添加类型的显示
Node Content(启用视图附加后可用)。这是一种类似于块和页面显示的显示,但具有将自身附加到节点的特殊能力。
中进行以下设置Node Content Display
Node content settings
Node types: blog
Build modes: Teaser, Full node
Arguments: token
Show title: No
您应该Use tokens from the node the view is attached to在参数下选择。让标记为[term-id]这是“顶级分类术语的 ID”。这个非常重要!!本质上,您将从Series词汇表(例如 CSS 技巧和技术)中将博客节点的分类术语作为参数传递给视图。为此,Series词汇表必须具有最低的权重。(见http://groups.drupal.org/node/11788#comment-38332)。如果它的权重最低,那么分类词汇将是节点编辑表单分类部分中的第一个词汇。
现在我们需要告诉我们的 View 只从My Lists队列中获取项目。添加关系Nodequeue: Queue。确保[x] Require this relationship被选中。确保[x] Limit to one or more queues选择 withMy list作为队列。
添加一个参数Nodequeue: Subqueue Reference。确保关系是queue我们上面定义的关系。这个论点将成为Series词汇表中的分类术语。此参数将导致选择正确的子队列。
添加您感兴趣的字段,例如Node: Title。确保Node: Title通过打勾将其制成超链接Link this field to its Node
添加Nodequeue: Position为排序条件。确保排序顺序是升序并确保使用关系queue。
在过滤器中,确保添加Node: Type = blog为过滤器。
所以这个视图要做的是:
Series从当前正在查看的节点中的词汇表中获取分类术语
- 将其作为参数传递给视图
display_other_blogs_in_series
- 视图将使用该参数在队列中选择适当的子
My Lists队列
- 子队列中的项目将按照您指定的顺序一一列出
- 这将正确出现在属于特定系列的每个博客中
而已!
后记:
如果您正在使用 Views 3(在撰写本文时当前为 alpha3)并且您想要一个块(现在相关文章位于节点正文的末尾),您可以通过以下方式进行操作:
- 忘记附加视图......它不是必需的
- 添加块视图。它应该包含与上述
Node Content显示说明相同的参数、关系、字段和过滤器。
- 您需要
Nodequeue: Subqueue Reference稍微修改参数的设置:在Action to take if argument is not present:选择下[x] Provide Default Argument。选择[x] Taxonomy Term ID from URL。现在确保[] Load default argument from term page未选中并[x] Load default argument from node page, thats good for related taxonomy blocks.选择[x]Limit terms by vocabulary词汇Series表。
- 确保为块命名并将其放在适当的区域中。