我的侧边栏中有一些块视图,显示标记为某些城市中突出显示的事件。使用分类法将节点组织到城市中。
当我直接加载节点时,我有一个像www.host.com/events/new-york/name-of-my-nice-event
我还有一些其他网页浏览量可以显示特定城市中所有活动的预告片: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
。
答案 0 :(得分:0)
首先,使用路径和路径自动,你看到的并不总是你得到的。
Fx我可以为我的文章节点设置pathauto来生成这样的网址
content/article/[title]
所以如果我想要标题我应该使用arg(2)
吗?
不!(在这种情况下,arg(2)
实际上是NULL
。)
原因是路径auto生成的url是一个假网址,被转换为Drupal网址。在上面的例子中,我得到的是node/[nid]
。因此,尽管网址中的节点标题为i,但我无法使用arg()
获取,但我可以使用nid
获取arg(1)
我猜不出你的网址映射到了什么,这取决于你如何设置你的网站使用的模块等。
如果你做了很多这些情境感知的事情,那么一个很好的建议就是研究panels。它使得能够告诉模块,例如关于它所存在的上下文的视图。与fx术语,节点等一样,您可以使用它将参数传递给视图。
面板可以做得更多而且非常复杂,但如果你需要做很多这样的事情,那么投资可能是值得的。
答案 1 :(得分:0)
解决我的问题:
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;
答案 2 :(得分:0)
虽然这在其他一些答案中描述的视图2在技术上是可行的,但是视图3内置了这种集成。
您可以为分类术语ID创建参数,然后选择“提供默认参数”。然后,这将为您提供“来自URL的分类术语ID”和“从节点页面加载默认参数...”的选项
这将允许您获取页面的分类并将其作为参数传递给视图块。
注意:视图3目前处于Alpha 3中,但根据我的经验处于相对稳定的状态,我在生产站点上使用它。如果它具有您认为有用的上述功能,请使用它,测试它并在遇到任何问题时提交错误/补丁!