如何以编程方式为Drupal Node Links(没有PathAuto)输出自定义路径?

时间:2009-06-03 13:38:50

标签: php drupal

我希望能够以编程方式将输出路径更改为Drupal节点而不使用PathAuto模块。我们目前处理大量内容(每天数千篇文章),这些内容会添加到后端。我不想使用PathAuto来生成路径别名,而是希望Drupal输出默认链接,但附加部分标题以获得更好的SEO。

这方面的一个例子是:

/节点/ 123

会更改为

/ node / 123 /这是文章标题(此路径目前适用于现有节点)

我理解如何在主题的基础上,通过修改主题/视图模板来做到这一点,但我想这样做,以便随时随地显示节点的链接,它会添加标题插件。

此外,我想将其限制为某种内容类型(例如,“文章”)。

我正在使用 Drupal 5.x 而我不想使用PathAuto (如果没有必要,我不想存储数十万个路径别名)

我正在寻找一种不使用PathAuto的解决方案

4 个答案:

答案 0 :(得分:5)

Drupal有一个内部机制,可以从“/ node / 1234 /”映射到“/ blogs / look-at-what-my-cat-just-did”。它是核心系统的一部分,几乎在任何地方都可以用于每一个请求,甚至不用问。它足够快你几乎从不会注意到它发生了 - 在drupal中有很多其他东西 - 更慢 - 。

如果您担心如何在前端显示网址 - 您应该使用url()函数(以及对节点内容执行相同操作的过滤器)来处理其他方式的查找。

Pathauto的用武之地在于,当您创建或编辑内容时,它会在Drupal的url_alias表中生成许多条目(基于您创建的任何pathauto规则)。这是一次性费用。除非你以天文数字的速度生成内容,否则与此相关的成本可以忽略不计。

您已经通过简单地使用Drupal来支付查找URL别名的费用。没有黑客核心,你无法真正避免它。在数据库中存储“数十万个路径别名”并不是什么大不了的事 - 如果你把它分解为实际的存储要求,你只需要看几个兆字节。由于表格索引良好,因此查找将几乎是即时的。这是核心功能和无论Pathauto是否在您的系统上,都会发生。

除非您对要将节点映射到的URL类型有一些非常奇怪的要求,否则您所做的任何事情都只是重新创建Pathauto现有功能的一个子集(并且可能会引入一堆新错误)​​。

答案 1 :(得分:1)

您可以为每种节点类型设置自定义路径别名,而无需使用路径自动模块:

  1. 如果还没有安装规则模块。
  2. 使用“在保存类型为“您的类型”的内容之前”事件创建规则
  3. 添加一个php操作,然后创建您的自定义路径并执行以下操作:
  4. $ node-> path ['alias'] =您的自定义路径别名
  5. 点击保存并完成

如果您不想使用规则模块,则可以在自定义模块中使用hook_node_presave

答案 2 :(得分:0)

尽管Pathauto可能是最佳选择,但您可以使用hook_menu函数将URL挂载到方法。该方法可以基于URL以编程方式找到所需的节点。

答案 3 :(得分:0)

您可以尝试使用这两个功能:

http://api.drupal.org/api/function/custom_url_rewrite_outbound http://api.drupal.org/api/function/custom_url_rewrite_inbound

但实际上,Pathauto是做到这一点的“正确”方式。