Entity Reference : afficher un contenu similaire

Lunette sur un portable

Cette vue permet d'afficher dans un bloc le contenu de votre site qui référence la même entité que celle référencée par l'article consulté.

Par exemple, si vous disposez d'un type de contenu Artiste qui dispose d'une référence (via un champ Entity Reference) vers le type de Contenu Mouvement  vous voulez afficher, lors de la consultation d'un artiste, tous les autres artistes qui appartiennent même mouvement (artistique) et qui donc référencent le même mouvement.

Il faut créer une vue de type bloc, et choisir un format d'affichage (liste html de champs par exemple). Choisissez d'afficher tous les contenus et éventuellement vous pouvez les filtrer si besoin. Le seul paramètre qui va être utilisé se situe dans les filtres contextuels.

Bloc entity reference

Le principe consiste à filtrer les articles affichés en se basant sur le filtre contextuel basé sur le champ, de type Entity Reference, utilisé pour créer une relation entre deux entités. Dans notre exemple précédent, les artistes référencent un mouvement artistique via un champ intitulé field_ref_mouvement.

Avec ce filtre contextuel basé sur le champ field_ref_mouvement, nous allons alors récupérer les contenus dont le champ field_ref_mouvement est égal à la valeur de ce champ dans le filtre contextuel.

L'enjeu est donc de récupérer la valeur du champ Entity Reference d'un contenu (de type Artiste dans notre exemple) lorsqu'il est visualisé et de le transmettre au filtre contextuel de la vue.

Dans notre exemple (cf. photo ci-dessus) nous avons donc ajouté le champ Contenu:mouvement (field_ref_mouvement) dans le filtre contextuel de la vue. Il faut le paramétrer ainsi :

Dans la section Quand la valeur de filtre N'EST PAS disponible, choisir

  • Fournir une valeur par défaut > Code PHP
  • Spécifier le critère de validation >Validation simple

Dans la section Plus, cochez Autoriser plusieurs valeurs

Le snippet PHP à utiliser est le suivant (à adapter selon le nom machine de votre champ entity reference) :

$node = menu_get_object();   // on récupère le noeud courant
switch ($node->type) {       // on peut gérer plusieurs cas de figure selon le type de contenu
  case 'arstiste':           // Pour le type de contenu artiste
    $related_ids = array();
    $related = field_get_items('node',$node,'field_ref_mouvement');  // On récupère le champ entity reference
    if ($related && is_array($related) && sizeof($related) > 0) {
      for ($i=0; $i<count($related); $i++ ) {
        $related_ids[] = $related[$i]['target_id'];
      }
    }
    return implode('+', $related_ids);   // On retourne les valeurs du champ entity reference

  default:
    return 0;   // par defaut on retourne 0
}

On ajoute ensuite dans le filtre contextuel le champ contenu:nid. Ce deuxième filtre va nous permettre d'exclure de l'affichage le contenu actuellement consulté. On paramètre ce filtre ainsi :

Dans la section Quand la valeur de filtre N'EST PAS disponible, choisir

  • Fournir une valeur par défaut > Identifiant (ID) du contenu à partir de l'url

Dans la section Plus, cochez Exclure

Il suffit ensuite de positionner ce bloc et de l'afficher sur le type de contenu adéquat. Vous disposez désormais d'un bloc des contenus similaires basés sur les relations fournies par le module Entity Reference.

 

Commentaires

Soumis par stéphane (non vérifié) le 05/10/2013 à 17:01 - Permalien

bonjour,
j'ai suivi le tuto pas à pas et j'ai une erreur : Trying to get property of non-object dans eval() 
ce tuto est exactemement ce dont j'ai besoin, "artiste" est bien le nom du content type, non  pas ne nom machine nous somme bien d'accord .

Soumis par fabrice le 06/10/2013 à 01:32 - Permalien

Bonjour,
Artiste est le nom machine du type de contenu. Pour être certain d'avoir bien récupéré le noeud, insérez un dpm($node) juste après avoir récupéré le noeud.

Soumis par Stéphane (non vérifié) le 06/10/2013 à 08:34 - Permalien

En réponse à par fabrice

bonjour Fabrice,
merci  ça fonctionne.
De plus ça fait longtemps que je travail avec Omega, la dernière version je ne l'utilise pas ayant perdu mes marques. La bonne surprise un tuto sur Omega.
Merci beaucoup pour ce cite très pertnant.

Soumis par fatma (non vérifié) le 24/08/2017 à 16:06 - Permalien

Bonjour, je veux creer une vue qui affiche le taux de change du jour comme suit
devise Achat Vente
euro (montant) (montant)
dollar (montant) (montant)
je voulais savoir si c'est possible de creer un type de contenu taux de change ou plutot DEVISE

Ajouter un commentaire