我有一个由模块创建的自定义内容类型。创建节点时,是否可以使用钩子来设置自定义内容类型的路径别名?
我的一个字段是字母数字代码,我想在路径中使用它。例如:“ event / myc0d3”
我注意到该函数(path_set_alias)存在于6中,但我找不到7的等效函数。也不知道在哪里调用它。
我有一个由模块创建的自定义内容类型。创建节点时,是否可以使用钩子来设置自定义内容类型的路径别名?
我的一个字段是字母数字代码,我想在路径中使用它。例如:“ event / myc0d3”
我注意到该函数(path_set_alias)存在于6中,但我找不到7的等效函数。也不知道在哪里调用它。
Answers:
代替使用钩子,应该使用Pathauto模块,您可以在其中定义特定的模式(如何在每种内容类型上生成别名/admin/config/search/path/patterns
)(位于)。您可以在其中使用替换模式或自己编写代码。这是一种更清洁的方法。
否则,您可以尝试hook_node_presave($node)
直接更改别名:
$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";
或path_save(&$path)
直接使用以下功能:
$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);
该函数现在称为path_save(),有关示例,请参见path_taxonomy_term_insert()。
hook_node_insert()在我的情况下不起作用,通过一些搜索,我想到了此博客文章。我以相同的方式并预先实现了hook_insert()。
/**
* Implements hook_insert().
*/
function mymodule_insert($node) {
// Set the URL alias
if (empty($node->path['alias'])) {
$node->path['alias'] = 'slug/' . $node->nid;
}
}
hook_insert()
仅在实现模块的模块定义内容类型时使用;对于从另一个模块定义的内容类型,该挂钩不能用于对节点执行操作。