我希望能够以编程方式将输出路径更改为Drupal节点而不使用PathAuto模块。我们目前处理大量内容(每天数千篇文章),这些内容会添加到后端。我不想使用PathAuto来生成路径别名,而是希望Drupal输出默认链接,但附加部分标题以获得更好的SEO。
这方面的一个例子是:
/节点/ 123
会更改为
/ node / 123 /这是文章标题(此路径目前适用于现有节点)
我理解如何在主题的基础上,通过修改主题/视图模板来做到这一点,但我想这样做,以便随时随地显示节点的链接,它会添加标题插件。
此外,我想将其限制为某种内容类型(例如,“文章”)。
我正在使用 Drupal 5.x 而我不想使用PathAuto (如果没有必要,我不想存储数十万个路径别名)
我正在寻找一种不使用PathAuto的解决方案
答案 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)
您可以为每种节点类型设置自定义路径别名,而无需使用路径自动模块:
如果您不想使用规则模块,则可以在自定义模块中使用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是做到这一点的“正确”方式。