如何通过 URL 中的分类参数过滤块视图?

Posted

技术标签:

【中文标题】如何通过 URL 中的分类参数过滤块视图?【英文标题】:How do I filter a block view by taxonomy argument in URL? 【发布时间】:2010-11-03 13:40:45 【问题描述】:

我的侧边栏中有一些块视图,显示标记为在某些城市发生的亮点事件。使用分类法将节点组织成城市。

当我直接加载一个节点时,我有一个类似 www.host.com/events/new-york/name-of-my-nice-event 的 URL

我还有一些其他页面浏览量显示了某个城市所有活动的预告片:www.host.com/events/new-york

我还有一些适用于所有城市的静态页面,例如www.host.com/about-us

显示亮点的侧边栏块在整个网站中都可用。现在我想确保我的侧边栏中的块仅根据 URL 中提供的分类显示所选城市的那些节点。 (静态页面除外,因为 URL 中没有分类,但这些并不那么重要)

到目前为止,我尝试将分类术语作为参数传递我的观点,使用 php 作为标准参数:

if (arg(1)) 
    $term = arg(1);
    return $term;

这适用于上述页面浏览量(例如www.host.com/events/new-york)。但是当我直接加载一个节点www.host.com/events/new-york/name-of-my-nice-event我的块只显示空文本。

我认为参数的索引是这样的:

           events/new-york/name-of-my-nice-event
           ^0     ^1       ^2

所以我不明白为什么在查看节点详细信息时 arg(1) 不返回 new-york

【问题讨论】:

【参考方案1】:

首先,使用 path 和 path auto,你看到的并不总是你得到的。

Fx 我可以为我的文章节点设置 pathauto 以生成这样的 url

content/article/[title]

所以如果我想要标题,我应该使用arg(2) 对吗?

不!(在这种情况下,arg(2) 实际上是 NULL。)

原因是 path auto 生成的 url 是假 url,被翻译成 Drupal url。在上述情况下,我得到的是node/[nid]。所以即使url中的节点标题i,使用arg()也无法获取,但可以使用arg(1)获取nid

我猜不出你的网址映射到什么,这取决于你如何设置你的网站你使用什么模块等等。

如果你做了很多这些上下文相关的事情,一个好的建议是查看panels。它能够告诉模块,如关于它存在的上下文的视图。像 fx 术语、节点等,您可以使用它来将参数传递到视图中。

面板可以做更多的事情并且相当复杂,但如果你需要做很多这样的事情,那么投资可能是值得的。

【讨论】:

非常感谢您为我指明了正确的方向。经过一段时间的尝试,我设法用发布的解决方案解决了我的问题。【参考方案2】:

解决我的问题:

if (arg(0) == 'node' && is_numeric(arg(1))) 
    $node = node_load(arg(1));

    if (count($node->taxonomy) > 0)  
      foreach ($node->taxonomy as $term) 
        $term = $term->name;
      
    

    $term = strtolower($term); // for some reason needed in my case


else 
    $term = arg(1);
    $term = str_replace('-', ' ', $term); // for some reason needed in my case


return $term;

【讨论】:

【参考方案3】:

虽然如其他一些答案中所述,Views 2 在技术上是可行的,但 Views 3 已内置此集成。

您可以为分类术语 id 创建一个参数,然后选择“提供默认参数”。这将为您提供“来自 URL 的分类术语 ID” 和“从节点页面加载默认参数...”的选项。

这将允许您获取页面的分类并将其作为参数传递给您的视图块。

注意:Views 3 目前处于 Alpha 3 阶段,但根​​据我的经验,它处于相对稳定的状态,我正在生产站点上使用它。如果它具有您认为有用的上述功能,请使用它,测试它并在遇到任何问题时提交错误/补丁!

【讨论】:

以上是关于如何通过 URL 中的分类参数过滤块视图?的主要内容,如果未能解决你的问题,请参考以下文章

按分类过滤内容类型的 Drupal 块

如何通过 URL 将变量过滤器添加到 Drupal 6 视图?

TYPO3:通过 URL 中的参数过滤 tx_news 类别

一种在drupal中使用参数限制分类暴露过滤器选项的方法

如何使用自定义块 php 获取视图页面的字段

使用ajax将参数发送到drupal视图