我在构建的一个视图中遇到了drupal路径的问题。 现在我的观点有这样的形式:contents / 2/6。
其中2和6是两个节点的ID,我想操纵这些id来翻译它们,让我们说这些节点的标题。
我无法从视图中执行此操作,因为我将这些值发送到面板,并且面板必须接收节点的ID。
总而言之,我只想重写(就像pathauto一样)这些ID到标题,我可以这样做吗?是否有特定的模块?
谢谢!
答案 0 :(得分:3)
如果我理解正确,您希望保留原始路径的内容/ [nid_x] / [nid_y]',但为那些具有来自节点的更多“说话”路径元素的人添加额外的URL别名(例如标题)。如果这是正确的,您有两个选择:
首先,您可以通过在'admin / build / path / add'下定义'content / [nid_x] / [nid_y]'的URL别名来手动完成。这很容易做到,但如果你需要很多这些别名,可能不是你想要的。
其次,您可以通过path_set_alias()
函数以编程方式执行此操作。使用该功能非常简单 - 唯一的问题可能是触发它的位置。根据您的描述,我不清楚这些视图何时/何时被创建,因此很难提出建议 - 也许您可以编辑您的问题,使其更加具体。
如果要为特定节点组合创建视图URL别名,可以尝试使用hook_nodeapi()
的“插入”,“更新”和“删除”操作来触发别名创建。显然,只有在存在一个连贯的规则允许您根据代码确定哪些节点创建别名时,这才有效。
一旦为某个路径建立了URL别名,只要通过l()函数创建了该路径的链接,就会使用它而不是原始路径。所以例如如果您创建一个指向'content / 2/6'的菜单项,则使用的URL将自动成为您为该路径创建的别名。
编辑:以防万一你最终以编程方式创建别名 - 如果你仍然使用pathauto,你可以/应该使用它的pathauto_cleanstring()
函数(来自'pathauto.inc')来确保你生成的URL被正确转义/重写为允许的字符。
答案 1 :(得分:0)
有一种方法可以使用自定义网址功能来创建专用的自定义网址。如果您正在使用面板,但我不确定您是否愿意这样做,因为它非常静态。
function custom_url_rewrite($op, $result, $path) {
if ($op == 'alias') {
if (preg_match('|^[node_id#_here](/{0,1}.*)|', $path, $matches)) {
return '[desired_alias]'. $matches[1];
}
}
if ($op == 'source') {
if (preg_match('|^[node_id#](/{0,1}.*)|', $path, $matches)) {
return '[desired_source]'. $matches[1];
}
}
return $result;
}
您需要将节点ID#s替换为您自己的,以及您自己想要的别名和来源。希望这会有所帮助。
答案 2 :(得分:0)
也许有用:
使用视图构建链接,使用<a href="nodeview/[title]/nid" title="[title]">link tekst</a>
之类的令牌替换来更改初始链接
并使用路径exa nodeview和arguments null处理节点,null,nid f.i。
对于更复杂的链接我们一个视图php字段来构建字符串..