0

在我构建的一个视图中,我遇到了 drupal 路径的问题。现在我的视图有这种形式:contents/2/6。

其中 2 和 6 是两个节点的 ID,我想操纵这些 ID 来翻译它们,比如说这些节点的标题。

我不能从视图中执行此操作,因为我将这些值发送到面板,并且面板必须接收节点的 ID。

总而言之,我只想将这些 id 重写(就像 pathauto 一样)标题,我可以这样做吗?有专门的模块吗?

谢谢!

4

3 回答 3

3

如果我对您的理解正确,您希望保留原始路径“内容/[nid_x]/[nid_y]”,但为具有更多来自节点的“说话”路径元素(例如标题)的路径添加额外的 URL 别名。如果这是正确的,您有两个选择:

首先,您可以通过在“admin/build/path/add”下为“content/[nid_x]/[nid_y]”定义 URL 别名来手动完成。这很容易做到,但如果您需要许多这样的别名,则可能不是您想要的。

其次,您可以通过该path_set_alias()函数以编程方式执行此操作。使用该功能非常简单——唯一的问题可能是在哪里触发它。根据您的描述,我不清楚这些视图是在何处/何时创建的,因此很难提出建议 - 也许您可以编辑您的问题,使其更具体一点。

如果您想为特定节点组合创建该视图 URL 别名,您可以尝试使用 'insert'、'update' 和 'delete' 操作hook_nodeapi()来触发别名创建。显然,这只有在有一个连贯的规则允许您从代码中决定为哪些节点创建别名或不创建别​​名时才有效。

一旦您为某个路径设置了 URL 别名,只要通过l()函数创建指向该路径的链接,就会使用该别名而不是原始别名。因此,例如,如果您创建一个指向“content/2/6”的菜单项,则使用的 URL 将自动成为您为该路径创建的别名。


编辑:以防万一您最终以编程方式创建别名 - 如果您仍然使用 pathauto,您可以/应该使用它的pathauto_cleanstring()功能(来自“pathauto.inc”)来确保您生成的 URL 正确转义/重写为允许的字符。

于 2009-12-08T20:39:58.553 回答
0

有一种方法可以使用自定义 url 函数来创建专用的自定义 URL。如果您使用面板,但我不确定您是否愿意这样做,因为它非常静态。

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 替换为您自己的以及您自己想要的别名和来源。希望这可以帮助。

于 2009-12-08T18:10:23.367 回答
0

也许也有用:

通过使用视图来更改初始链接,以使用令牌替换来构建链接,例如<a href="nodeview/[title]/nid" title="[title]">link tekst</a> 并使用路径 exa nodeview 和参数 null、null、nid fi 处理视图中的节点

对于更复杂的链接,我们使用视图 php 字段来构建字符串..

于 2011-04-27T07:17:12.327 回答