web-dev-qa-db-fra.com

Comment limiter la référence d'entité pour autoriser uniquement le référencement de nœuds avec la même langue (ou non définie)?

Je sais que je peux simplement ajouter la langue au titre affiché d'un nœud dans le champ Référence d'entité basé sur les vues. Ce que je n'ai pas découvert, c'est comment limiter les valeurs possibles pour afficher uniquement et autoriser celles qui correspondent.

  • Lorsque le nœud actuel est indépendant de la langue, tous les nœuds doivent être répertoriés comme possible dans le champ de référence.

  • Lorsque le nœud a une langue définie, seuls les nœuds de la même langue ou d'une langue non définie doivent être disponibles.

Cela ne me dérange pas vraiment que la mauvaise sélection soit enregistrée dans la base de données si la langue du nœud sera modifiée, car cela ne devrait pas se produire assez souvent pour être un problème. Je ne veux tout simplement pas de "mauvais" nœuds dans la liste des choix de référence disponibles. La validation à l'enregistrement serait bien, mais ce n'est pas un must-have.

J'ai essayé d'utiliser la vue pour remplir la liste déroulante du champ de référence d'entité sur le formulaire d'édition de nœud:

Screenshot of field settings

Mon gros bloc est de savoir comment accéder à une langue d'un nœud actuel en vue qui fournit la liste des entités disponibles. Je ne peux pas trouver d'autre moyen que de deviner en utilisant le langage d'interface utilisateur actuel, mais cela peut être incorrect pour les modifications et est généralement incorrect lors de la création d'un nouveau nœud. Idéalement, le champ de référence d'entité doit être repeuplé via AJAX en fonction de la langue sélectionnée dans l'édition de nœud à partir de.

Pour le plaisir des futurs visiteurs, j'apprécierais une réponse complète. Bien sûr, les réponses non basées sur des vues seront également appréciées.

6
Mołot

Limite d'option de champ de référence le module permet aux champs de référence de plusieurs types d'avoir les options disponibles de leurs widgets limitées par les valeurs des autres champs de l'entité actuelle.

Il prend actuellement en charge le terme de taxonomie et les champs référence d'entité .

4
Bala

Je peux suggérer quelques "concepts" de solution avec Views.

Je n'ai pas compris si vous réussissez à définir la langue du nœud cible. (si non, écrivez un commentaire, je mettrai à jour la réponse).

Étape1. Vous pouvez passer des arguments à la vue qui filtre le champ de référence d'entité. Il est ensuite possible d'ajouter votre langue aux arguments des vues de champ par programmation dans $field['settings']['handler_settings']['view']['args'];.

Step2. Vous pouvez créer un filtre contextuel personnalisé par programmation. Le filtre transmettra l'ID de langue. Ce contexte changera la langue d'affichage à l'aide de la valeur de l'agrément. vous pouvez changer la langue dans la méthode alter - query() de votre classe enfant de views_handler_argument.

Ensuite, il suffit de dpm($this) dans la méthode query() et de modifier la valeur de langue en votre argument.

1
milkovsky

Découvrez Translated Entity Reference module.

Une autre option consiste à créer votre vue personnalisée pour rendre les options sélectionnables de votre champ Référence d'entité. Juste:

  1. Créer une nouvelle vue
  2. Ajouter un nouveau widget de vue de référence d'entité
  3. Ajoutez un filtre pour votre type de contenu
  4. Ajouter un nouveau filtre contextuel pour le champ "Langue"
  5. Sélectionnez "Fournir la valeur par défaut" + "Code PHP" (vous aurez peut-être besoin du module "Vues PHP" pour cela)
  6. Entrez ce code dans la zone de texte "Code de filtre contextuel PHP":

    global $ language; $ lang = $ langue-> langue;

    $ node = menu_get_object (); if (! vide ($ node)) {$ lang = $ node-> language; } return $ lang;

  7. Modifiez votre champ de référence d'entité et sélectionnez votre nouvelle vue personnalisée comme mode de sélection d'entité

1
Roger

Référence de champ

Selon la configuration, les auteurs peuvent sélectionner des champs du même nœud/entité, d'autres nœuds/entités, de révisions spécifiques, de langues spécifiques ou même d'une valeur delta spécifique dans le champ. Les champs peuvent être affichés en utilisant le mode "complet" ou "teaser" à partir de leur nœud/entité d'origine.

0
Bala

Je cherche la même chose.

Le plus proche que j'ai obtenu était en utilisant la langue de l'utilisateur actuel. La langue de l'utilisateur actuel sera déterminée par ce que vous sélectionnez dans /admin/config/regional/language/configure.

  • ajouter une relation "Traduction d'entité: traductions"
  • ajouter un filtre "Traduction d'entité: langue (= langue de l'utilisateur actuel)"

En outre, ce lien a résolu le problème field_title pour moi: https://drupal.org/node/1327012 .

Ainsi, par exemple, aller à /en/node/add remplira la vue d'entité avec les entités référencées en anglais. Mais, si l'utilisateur change la langue sur le formulaire d'édition, la vue restera la même.

Cette solution suffirait si les entités référencées étaient les mêmes dans toutes les langues et simplement traduites (comme la fonctionnalité "localiser les termes" fournie par la traduction de la taxonomie principale).

La seule autre façon "rapide et sale" à laquelle je peux penser est d'éditer la sortie du champ de titre dans les vues et d'ajouter une classe CSS en fonction de la langue. Ensuite, écrire une requête jquery qui affiche/masque les entités en mappant la classe de l'entité dans la vue au champ de sélection de la langue.

* Idéalement, la vue d'entité devrait se repeupler via ajax en fonction de la langue sélectionnée dans l'édition du nœud à partir de. *

Si quelqu'un a des idées, faites-le nous savoir.

Merci

0
gkom