PHP !!!
Fiable, répandu, mature*
Connu au seins des administrations
* En version 8.2
le choix Drupal
Slide 13
Slide 13 text
— There is a module for that —
Slide 14
Slide 14 text
Une API complète pour des modules basé sur
PHP/MySQL.
Écrire son module
Slide 15
Slide 15 text
... il faut coder puis maintenir
http://www.jedessine.com/c_6565/coloriage/coloriage-
fetes/coloriage-halloween/coloriage-momie-
halloween/coloriage-d-une-momie
Slide 16
Slide 16 text
?
Slide 17
Slide 17 text
A nice duct tape fix
Making a
square fit into
a round hole.
Credit: NASA
Slide 18
Slide 18 text
Ne pas utiliser (que) Drupal
Slide 19
Slide 19 text
Améliorer le
développement de thème
Chapitre 1/6
Slide 20
Slide 20 text
Rendu d'un champs (field)*
* nous vous épargnons le rendu de la page complète.
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
m t h e r s h i p – séparation couche drupal
Slide 23
Slide 23 text
m t h e r s h i p – Sémantique (HTML5)
VS
Slide 24
Slide 24 text
m t h e r s h i p – Sémantique (HTML5)
VS
Slide 25
Slide 25 text
m o t h e r s h i p – Sémantique (HTML5)
VS
Indigestion de class
Éléments HTML5
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
m o t h e r s h i p
Libère votre thème de l'HTML/CSS spécifique à
Drupal pour une normalisation du code.
Slide 28
Slide 28 text
Utiliser des composants standards
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
Notre design !
Slide 31
Slide 31 text
Hum...
Slide 32
Slide 32 text
twitter.github.com
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
Less.css – The One dynamic stylesheet language
Slide 35
Slide 35 text
réglages de bootstr
Désactiver les
composants non
utilisé
mixins
import composant
Slide 36
Slide 36 text
m o t h e r s h i p + bootstrap + less
--- love ---
Slide 37
Slide 37 text
Utiliser des composants
PHP externes PSR-0 FTW
Chapitre 2/6
Slide 38
Slide 38 text
Ryan Weaver, dec. 2011
« Lack of sharing means
duplicated efforts »
http://www.slideshare.net/weaverryan/a-php-christmas-miracle-3-frameworks-1-app
Slide 39
Slide 39 text
PSR – PHP Standard Reference
PSR-0 : accord sur une “norme” d'autoloading
Symfony2, Zend Framework 2, Lithium, PEAR, Drupal, eZ,
CakePHP, Doctrine, Propel, Composer, Agavi, Joomla,
phpBB, … like this.
Slide 40
Slide 40 text
PSR-0 : deux possibilités
namespaces
class : Symfony\Component\HttpFoundation\Request
path : vendor/src/Symfony/Component/HttpFoundation/Request.
php
underscores
class : Twig_Extension_Core
path : vendor/twig/lib/Twig/Extension/Core.php
Drupal 8 – PSR-0 ready
Empruntés à Symfony2
HttpKernel, HttpFoundation (Request et Response objects),
EventDispatcher (remplace avangeteusement les hook),
ClassLoader, Yaml, DependencyInjection
Et bientôt : Routing, Session,…
http://www.garfieldtech.com/blog/wscci-kernel-merge
Slide 44
Slide 44 text
module Drupal – Composants externes
$ cat README.txt
INSTALLATION
============
1) Install behat on your machine following these instructions:
http://docs.behat.org/quick_intro.html#installation
2) Copy file "behat.yml" and directory "features" to
site root directory.
3) Customize the path to "behat/bootstrap" in behat.yml
if the behat module isn't located at "sites/all/modules/behat"
4) Set $base_url in settings.php if your site is not
accessible at http://localhost/
(otherwise drupalPost() won't work)
Slide 45
Slide 45 text
autoloading ??!
dépendance ?
version ??
mise à jour ?
Slide 46
Slide 46 text
Installation (comme un pro)
PEAR – PHP Extension and Application
Repository ?
Slide 47
Slide 47 text
So 2005!
w.st-guilhem-le-desert.fr/legendes_diable_pauvre_paysan-p129.htm
Slide 48
Slide 48 text
Git Submodule ?
Phar ?
Slide 49
Slide 49 text
So 2011!
Slide 50
Slide 50 text
Composer !
Gestionnaire de dépendance
Installeur / autoloader
http://getcomposer.org
http://packagist.org
Be lazy
$ drush dl composer # once
$ drush composer install
https://drupal.org/project/composer
Slide 55
Slide 55 text
$ cat minktest.module
/**
* Implements hook_init()
*/
function minktest_init() {
// the autoloader file is generated by composer
require(__DIR__ . '/vendor/autoload.php');
}
/**
* Non useful function
*/
function minktest_toto() {
$mink = new Behat\Mink\Mink();
$driver = new \Behat\Mink\Driver\GoutteDriver();
// […]
}
Slide 56
Slide 56 text
Dénormalisation
de données
Chapitre 3/6
Slide 57
Slide 57 text
Les “fields” dans Drupal
- gestion de révisions
- multilangue
- cardinalité
- valeurs par défaut
- validation
- …
… Mais la lecture en masse est coûteuse
Slide 58
Slide 58 text
Stocker vos calculs
Stocker des données pré-calculées
Gain de performance !
Portabilité des données
Utilisable directement sans repasser par
Drupal
Slide 59
Slide 59 text
Alternatives de stockage
NoSQL
Cassandra
CouchDB
MongoDB
Indexation des données
solr
elasticsearch
xapian
sphynx
Cache : redis, memcache
Slide 60
Slide 60 text
No content
Slide 61
Slide 61 text
// Connect
$mongo = new Mongo();
// Créer / Sélectionner la DB
$db = $mongo->testDB;
// Créer / Sélectionner la collection (=table)
$collection = $db->nodes;
// Charger un node
$node = (array)node_load($nid);
// Stocker dans MongoDB
$collection->save($node);
PHP
Insertion
Slide 62
Slide 62 text
// Connection
$mongo = new Mongo();
// Filtre sur le nid
$filter = array(
'nid' => 3,
);
// Run! mongo->DB->collection->
$res = $mongo->testDB>nodes->find($filter);
// Print
print $res[0]['title'];
PHP
Requête
n'évoluera plus
lenteur
Test fonctionnel utilise un client HTTP
"propriétaire" (open source mais utilisé nul part ailleurs)
Drupal utilise SimpleTest (patché)
Slide 81
Slide 81 text
SimpleTest est uniquement maintenu
PHPUnit
Atoum
Slide 82
Slide 82 text
Briques supérieures
- Mink : navigateur sous forme de driver
selenium, sahi, goutte
- Behat : BDD (Behavior driven development)
- Atoum
Slide 83
Slide 83 text
No content
Slide 84
Slide 84 text
Monitoring applicatif /
statistiques
Chapitre 6/100*
* courage, plus que 94 chapitres
Slide 85
Slide 85 text
Collecte de données / graphes
Le module statistics est une catastrophe
Alternatives :
- graphite / statsd (by Etsy/Flickr)
- new relic (SaaS)
- cacti
Slide 86
Slide 86 text
Métriques ?
- état serveur (mémoire, cpu, etc.)
- nombre d'utilisateurs (connectés / déconnectés)
- temps de génération de page
- nombre de requêtes sql
- ratio page en cache / page non en cache
- nombre de scripts css / js généré
Il devient très facile d'en ajouter, donc on se
retrouve à en avoir beaucoup et c'est BIEN.
Slide 87
Slide 87 text
Code PHP
applicatif
Serveur StatsD
agrège et envoi
Graphite stocke
Graphite
visualise les
métriques
UDP
Gestionnaire de queue : zeromq, rabbitmq
Outil de mailing : intégration avec un mailer
(mailchimp)
Interface offline : Services + backbone.js
...
Pistes à explorer
Slide 94
Slide 94 text
Cas concret – projet Drupal
qa.drupal.org travisci
drush composant sf2 Console
drush make composer
stack git github
registry PSR-0
Concentrer les efforts sur la valeur
ajoutée du projet
construire le meilleur CMS au monde
Slide 95
Slide 95 text
Drupal 8 est prêt dans
2 ans (on est pessimiste réaliste)
Pourquoi attendre ?
Slide 96
Slide 96 text
Réutiliser le travail des autres, contribuer,
partager – travailler moins mieux
Slide 97
Slide 97 text
https://joind.in/talk/view/6455
Questions ?
Slide 98
Slide 98 text
● Ryan Weaver (KNP Labs USA)
“A PHP Christmas Miracle - 3 Frameworks, 1 app”
http://www.slideshare.net/weaverryan/a-php-christmas-
miracle-3-frameworks-1-app
● Matthieu Guillermin et Nicolas Chambrier
“Mettez du temps réel dans votre Drupal avec
NodeJS”
http://lyon2012.drupalcamp.fr/fr/mettez-du-temps-r-el-
dans-votre-drupal-avec-node-js
● Larry Garfield – “The Kernel has landed”
http://www.garfieldtech.com/blog/wscci-kernel-merge
Sources
Slide 99
Slide 99 text
Sources / Pour aller plus loin
● Kenny Dits – “Performances php chez M6Web”
http://www.slideshare.net/kennydee/performances-php-
chez-m6web
● Morten dk
“HTML 4S – while we are waiting for the revolution”
https://dl.dropbox.com/u/51287/2012-drupalcon-denver-
html4s.pdf
● Timothée Peignier – “Un site web mobile en Django”
https://speakerdeck.com/u/tim/p/un-site-web-mobile-en-
django
Slide 100
Slide 100 text
Sources / Pour aller plus loin
● Shashikant Jagtap – « ATDD with Behat and Selenium »
http://www.slideshare.net/Shashikant86/atdd-with-behat-
and-selenium-ldnse6
● Jean-Marc Fontaine
« La gestion des dépendances dans un projet PHP »
http://www.slideshare.net/JMF/gestion-des-dpendances-
dans-un-projet-php-forum-php-2012