Создайте псевдоним пути программно при создании узла


У меня есть пользовательский тип контента, созданный модулем. Есть ли крючок, который я могу использовать для установки псевдонима пути моего пользовательского типа контента при создании узла?

Одно из моих полей - это буквенно-цифровой код, и я хочу использовать его в пути. например: "событие/myc0d3"

Я заметил, что эта функция (path_set_alias) существовала в 6, но я не могу найти эквивалент для 7. И не знаю, как бы я это назвал.

Author: cbaigorri, 2011-10-14

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);
 11
Author: kenorb, 2015-07-30 09:57:25

Функция теперь называется path_save(), см. Пример path_taxonomy_term_insert().

 9
Author: Berdir, 2011-10-14 08:58:32

Функция 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;
    }
}
 9
Author: cbaigorri, 2011-11-07 11:20:42

Реализация hook_node_insert().

 0
Author: Oswald, 2011-11-07 11:23:45