Category Archives: Article

Drupal 8 Outils du développeur

Comme en témoigne mon petit module hello world, l’API et l’architecture de Drupal 8 sont autrement plus complexe que celle de Drupal7.

Tout programmeur est amené a se poser la question : si je me trompe, comment vais-je debugger mon code ?

Drupal 7 se base sur certains principes fondamentaux simples et universel : les hooks (qui sont des sortes de callbacks améliorées, reproduisant en PHP une forme d’AOP), les tableaux associatifs (et rarement des objets). La plupart des cas sont réglés par un bon vieux “dsm” (du module “devel” qui reste toujours présent dans Drupal 8) qui permet d’afficher le contenu de n’importe quelle variable, façon “krumo” :

Si cette méthode reste valable en Drupal 8, elle peut se révéler trop rudimentaire.…

Read more

Drupal duel : Drupal 7&8 side by side

Voici, mis cote à cote 2 modules hello-world en Drupal 7 et Drupal 8 (beta9) qui mettent en œuvre les concepts principaux qu’on retrouve dans la plupart des modules :

  • menus et chemins d’accès
  • création de block
  • création d’un formulaire
  • theming
  • accès aux “variables”

Comme vous pouvez le constater, les changements sont nombreux, mais au final :

  • c’est la même chose écrit différement (pour simplifier : on passe du fonctionnel à de l’objet)
  • si on omet les “namespaces”, ce n’est pas foncièrement plus verbeux, mais le code est éclaté en 7 fichiers en Drupal8 au lieu de 3
Drupal7 Drupal8

hello.info

hello.info.yml

name = Hello world
description = Minimalist Hello World in Drupal 7
package = Example modules
core = 7.x
files[] = hello.module
name: Hello World
type: module
description: Minimalist Hello World in Drupal 8
package: Example modules
core: 8.x

hello.module

function hello_menu() {

hello.links.menu.yml

$items['helloworld'] = array(
  'title' => 'Hello world',
hello.main:
  title: Hello world
  route_name: hello.world
$items['admin/config/content/hello'] = array(
  'title' => 'Hello config',
hello.form:
  title: Hello config
  route_name: hello.form

hello.routing.yml

$items['helloworld'] = array(
  'page callback' => '_page_hello_world',
  'access callback' => TRUE,
hello.world:
  path: 'helloworld'
  defaults:
    _controller: '\Drupal\hello\Controller\HelloRouteController::index'
  requirements:
    _access: 'TRUE'
$items['admin/config/content/hello'] = array(
  'page callback' => 'drupal_get_form',
  'page arguments' => array('hello_config_form'),
  'access arguments' => array('access hello content')
hello.form:
  path: 'admin/config/content/hello'
  defaults:
    _form: '\Drupal\hello\Form\HelloForm'
  requirements:
    _permission: 'access hello content'
function hello_theme() {
  return array(
    'hello_text' => array(
    'template' => 'hello-text',
    'variables' => array('text' => NULL)),
  );
}
function hello_theme() {
  return array(
    'hello_text' => array(
    'template' => 'hello-text',
    'variables' => array('text' => NULL)),
  );
}

src/Controller/HelloRouteController.php

function _page_hello_world() {
  return array( '#markup' => '<p>Hello world page text</p>' );
}
namespace Drupal\hello\Controller;
use Drupal\Core\Controller\ControllerBase;
class HelloRouteController extends ControllerBase {
  public function index() {
    return array('#markup' => '<p>Hello world page text</p>');
  }
}

src/Plugin/Block/HelloBlock.php

function hello_block_info() {
  $blocks['hello'] = array(
    'info' => t('Hello world block title'),
  );
  return $blocks;
}
namespace Drupal\hello\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\block\Annotation\Block;
use Drupal\Core\Annotation\Translation;
use Drupal\Core\Session\AccountInterface;
/**
* Provides a 'Hello' block.
Read more

Wolfram Language : affaire à suivre

Après Mathematica, Wolfram Alpha (le moteur de recherche qui comprends les questions), après “A New Kind of Science” et son approche empirique et systématique des automates cellulaires, Wolfram Langage impressionne !!!

  • Syntaxe simple, à la Rebol/Lisp/4th/Logo.
  • Connection a Wolfram Alpha, et donc à un Big Data universel
  • Cloud, déployable, parallélisable (sur une ferme de RPi par exemple)

Cela semble être le GRAAL des programmeurs, toutes les meilleurs idées regroupées en un seul langage. Seul défaut, il n’est pas open-source.

En quelques lignes on peut calculer le plus court trajet pour parcourir les capitales Européennes, demander l’heure de couché du soleil locale, générer des graphes interactifs, etc…

Read more

Pourquoi et comment se former à Drupal ?

Pourquoi ?

J’ai la chance d’avoir la double casquette de chef de projet et formateur Drupal.

J’ai pu constater “de visu” les dégâts que peuvent faire de mauvaises pratiques sur un développement Drupal.

Par exemple, j’ai du intervenir en tant que consultant sur un projet ou l’on me demandait comment rajouter une fonctionnalité au site. Tout naturellement, j’ai conseillé d’installer un module (la manière de choisir ou pas un module est un autre sujet) qui répondait suffisamment bien à la demande.…

Read more

Compte rendu : Drink & Drupal Toulouse décembre 2013

Hier soir, j’ai fait une présentation de Drupal Commons 3.5 lors du Drink & Drupal à la cantine à Toulouse.

Je mettrais les slides en ligne bientôt.

DrinknDrupal1

Ambiance très sympa.

Nous en avons profité pour faire un petit test rapide de “talky.io“, une plateforme dont le code est en partie Open Source de webconférence basée sur WebRTC.

C’était assez fun de passer en webcam alors qu’on était tous dans la même pièce. Ceci dit, tout le monde a été d’accord sur l’intérêt d’intégrer cette technologie (ou une autre telle que Google Hangout – avec l’avantage que la session se retrouve archivée pour le public) lors des prochaines présentations, de sorte que d’autres puissent être de la partie, même s’ils sont loin ou indisponibles.…

Read more

Méthodologie d’audit d’un site Drupal

Éléments à fournir pour l’audit du code :

  • fichiers sources du site

  • base de données du site

  • documentation fonctionnelle et technique

Démarche suivie :

Afin d’obtenir une vue d’ensemble du site, les étapes suivantes ont été observées :

  1. Recherche de la présence d’erreurs critiques remontées par les différents logs.

  2. Étude des modules coeur et contributeurs activés, recherche de hacks dans leurs fichiers.

  3. Examen du code des modules développés spécifiquement

  4. Examen du theme du site

Détails des contrôles effectués lors de ces étapes :

  • contrôle du rapport général de Drupal

  • contrôle du watchdog de Drupal

  • différentiel entre les fichiers du coeur de Drupal et le coeur du site à versions égales (annexe diff-modules-core)

  • différentiel entre les fichiers des modules contributeurs de Drupal et ceux du site à versions égales (annexe diff-modules-contrib)

  • utilisation du module drupal « hacked » pour recouper les informations avec les résultats des différentiels (voir annexe rapport-hacked)

  • examen des hacks détectés par les différentiels et de leur impact sur le site

  • vérification des modules activés et non-activés (voir stats)

  • vérification manuelle du code custom, combiné avec une vérification avec le module « coder »

  • examen du theme du site (voir annexe templates-pages)

En cas de mauvaises pratiques http://drupal.org/best-practices/do-not-hack-core il faut en évaluer les implications.…

Read more

Evolution de la complexité cyclomatique de Drupal 4 à 8

Voici les données brutes, l’analyse viendra plus tard.

Je les aies obtenues avec la commande suivante (en paramètre je passe le n° de version de Drupal :

phploc "drupal$1" --log-csv="~/drupal-analisys/d$1loc3.csv" --names="*.php,*.inc,*.module,*.yml"
Drupal 4 Drupal 5 Drupal 6 Drupal 7 Drupal 8
Directories 7 37 40 88 1 474
Files 73 83 179 382 6 025
Lines of Code (LOC) 39 397 46 223 71 710 207 763 812 817
Cyclomatic Complexity / Lines of Code 0,45 0,45 0,46 0,42 0,22
Comment Lines of Code (CLOC) 9 261 11 631 22 255 70 845 278 700
Non-Comment Lines of Code (NCLOC) 30 136 34 592 49 455 136 918 534 117
Logical Lines of Code (LLOC) 10 808 12 112 17 086 33 566 174 481
Namespaces 0 0 0 3 1 110
Interfaces 0 0 0 16 498
Traits 0 0 0 0 10
Classes 0 0 1 110 5 223
Abstract Classes 0 0 0 10 340
Concrete Classes 0 0 1 100 4 883
Average Class Length (LLOC) 0,00 0,00 57,00 40,04 26,33
Methods 0 0 4 1 042 28 246
Non-Static Methods 0 0 4 993 25 711
Static Methods 0 0 0 49 2 535
Public Methods 0 0 4 797 22 438
Non-Public Methods 0 0 0 245 5 808
Average Method Length (LLOC) 0,00 0,00 14,25 4,23 4,87
Cyclomatic Complexity / Number of Methods 0,00 0,00 5,25 2,64 2,06
Functions 1 337 1 468 2 024 4 211 3 957
Named Functions 1 337 1 468 2 024 4 211 3 568
Anonymous Functions 0 0 0 0 389
Constants 91 110 165 267 837
Global Constants 91 110 165 258 71
Class Constants 0 0 0 9 766
Attribute Accesses 2 617 2 905 3 849 7 361 50 386
Non-Static Attribute Accesses 2 617 2 905 3 849 7 294 49 357
Static Attribute Accesses 0 0 0 67 1 029
Method Calls 1 0 1 6 795 103 543
Non-Static Method Calls 1 0 1 6 636 95 186
Static Method Calls 0 0 0 159 8 357
Global Accesses 1 067 1 183 1 483 2 846 1 481
Global Variable Accesses 263 222 252 355 447
Super-Global Variable Accesses 230 229 277 426 294
Global Constant Accesses 574 732 954 2 065 740
Test Classes 0 0 0 0 0
Test Methods 0 0 0 0 0
Read more

Quelle version de Drupal est supportée + gestion de la compatibilité ascendante ?

Pour un DSI, un site se gère sur la longueur. Il doit minimiser le fardeau de la maintenance et des évolutions tout en assurant sa pérennité maximale.

Deux problématiques principaux se posent à lui par rapport au cycle de vie du produit qu’il à choisi : les corrections de bug et les mises à jour de sécurité d’une part et la gestion de la compatibilité ascendante d’autre part.

Pour Drupal la politique est la suivante. Les  nouvelles releases sont numérotés par 2 chiffres : une version majeure, et une version mineure.…

Read more

Drupal, histoire et part de marchés

Quelques dates clés :

  • 1999 : Dries Buytaert commence à travailler sur ce qui deviendra Drupal.
  • 2001 : C’est en janvier 2001 que le site Drupal.org est mis en ligne et que le code de Drupal est mis à disposition.
  • 2005 : avec la version 4.5, Drupal commence à faire effet boule de neige et à attirer de plus en plus de monde dans sa communauté (multiplication des conférences et sprints de code).
  • 2008 : Drupal commence à s’imposer en entreprise avec sa version 6 grâce la réputation de son code “developer friendly” et grâce à ses awards en tant que meilleur CMS.
Read more