Criar alias de caminho programaticamente quando o nó é criado

8

Eu tenho um tipo de conteúdo personalizado criado por um módulo. Existe um gancho que eu possa usar para definir o alias do caminho do meu tipo de conteúdo personalizado quando um nó é criado?

Um dos meus campos é um código alfanumérico e eu quero usá-lo no caminho. por exemplo: 'event / myc0d3'

Notei que essa função ( path_set_alias ) existia em 6, mas não consigo encontrar o equivalente a 7. E não sei onde eu chamaria.

cbaigorri
fonte

Respostas:

10

Em vez de usar gancho, o módulo Pathauto deve ser usado onde você pode definir um padrão específico de como os aliases são gerados por tipo de conteúdo (at /admin/config/search/path/patterns). Lá você pode usar padrões de substituição ou codificar seus próprios. É uma abordagem muito mais limpa.

Caso contrário, você pode tentar hook_node_presave($node)alterar o alias diretamente:

$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";

ou use a path_save(&$path)função diretamente como abaixo:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);
kenorb
fonte
Para mim, apenas os dois em combinação funcionaram, de modo que, no final, dentro do campo de texto do apelido, o apelido certo é escrito. Fazer apenas path_save () funcionou, mas então eu tinha o alias errado no campo de texto alias na edição do nó; portanto, um simples novo salvamento teria me dado o alias errado novamente.
leymannx 10/09
9

A função agora é chamada path_save () ; consulte path_taxonomy_term_insert () para obter um exemplo.

Berdir
fonte
4
você realmente deve expandir essa resposta para não apenas vincular a recursos externos, mas os links, desde que permaneçam válidos, foram úteis.
DrCord
9

hook_node_insert () não estava funcionando no meu caso e, com algumas pesquisas, criei esta postagem no blog . Implementei hook_insert () da mesma maneira e presto.

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}
cbaigorri
fonte
2
Perceber que hook_insert()é usado apenas quando o módulo que o implementa está definindo um tipo de conteúdo; o gancho não pode ser usado para atuar em um nó para um tipo de conteúdo definido em outro módulo.
kiamlaluno
essa é exatamente a razão pela qual não é recomendável apenas vincular artigos, mas expandir a resposta e extrair as principais informações úteis desses artigos - esse link de 'postagem no blog' não é mais válido e resulta em um 404
Titi