Come ottenere il percorso al nodo tradotto?


10

Ho creato un sito in più lingue in Drupal 7. In un modello devo aggiungere un collegamento a un nodo di contenuto specifico. Questo nodo ha traduzioni e alias dei percorsi in questo modo:

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

Nel modello che vorrei chiamare url()per ottenere il collegamento alla versione con alias del nodo del contenuto nella lingua corrente.

Sulla pagina tedesca dovrebbe essere collegato alla /de/pathalias_depagina inglese a/en/pathalias_en

Ho provato diverse varianti, come chiamare il nid, chiamare l'alias, passando l'oggetto lingua corrente a url().

È qualcosa che url()dovrebbe essere in grado di fare o ho bisogno di una funzione diversa? Grazie!

Risposte:


14

Dopo aver esaminato l'origine del modulo "Traduzione dei contenuti", ho trovato questa soluzione:

    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

Ciò genererà il collegamento all'alias nodo corretto. Funziona e non è eccessivamente complicato - mi chiedo ancora se c'è già una funzione che lo fa.


2
Oppure usa $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));per cercare l'alias anziché l'id del nodo, è più flessibile. Devi passare la lingua corretta però.
Dooderoo,

5
global $language;

$translation_node = translation_path_get_translations("42");

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

$path = "node/{$nid}";

2
Benvenuto in Drupal Answers! Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere le spiegazioni essenziali insieme al codice.
Mołot,

4

Dai un'occhiata al drupal_get_path_alias fuction

Dato un percorso Drupal interno, restituisce l'alias impostato dall'amministratore.

Se non viene fornito alcun percorso, la funzione restituirà l'alias della pagina corrente.

parametri

$ path: un percorso Drupal interno.

$ path_language: un codice lingua opzionale per cercare il percorso.

Come puoi capire ci vuole un parametro path_language. Quindi potresti scoprire la lingua corrente e quindi passare a questa funzione.

O semplicemente usa il modulo Multilink

  1. Progettato per siti multilingue. Particolarmente rilevante per i siti in cui non tutti i contenuti sono disponibili in tutte le lingue o possono essere resi disponibili (tradotti) in un secondo momento.
  2. Consente di creare facilmente collegamenti nel contenuto ad altri nodi e tali collegamenti si aggiornano automaticamente per puntare a una versione tradotta adatta dei nodi di riferimento, quando disponibili.

1
drupal_get_path_alias()non cercherà le traduzioni di un determinato nodo, ma solo gli alias già nella lingua data. Ho trovato un'altra soluzione alternativa, vedere la mia risposta di seguito.
Dooderoo,

3

Nessuna delle risposte sopra sembra fare un uso corretto di i18n_path. Se desideri collegarti al nodo tradotto, devi semplicemente abilitare il modulo i18n_path e formattare il percorso in questo modo,

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

2

Probabilmente dovresti usare la funzione link . Ti permette di passare la lingua come parametro ed è la funzione appropriata per creare un collegamento con Drupal.


l()utilizza url()internamente, quindi non importa in questo caso.
Dooderoo,

1

Utilizzando il reindirizzamento della traduzione è possibile collegarsi ai nodi con il prefisso della lingua.

Questo è ciò che dice:

Il modulo di reindirizzamento della traduzione reindirizza gli utenti anonimi (compresi i crawler Web) alla traduzione della pagina nella lingua richiesta, se esiste, utilizzando un codice di reindirizzamento 301. Ad esempio, se la richiesta è per / de / node / 23 e node / 23 corrisponde a una pagina inglese, l'utente verrà reindirizzato alla traduzione tedesca del nodo inglese se esiste. Se la traduzione non esiste, viene visualizzato il contenuto del nodo di origine.

Ad esempio, se nid 22 è per la versione inglese e ha francese e tedesco, puoi semplicemente collegarti ad essi come fr / node / 22 e de / node / 22. Questo 22 può anche essere qualsiasi nid della versione tradotta.

Se non si trova una traduzione particolare, ad esempio se non si è aggiunto per il giapponese, allora ja / node / 22 fornirà 404 per gli utenti anonimi.


0

Per ottenere il percorso prefisso corretto, utilizzo:

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

Drupal_get_path_alias () restituisce solo l'alias, url () è quello che aggiunge il prefisso ("en /").

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.