Создайте псевдоним пути программно при создании узла
У меня есть пользовательский тип контента, созданный модулем. Есть ли крючок, который я могу использовать для установки псевдонима пути моего пользовательского типа контента при создании узла?
Одно из моих полей - это буквенно-цифровой код, и я хочу использовать его в пути. например: "событие/myc0d3"
Я заметил, что эта функция (path_set_alias) существовала в 6, но я не могу найти эквивалент для 7. И не знаю, как бы я это назвал.
4 answers
Вместо использования hook следует использовать модуль 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_node_insert().