No Drupal, como alterar os valores passados para Pathauto?
Pergunta
Eu tenho Pathauto configurado para gerar um alias baseado no título de um nó, para um tipo de conteúdo específico. O problema é que eu quero fazer pequenas alterações neste título antes que a Pathauto o use para gerar o alias.
O primeiro comentário em esta postagem sugere o uso de hook_token_values, mas eu realmente não conseguia entender como usá -lo, mesmo depois de ler o documentos. Nos meus testes, quando implemento esse gancho, o alias gerado é sempre "Array", o que significa que estou perdendo alguma coisa.
Qualquer ajuda? Obrigado.
Solução
Pode ser que você tenha perdido implementar hook_token_list
também. Fornecer um novo token é um processo de duas etapas:
- Implemento
hook_token_list
para declarar os tokens que você fornecerá. Este será apenas o nome dos tokens, juntamente com uma explicação curta, e as informações sobre que tipo de objetos os tokens serão aplicados (por exemplo, nó, usuário, taxonomia, ...) - Implemento
hook_token_value
para realmente gerar o conteúdo dos tokens. Isso será chamado quando os tokens forem substituídos pelo conteúdo que devem representar.
Como você deseja apenas fornecer uma versão alternativa do token -título já fornecido pelo módulo token, é provavelmente melhor copiar as partes relevantes do token_node.inc, despojadas para os casos relevantes e ajustadas para serem usadas em outro módulo:
/**
* Implementation of hook_token_list().
*/
function yourModule_token_list($type = 'all') {
if ($type == 'node' || $type == 'all') {
$tokens['node']['yourModule-title'] = t('Node title (customized version by yourModule)');
return $tokens;
}
}
Isso simplesmente diz que yourModule
fornece um token para objetos de nó, nomeados yourModule-title
, junto com uma breve descrição. O trabalho principal é feito no outro gancho:
/**
* Implementation of hook_token_values().
*/
function yourModule_token_values($type, $object = NULL, $options = array()) {
$values = array();
switch ($type) {
case 'node':
$node = $object;
// TODO: Replace the check_plain() call with your own token value creation logic!
$values['yourModule-title'] = check_plain($node->title);
break;
}
return $values;
}
Isso será chamado sempre que os tokens para objetos de nó forem necessários, com o nó em questão sendo passado como o $object
parâmetro (para um token do usuário, o $type
seria 'usuário' e $object
seria o objeto do usuário e assim por diante para outros tipos). O que ele faz é criar uma matriz de valores, digitada pelo nome do token, com a substituição para esse token como o valor. O código original de token_node.inc apenas executa o título check_plain()
, então este seria o lugar para inserir sua própria lógica.
Outras dicas
No Drupal 7, a funcionalidade do token foi movida para o núcleo. Tokens são implementados pelo Hook_tokens e Hook_token_info métodos. Para exemplos de uso, siga os links fornecidos e procure links para funções que implemente Statistics_tokens e Statistics_token_info Funções úteis para entender como esse gancho funciona.
Provavelmente também vale a pena notar que esse gancho precisa ser implementado por um módulo ... minha primeira tentativa, soltei minhas funções de teste no modelo do tema.php, apenas para que nada aconteça: P: P: P: