Drupal comme vous ne l’avez jamais vu

Drupal comme vous ne l’avez jamais vu

Drupal et de manière générale PHP sont souvent utilisés dans un écosystème limité. Nous proposons de défricher avec vous de multiples modèles d’intégration permettant d’accélérer les développements tout en améliorant les performances et l'industrialisation, ainsi que d’apporter de nouveaux usages (moteurs à facettes, temps réel, graphiques, stockage documentaire).

Du prototype fonctionnel jusqu’à son industrialisation, l’intégration judicieuse avec des briques externes peut résoudre simplement des tâches complexes. Cette présentation montrera comment, par des actes concrets, on peut tirer partie de briques techniques tierces depuis PHP. La session s'appuiera sur des retours d'expérience et des exemples de cas réels.

539b55c76d7cf05657cb8b4e9a87d079?s=128

Simon Perdrisat

June 06, 2012
Tweet

Transcript

  1. 4.
  2. 11.
  3. 16.

    ?

  4. 17.
  5. 21.
  6. 22.

    m t h e r s h i p –

    séparation couche drupal
  7. 23.

    m t h e r s h i p –

    Sémantique (HTML5) VS
  8. 24.

    m t h e r s h i p –

    Sémantique (HTML5) VS
  9. 25.

    m o t h e r s h i p

    – Sémantique (HTML5) VS Indigestion de class Éléments HTML5
  10. 26.
  11. 27.

    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.
  12. 29.
  13. 31.
  14. 33.
  15. 36.

    m o t h e r s h i p

    + bootstrap + less --- love ---
  16. 38.

    Ryan Weaver, dec. 2011 « Lack of sharing means duplicated

    efforts » http://www.slideshare.net/weaverryan/a-php-christmas-miracle-3-frameworks-1-app
  17. 39.

    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.
  18. 40.

    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
  19. 41.
  20. 42.

    Composants PHP standalones Serializer – Guzzle – autoloader – twig

    – Imagine – Gaufrette – Exporter – Buzz – PHPParser – Symfony2 Components – Zend Framework 2 components - Lythium components – Mink – Behat – Goutte …
  21. 43.

    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
  22. 44.

    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)
  23. 49.
  24. 52.

    $ curl http://getcomposer.org/installer | php $ php composer.phar install Installing

    dependencies - Installing symfony/event-dispatcher (dev-master) Cloning d9ef2afd0218415a8c04ea48a2c83bb5b8f0f51c - Installing behat/mink-goutte-driver(dev-master) Cloning a9dbd268659d19eabcc8285ca4622b232f55aa91 […] symfony/http-kernel suggests installing symfony/event-dispatcher (dev- master) symfony/http-kernel suggests installing behat/mink-goutte-driver(dev-master) […] Writing lock file Generating autoload files
  25. 53.
  26. 54.

    Be lazy $ drush dl composer # once $ drush

    composer install https://drupal.org/project/composer
  27. 55.

    $ 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(); // […] }
  28. 57.

    Les “fields” dans Drupal - gestion de révisions - multilangue

    - cardinalité - valeurs par défaut - validation - … … Mais la lecture en masse est coûteuse
  29. 58.

    Stocker vos calculs Stocker des données pré-calculées Gain de performance

    ! Portabilité des données Utilisable directement sans repasser par Drupal
  30. 59.

    Alternatives de stockage NoSQL Cassandra CouchDB MongoDB Indexation des données

    solr elasticsearch xapian sphynx Cache : redis, memcache
  31. 60.
  32. 61.

    // 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
  33. 62.

    // 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
  34. 63.

    Shell mongoDB > use testDB; > db.nodes.find( {nid: 3} ,

    {title: true}); { "_id" : ObjectId("5430304500"), "title" : "Mon titre" }
  35. 66.

    Entity Metadata Search API Solr MongoDB bdd, sphynx, elasticsearch xapian,

    ... Views Node Utilisateur Fields Fichier Données indexers Drupal + Search API
  36. 67.

    Entity Metadata Search API Solr MongoDB bdd, sphynx, elasticsearch xapian,

    ... Views Node Utilisateur Fields Fichier Données indexers Node.js Python
  37. 68.

    Search API c'est encore ! Multiples indexes Altération des données

    Jointures à la création Interface graphique Extensible
  38. 73.
  39. 76.

    // Client (index.html) <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost');

    socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> // Server (app.js) io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); });
  40. 80.

    n'évoluera plus lenteur Test fonctionnel utilise un client HTTP "propriétaire"

    (open source mais utilisé nul part ailleurs) Drupal utilise SimpleTest (patché)
  41. 82.

    Briques supérieures - Mink : navigateur sous forme de driver

    selenium, sahi, goutte - Behat : BDD (Behavior driven development) - Atoum
  42. 83.
  43. 85.

    Collecte de données / graphes Le module statistics est une

    catastrophe Alternatives : - graphite / statsd (by Etsy/Flickr) - new relic (SaaS) - cacti
  44. 86.

    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.
  45. 88.

    function etsy_statsd_shutdown_real() { // time page $time = timer_read('page'); StatsD::timing("drupal.page.totaltime.ogos",

    $time); // query count $queries = Database::getLog('etsy_statsd', 'default'); StatsD::updateStats("drupal.mysql.querycount. ogos", count($queries)); }
  46. 89.
  47. 91.
  48. 93.

    Gestionnaire de queue : zeromq, rabbitmq Outil de mailing :

    intégration avec un mailer (mailchimp) Interface offline : Services + backbone.js ... Pistes à explorer
  49. 94.

    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
  50. 95.

    Drupal 8 est prêt dans 2 ans (on est pessimiste

    réaliste) Pourquoi attendre ?
  51. 98.

    • 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
  52. 99.

    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
  53. 100.

    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