web-dev-qa-db-fra.com

Comment obtenir le chemin vers le nœud traduit?

J'ai mis en place un site multilingue en Drupal 7. Dans un modèle, je dois ajouter un lien vers un nœud de contenu spécifique. Ce nœud a des traductions et des alias de chemin comme ceci:

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

Dans le modèle, j'appelle url() pour obtenir le lien vers la version aliasée du nœud de contenu dans la langue actuelle.

Sur la page allemande, il doit créer un lien vers /de/pathalias_de Sur la page anglaise vers /en/pathalias_en

J'ai essayé plusieurs variantes, comme appeler le nid, appeler l'alias, passer l'objet de langage courant à url().

Est-ce quelque chose que url() devrait pouvoir faire ou ai-je besoin d'une fonction différente? Merci!

10
Dooderoo

Après avoir regardé la source du module "Content translation", j'ai trouvé cette solution:

    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

Cela produira le lien vers l'alias de nœud correct. Fonctionne et n'est pas trop compliqué - demandez-vous toujours s'il existe une fonction qui le fait déjà.

14
Dooderoo
global $language;

$translation_node = translation_path_get_translations("42");

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

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

Jetez un oeil à drupal_get_path_alias fuction

Étant donné un chemin interne Drupal, retournez l'alias défini par l'administrateur.

Si aucun chemin n'est fourni, la fonction renverra l'alias de la page en cours.

Paramètres

$ path: Un Drupal chemin interne.

$ path_language: Un code de langue facultatif pour rechercher le chemin d'accès.

Comme vous pouvez le constater, il prend un paramètre path_language. Ainsi, vous pouvez découvrir la langue actuelle et ensuite passer à cette fonction.

Ou utilisez simplement module Multilink

  1. Conçu pour les sites multilingues. Particulièrement pertinent pour les sites où tout le contenu n'est pas disponible dans toutes les langues, ou peut être rendu disponible (traduit) ultérieurement.
  2. Vous permet de créer facilement des liens dans le contenu vers d'autres nœuds, et ces liens se mettent automatiquement à jour pour pointer vers une version traduite appropriée des nœuds référencés, lorsqu'ils sont disponibles.
4
Gokul N K

Aucune des réponses ci-dessus ne semble utiliser correctement i18n_path. Si vous souhaitez créer un lien vers le nœud traduit, vous devez simplement activer le module i18n_path et formater le chemin ainsi,

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

Vous devriez probablement utiliser fonction de lien . Il vous permet de passer la langue en paramètre et c'est la fonction appropriée pour créer un lien avec Drupal.

2
Matt

En utilisant Translation Redirect vous pouvez créer un lien vers des nœuds avec un préfixe de langue.

C'est ce qu'il dit:

Le module de redirection de traduction redirige les utilisateurs anonymes (y compris les robots d'indexation) vers la traduction de la page dans la langue demandée, si elle existe, en utilisant un code de redirection 301. Par exemple, si la demande concerne/de/node/23 et que node/23 correspond à une page en anglais, l'utilisateur sera redirigé vers la traduction allemande du nœud en anglais si elle existe. Si la traduction n'existe pas, le contenu du nœud source s'affiche.

Par exemple, si le nid 22 est pour la version anglaise et qu'il a des versions française et allemande, vous pouvez simplement les lier en fr/node/22 et de/node/22. Ce 22 peut également être n'importe quel nid de la version traduite.

Si une traduction particulière n'est pas trouvée par exemple si vous n'avez pas ajouté pour le japonais, alors ja/node/22 donnera 404 pour les utilisateurs anonymes.

1
AgA

Pour obtenir le chemin de préfixe correct, j'utilise:

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

La drupal_get_path_alias () retourne uniquement l'alias, l'url () est celle qui ajoute le préfixe ("en /").

0
nimbfire