Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何以编程方式输出Drupal节点链接的自定义路径(不带PathAuto)?_Php_Drupal - Fatal编程技术网

Php 如何以编程方式输出Drupal节点链接的自定义路径(不带PathAuto)?

Php 如何以编程方式输出Drupal节点链接的自定义路径(不带PathAuto)?,php,drupal,Php,Drupal,我希望能够以编程方式更改Drupal节点的输出路径,而无需使用PathAuto模块。我们目前处理大量添加到后端的内容(每天数千篇文章)。与使用PathAuto生成路径别名不同,我希望Drupal输出默认链接,但附加一个部分标题以更好地进行SEO 这方面的一个例子是: /节点/123 将更改为 /node/123/这是文章标题(此路径当前适用于现有节点) 我了解如何通过修改主题/视图模板在主题的基础上实现这一点,但我希望这样做,以便在任何地方显示指向节点的链接时,它都会添加标题插件 此外,我想将其

我希望能够以编程方式更改Drupal节点的输出路径,而无需使用PathAuto模块。我们目前处理大量添加到后端的内容(每天数千篇文章)。与使用PathAuto生成路径别名不同,我希望Drupal输出默认链接,但附加一个部分标题以更好地进行SEO

这方面的一个例子是:

/节点/123

将更改为

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

我了解如何通过修改主题/视图模板在主题的基础上实现这一点,但我希望这样做,以便在任何地方显示指向节点的链接时,它都会添加标题插件

此外,我想将其限制为特定的内容类型(例如,“article”)

我使用的是Drupal 5.x,我不想使用PathAuto
(如果不需要,我不想存储成千上万的路径别名)


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

Drupal有一个内部机制,可以从“/node/1234/”映射到“/blogs/看看我的猫刚刚做了什么”。它是核心系统的一部分,几乎在任何地方都可以使用,在任何请求中都可以使用,甚至不必询问。它的速度足够快,你几乎永远不会注意到它的发生——drupal中还有很多其他的东西要慢得多

如果您关心url在前端的显示方式,那么应该使用url()函数(以及对节点内容执行相同操作的过滤器)以另一种方式处理查找

Pathauto的作用在于,当您创建或编辑内容时,它将在Drupal的url_别名表中生成大量条目(基于您创建的任何Pathauto规则)。这是一次性费用。除非您以天文数字的速度生成内容,否则这样做的成本可以忽略不计

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


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

尽管Pathauto可能是最佳选择,但您可以使用hook_菜单功能将URL装载到方法。该方法可以根据URL以编程方式找到所需的节点。

您可以尝试使用以下两个函数:


但实际上,Pathauto是实现这一点的“正确”方法。

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

  • 如果尚未安装,请安装规则模块
  • 使用“保存“您的类型”类型的内容之前”事件创建规则
  • 添加一个php操作,然后创建自定义路径并执行以下操作:
  • $node->path['alias']=自定义路径别名
  • 点击save,就完成了

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

    Sean-谢谢-这可能是最好的建议。当我把问题放在一起时,我几乎把它拉了出来,意识到也许我需要更仔细地研究Pathauto。事实上,我知道Pathauto有很多优点,但我感兴趣的是更好地理解如何使用drupal方法为节点生成链接。另外,我正在尝试优化这个网站,所以额外的查询或连接将对性能产生影响(特别是在列表页面上)。。。在列表视图中链接的节点需要显示正确的链接,或显示在相关内容节中,或显示在任何位置。基本上实现了pathauto的一些功能,但没有任何查询。