【问题标题】:How do I filter a block view by taxonomy argument in URL?如何通过 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

【问题讨论】:

    标签: drupal drupal-views


    【解决方案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 阶段,但根​​据我的经验,它处于相对稳定的状态,我正在生产站点上使用它。如果它具有您认为有用的上述功能,请使用它,测试它并在遇到任何问题时提交错误/补丁!

      【讨论】:

        猜你喜欢
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 2011-06-04
        • 1970-01-01
        相关资源
        最近更新 更多