Comment éviter que Drupal redirige mes pages de vues multilingues?

8

J'ai une page Vues dans un site Web multilingue où j'ai besoin d'une URL différente pour chaque langue, c'est-à-dire:

  • es: mysite / apartamentos.
  • fr: mysite / appartments.
  • en: mysite / appartements.
  • ru: mysite / arendu.

J'ai créé un alias d'URL pour chaque langue (qui est mysite / appartments bien que la langue par défaut de mon site soit l'espagnol) donc l'alias espagnol pour appartmentsest apartamentoset ainsi de suite. J'ai créé ces alias à l'aide de configuration >> Search and Metadata >> URL aliases >> add alias.

Je dois passer des paramètres de requête à la vue pour filtrer les résultats, donc mon URL est quelque chose comme mysite / en / appartments / p / location_field / 2 et j'ai un formulaire où je mets manuellement l'action comme:

echo "/".$language."/".$translated_page

où la page traduite peut être des apartamentos, appartements, appartements ou arendu, ce qui rend l'URL de l'action:

/ es / apartamentos, / fr / appartements, / en / appartments et / ru / arendu

Mon problème est que lorsque ce formulaire est envoyé, Drupal m'envoie à

mysite / es / appartments / p / location_field / 2

au lieu de

mysite / es / apartamentos / p / location_field / 2

et la même chose se produit pour toutes les langues. Le reste de la chose semble bien et même le fil d'Ariane (qui est généré en utilisant l'URL) semble correct (Inicio >> Apartamentos Costa Dorada, en espagnol).

Lorsque j'utilise le commutateur de langue, il me redirige vers la page traduite correcte, mais sans les paramètres de requête ( mysite/es/appartments/p/location_field/2il m'envoie vers mysite/es/apartamentos).

Je ne sais pas ce qui peut être à l'origine de ce problème, peut-être que les paramètres de requête interfèrent avec l'interprétation des alias?

Remarque : j'ai de nombreux modules de traduction activés. Pour les modules i18n, il y a: bloc, champ, menu, nœud, chemin, chaîne, taxonomie, traduction (ensembles de traduction), variable et vues.

Miquel Correa Casablanca
la source

Réponses:

6

Sous-module i18n_path

Je suppose que vous utilisez également le module i18n . Assurez-vous donc que vous avez également activé le i18n_pathsous - module (= traduction du chemin). Plus de détails à ce sujet, dans la documentation de la communauté (balisage gras ajouté ici):

... vous permet de mapper ensemble des pages existantes qui sont des traductions les unes des autres. Cela permettra aux utilisateurs d'utiliser le sélecteur de langue pour naviguer entre les pages associées.

Le module est destiné à être utilisé en dernier recours pour traduire des chemins qui ne pourraient autrement pas être mappés ensemble en tant que traductions. Par exemple, les chemins d'accès aux nœuds traduits peuvent déjà être liés au module de traduction de contenu et les chemins d'accès aux termes de taxonomie traduits peuvent être liés au module de traduction de taxonomie. Les traductions de chemin doivent être utilisées pour lier des chemins génériques, tels que ceux fournis par les vues ou les panneaux.

Pour configurer les traductions d'un chemin particulier, vous devez créer un ensemble de traductions de chemins en accédant à Configuration> Régionale et linguistique> Ensembles de traductions> Chemins et en cliquant sur Ajouter une traduction de chemin.

pages vues i18n

Vous pouvez également vérifier si vous pouvez le faire fonctionner à l'aide du module de visualisation des pages i18n . Quelques détails sur sa page de projet:

... offre un nouvel affichage des vues, où vous pouvez sélectionner différents chemins pour chaque langue activée sur votre site, afin qu'une vue ait un itinéraire localisé pour chaque langue.

Note 1 : " si vous ne trouvez aucune option dans la vue pour traduire le chemin d'accès " (comme dans votre commentaire ci-dessous), alors vous voudrez peut-être jeter un œil à ce qui est mentionné dans le commentaire # 1 du numéro 2389535 , qui stipule:

... Vous avez peut-être choisi un affichage de page plutôt qu'un affichage de page i18n lorsque vous avez créé votre affichage. Veuillez vous assurer que vous avez sélectionné l'affichage des vues correct. Je joins quelques captures d'écran pour aider:

Sérigraphie 1 :

entrez la description de l'image ici

Sérigraphie 2 :

entrez la description de l'image ici

Note 2 : Pour répondre à la question sur " Dois-je recréer la page de vue entière pour en faire une page i18n_? " (Comme dans l'un de vos commentaires (maintenant supprimés) sous cette réponse), je voudrais essayer d'utiliser l'une des approches décrites dans les réponses à la question sur Comment dupliquer un affichage de vues (qui n'est pas le maître) en tant que type d'affichage différent? ... Si cela ne fonctionne pas / ne s'applique pas, la recréation de la page d'affichage entière semble être la seule option qui reste.

Pierre.Vriens
la source
3

Supprimez le chemin-alias et essayez de coder ce cas spécial vous-même, en utilisant

hook_url_inbound_alter et ou hook_url_outbound_alter

ou faites simplement vos propres chemins via des rappels de page personnalisés (hook_menu), puis affichez la vue avec views_embed_view.

Vous pouvez également modifier l'action de la forme du filtre exposé:

/**
 * Implements hook_form_alter().
 */
function foo_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'views_exposed_form') {
    $form['#action'] = current_path();
  }
}

Ou:

/**
 * Implements hook_form_views_exposed_form_alter().
 */
function foo_form_views_exposed_form_alter(&$form, &$form_state) {
  if ($form['#id'] == 'views-exposed-form-foo-default') { // Or: if ($form['#action'] === '/foo')
    $form['#action'] = '/bar';
  }
}

Formulaire pris ici Comment changer l'URL d'envoi du filtre de recherche exposé?

rémy
la source