好的,虽然我认为这是一个优雅的解决方案,但它有点冗长。我希望它不会吓到你——它确实并不复杂,但与代码不同,它很难用文本解释。弄清楚这一点很有趣。此答案适用于 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
表。
- 确保为块命名并将其放在适当的区域中。