Alterando todos os URLs para incluir informações extras


8

Quais ganchos estão disponíveis para alterar os URLs? Por exemplo, existem módulos de idioma que, quando ativados, fornecem URLs como, em /en/node/1vez de deixá-lo como /node/1.

Quero ter algo semelhante no URL, ao qual possa ter acesso sem ter outras funcionalidades comprometidas.

Como isso é realizado?

Respostas:


4

Então, você está procurando uma maneira de modificar um URL de link enquanto ele está sendo gravado? Eu examinei isso recentemente e fiquei surpreso com a quantidade de caça necessária.

Eu fui com hook_url_outbound_alter( &$path, &$options, $original_path ), o que permite alterar os URLs de link que estão sendo gravados pelo sistema de URL Drupal.

Há também o hook_url_inbound_alter( &$path, $original_path, $path_language )que pode ser melhor, pois inclui o idioma específico do caminho - depende de onde você deseja que a alteração ocorra. Pessoalmente, acho hook_url_outbound_alter()confiável e simples de trabalhar - ele altera todos os URLs apropriados à medida que são escritos e, usando as opções $, você pode adicionar e editar de forma confiável as strings de consulta (...? Query = string & foo = bar) e franquias de hash (... #someId).

Modifique $ path e ele atualizará o caminho real que é gravado no URL href. Obviamente, isso é executado em todos os links, portanto, você deve começar verificando se é um link que deseja modificar.

Ele é executado antes do alias, por isso será baseado nos padrões do Drupal. Para dar dois exemplos muito simplistas, se você deseja modificar apenas caminhos de taxonomia:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  if(strpos($original_path, 'taxonomy/term') === 0) {
    // do stuff
  }
}

E / ou se você deseja que ele seja executado apenas em páginas específicas, por exemplo, páginas de edição de nós:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  $current_path = explode("/", current_path() );
  if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
    // do stuff
  }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.