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 :

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

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

  1. <?php
  2. function mon_module_views_data() {
  3. $data = array();
  4.  
  5. $data['node']['risk'] = [
  6. 'title' => t('Country latest risk'), // Titre visible dans views
  7. 'help' => t('Country latest risk description'), // Description visible dans views
  8. 'field' => [
  9. 'handler' => 'MonModuleLatestRisk', // Nom de la classe qui "rendra" notre champ calculé
  10. ],
  11. ];
  12.  
  13. return $data;
  14. }

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

  1. <?php
  2. class MonModuleLatestRisk extends views_handler_field {
  3.  
  4. function render($values) {
  5. // Logique de "calcul" de notre champ
  6. // À noter que $values contient l'ensembles des champs sélectionnés (qu'ils soient exclus de l'affichage ou non) dans notre vue
  7. if(isset($values->field_field_country_scenarios[0]['raw'])) {
  8. return $values->field_field_country_scenarios[0]['raw']['entity']->field_description['und'][0]['value'];
  9. }
  10. return null;
  11. }
  12.  
  13. function query() {
  14. // laisser vide
  15. }
  16. }

 

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...