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.

Foi útil?

Solução

Pode ser que você tenha perdido implementar hook_token_list também. Fornecer um novo token é um processo de duas etapas:

  1. 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, ...)
  2. 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:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top