Como obter o caminho para o nó traduzido?

10

Eu configurei um site multilíngue no Drupal 7. Em um modelo, preciso adicionar um link a um nó de conteúdo específico. Este nó possui traduções e aliases de caminho da seguinte forma:

node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)

No modelo que eu gostaria de chamar url()para obter o link para a versão com alias do nó de conteúdo no idioma atual.

Na página em alemão, deve ser linkado /de/pathalias_dena página em inglês para/en/pathalias_en

Eu tentei várias variações, como chamar o nid, chamar o alias, passar o objeto de idioma atual para url().

Isso é algo que url()deve ser capaz de fazer ou preciso de uma função diferente? Obrigado!

Dooderoo
fonte

Respostas:

14

Depois de analisar a fonte do módulo "Tradução de conteúdo", eu vim com esta solução:

    global $language;
    $translations = translation_path_get_translations("node/42");
    /*
    Returns the paths of all translations of a node, based on its Drupal path:
    array(2) {
        ["de"]=>string(7) "node/42"
        ["en"]=>string(7) "node/43"
    }
    */
    print l(t('Link Title'), $translations[$language->language]); //l() will return the alias to node/42

Isso produzirá o link para o alias do nó correto. Funciona e não é muito complicado - ainda se pergunta se existe uma função que já faça isso.

Dooderoo
fonte
2
Ou use $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));para procurar o alias em vez da identificação do nó, é mais flexível. Você precisa passar o idioma correto.
Dooderoo 27/02
5
global $language;

$translation_node = translation_path_get_translations("42");

$nid = $translation_node[$language->language]->nid;

$path = "node/{$nid}";
vetal4ik
fonte
2
Bem-vindo ao Drupal Answers! Embora isso possa teoricamente responder à pergunta, seria preferível incluir as explicações essenciais junto com o seu código.
Mołot
4

Dê uma olhada no drupal_get_path_alias fuction

Dado um caminho interno do Drupal, retorne o alias definido pelo administrador.

Se nenhum caminho for fornecido, a função retornará o alias da página atual.

Parâmetros

$ path: um caminho interno do Drupal.

$ path_language: um código de idioma opcional para procurar o caminho.

Como você pode perceber, é necessário um parâmetro path_language. Então você pode descobrir o idioma atual e depois passar para esta função.

Ou simplesmente use o módulo Multilink

  1. Projetado para sites em vários idiomas. Especialmente relevante para sites em que nem todo o conteúdo está disponível em todos os idiomas ou pode ser disponibilizado (traduzido) posteriormente.
  2. Permite criar facilmente links no conteúdo para outros nós, e esses links são atualizados automaticamente para apontar para uma versão traduzida adequada dos nós referenciados, quando disponível.
Gokul NK
fonte
1
drupal_get_path_alias()não procurará traduções de um determinado nó, apenas aliases já no idioma especificado. Encontrei outra solução alternativa, veja minha resposta abaixo.
Dooderoo 26/02
3

Nenhuma das respostas acima parece fazer uso correto do i18n_path. Se você deseja vincular ao nó traduzido, basta ativar o módulo i18n_path e formatar o caminho assim,

drupal_get_path_alias('node/'.$node->nid, $node->language);
macjules
fonte
2

Você provavelmente deve usar a função de link . Ele permite que você passe o idioma como parâmetro e é a função apropriada para criar um link com o Drupal.

Matt
fonte
l()usa url()internamente, portanto, não importa nesse caso.
Dooderoo 26/02
1

Usando o redirecionamento de tradução, é possível vincular aos nós com prefixo de idioma.

Isto é o que diz:

O módulo de redirecionamento de tradução redireciona usuários anônimos (incluindo rastreadores da Web) para a tradução da página no idioma solicitado, se existir, usando um código de redirecionamento 301. Por exemplo, se a solicitação for para / de / node / 23 e o node / 23 corresponder a uma página em inglês, o usuário será redirecionado para a tradução em alemão do nó em inglês, se existir. Se a tradução não existir, o conteúdo do nó de origem será exibido.

Por exemplo, se o nid 22 for da versão em inglês e tiver francês e alemão, você poderá simplesmente vincular a eles como fr / node / 22 e de / node / 22. Este 22 também pode ser qualquer nid da versão traduzida.

Se uma tradução específica não for encontrada, por exemplo, se você não adicionou o japonês, então ja / node / 22 fornecerá 404 para usuários anônimos.

AgA
fonte
0

Para obter o caminho do prefixo correto, eu uso:

$node_url = url(drupal_get_path_alias('node/' . $row->nid));

O drupal_get_path_alias () retorna apenas o alias, a url () é a que adiciona o prefixo ("en /").

foguete
fonte