Drupal: URLs amigáveis a partir de títulos contendo HTML

Path
picture taken by mgallacher

Uma das limitações do Drupal, pelo menos até a versão 6, é a falta de suporte ao uso de HTML nos títulos dos conteúdos. Embora existam bons motivos para não se usar HTML nos títulos, em alguns casos isso é necessário. Infelizmente esta prática acaba gerando uma série de problemas que precisam ser tratados caso a caso.

Um dos problemas está relacionado ao uso do módulo Pathauto para geração de URLs amigáveis (aliases) para conteúdos do Drupal. Como o Pathauto cria as URLs a partir do título, se este contiver tags HTML, essas tags irão aparecer na URL. Por exemplo, a URL de uma página com  o título “Sobre a <b>Empresa</b>” seria algo como “/sobre-bempresab”.

A solução que encontrei (com a ajuda do Stack Overflow) baseia-se na modificação do token usado pelo Pathauto como ponto de partida para gerar o alias. Por padrão, o token utilizado é [title-raw], ou seja, o título do conteúdo sem nenhuma alteração. Se precisamos que o alias seja gerado sem as tags HTML, basta criar um novo token que forneça ao Pathauto o título já com as tags HTML removidas. Isso pode ser feito através dos hooks disponibilizados pelo módulo Token.

Os dois hooks que precisam ser implementados são o hook_token_list, que retorna uma lista com os tokens disponíveis, e o hook_token_values, que retorna o valor para um determinado token.

Considerando que os hooks serão implementados em um módulo de customizações chamado Tweak, o código para a criação do novo token para o Pathauto ficaria assim:

function tweak_token_list($type = 'all') {
  $tokens = array();
  if ($type == 'node' || $type == 'all') {
    $tokens['node']['clean-title'] = 'Node title without HTML tags';
  }
  return $tokens;
}
function tweak_token_values($type, $object = NULL, $options = array()) {
  $tokens = array();
  if ($type == 'node') {
    $node = $object;
    $tokens['clean-title'] = strip_tags($node->title);
  }
  return $tokens;
}

Com os hooks implementados, basta configurar o Pathauto para usar o token ‘clean-title’, ao invés do ‘title-raw’. Isto é feito na seção “Node path settings” da página “Automated alias settings”.

This entry was posted in Drupal and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

*


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>