Drupal 7 - Créer un champ calculé pour Views

Posté le Jeudi 14 mars 2019 - 19:01

(et oui des fois on doit retourner sous drupal 7)

Voici comment créer un champ calculé pour un type d'entité (ici Node) qui sera accessible comme n'importe quel champ dans views.

Dans mon_module.module :

function mon_module_views_api($module = NULL, $api = NULL) {
  return ['api' => '3.0'];
}

Dans mon_module.views.inc : définition des champs

<?php
function mon_module_views_data() {
  $data = array();

  $data['node']['risk'] = [
    'title' => t('Country latest risk'), // Titre visible dans views
    'help' => t('Country latest risk description'), // Description visible dans views
    'field' => [
      'handler' => 'MonModuleLatestRisk', // Nom de la classe qui "rendra" notre champ calculé
    ],
  ];

  return $data;
}

Dans mon_module.info : ne pas oublier de lister notre fichier qui contiendra notre classe

files[] = MonModuleLatestRisk.php

Dans MonModuleLatestRisk.php : La logique de calcul du champ

<?php
class MonModuleLatestRisk extends views_handler_field {

  function render($values) {
    // Logique de "calcul" de notre champ
    // À noter que $values contient l'ensembles des champs sélectionnés (qu'ils soient exclus de l'affichage ou non) dans notre vue
    if(isset($values->field_field_country_scenarios[0]['raw'])) {
      return $values->field_field_country_scenarios[0]['raw']['entity']->field_description['und'][0]['value'];
    }
    return null;
  }

  function query() {
    // laisser vide
  }
}

 

Aller plus loin ?

Ajouter un commentaire