Post on 07-Jul-2015
description
Architecture des types de contenu : ce qui a changé en drupal 7
Présentation Soirée Communautaire DrupalFr
le 08/11/2012 La Cantine, Paris
• SS2L fondée en 2001 : http://www.ows.fr• Effectif actuel : 15 salariés •/me : Sylvain Moreau
• @slybud•http://drupal.org/user/118258•http://www.linkedin.com/in/slybud
• « Nous faisons de gros sites drupal et nous le faisons bien ! »
Faisons Connaissance (« mais rapide, hein ?»)
Objectifs de la présentation
• Pour qui : chefs de projet, architectes et site builders• Pour quoi : Avoir une vue globale sur les outils drupal
(core + modules contrib) à disposition
• Dans quel objectif : outils pour traduire des besoins fonctionnels en architecture technique drupal maintenable et scalable
• Cette présentation est : un panorama non exhaustif• Cette présentation n'est pas : axée sur les détails de
l'implémentation technique (« ça va manquer de démo »)• Combien de temps ça va durer : aucune idée
Plan de la présentation
• Rappel sur l'importance des types de contenu• Les objets drupal : D6 => D7
• Les liaisons entre les objets drupal : D6 => D7
• Le minimum UI pour les types de contenus : D6 => D7• Pistes/Tips & Tricks• Questions/Réponses
Importance des types de contenu/objets
• Architecture même du CMS : nodes/taxonomies/users (...)
• A concevoir avant de commencer à développer/intégrer
• Traduire le fonctionnel en technique (modélisation)
• Rester sur la route et bénéficier de l'écosystème
Les objets Drupal
• Field API
• Users : D6 => D7
• Taxonomies : D6 => D7
• Nodes : D6 => D7
• Comments : D6 => D7
• Entities : D7
Field API : la révolution
• Drupal 6 : Les différents objets sont fieldables (cf infra), mais aucune unification
• Drupal 7 : Field in core, tout objet est fieldable de manière unifiée
Objet Drupal : User• Drupal 6 : Fieldable
• Méthodes : profile (module core), content_profile
• Drupal 7 : Field API baby
• Pour aller plus loin : profile2 (profil fieldable par role, champs privés...)
Objet Drupal : Taxo
• Drupal 6 : Fieldable
• Méthodes : taxonomy_image, term_fields
• Drupal 7 : Field API baby
• Dans les deux cas : catégoriser/classer
Objet Drupal : Node
• Drupal 6 : Fieldable
• Méthodes : cck et tous les modules contrib
• Drupal 7 : Field API baby
Objet Drupal : Comment
• Drupal 6 : Fieldable (?!)
• Méthodes : nodecomment, comment_fields
• Drupal 7 : Field API baby
• Le plus : les comments sont fieldable par type de contenu !
Objet Drupal : Entity• Changement majeur D7
• Tous les objets précédents sont en fait devenus des entities
• Toute entity est fieldable avec Field API (baby)
• Quand choisir une entité plutot qu'un node ?
• Connaissances en développement requises
• Exemple d'entité : product
Liaisons (simples) entre les objets drupal
• D6 : Tour d'horizon
• D7 : references
• D7 : Entity Reference
• La guerre des références
Liaisons D6 : panorama• Liaison node → node : nodereference
• Liaison node → user : userreference
• Liaision node → taxo : core (pauvre) ou content_taxonomy
• Liaison taxo → taxo : core mais mono vocabulaire (patch existe)
• Eventail finalement pauvre
• Gestion des back references : nodereferrer ou cnr
Liaisons D7 : la liberté• Tout objet est fieldable => les
possibilités sont infinies
• Les Back References sont gérées dans views => plus besoin de modules de type nodereferrer
• On peut donc s'affranchir du typage et lier des termes de taxo à tout autre objet par exemple
Liaisons D7 : references• Maintainers : fgm, yched,
KarenS
• Fournit trois types de Fields : – Node reference– User Reference– Term reference
• Couvre 95% des besoins d'un projet
Liaisons D7 : entity reference• Maintainer : DamZ
• Permet de lier tout type d'entité (dont node, user, taxo, etc...)
• Permet de mélanger dans un champ plusieurs types d'entité
• Permet de lier dans un champ plusieurs bundle d'entités : des termes de taxo au sein de 2 voc différents
• Un peu plus complexe et encore en rc (5)
Alors, lequel choisir ?• Les 2 sont de qualité
• Les 2 peuvent cohabiter
• Chemin de migration plus clair depuis D6 pour references
• UI plus simple et familière pour references
• Entity Reference gère des cas impossibles avec references
• Il se dit que references ne sera plus maintenu
• Entity Reference est un peu plus complexe pour les devs
UI (minimum) pour les types de contenus
• Grouper les champs
• Utiliser les multigroupes
• Améliorer l'UI des liaisons
UI : Grouper les champs• Ne pas hésiter à abuser des
fieldsets et de leurs propriétés
• Osez les groupes dans les groupes dans les groupes
• En D7 : variez vos formats de groupes (Vertical ou Horizontal Tabs, accordéon..)
UI : Les multigroupes• Permet de répéter des
occurences de plusieurs Fields
• En D6 : CCK mais version 3
• En D7 : field_collection (entité à part)
• Exemples : générique émission, diaporama
UI : Améliorer les liaisons• Objectifs :
– Améliorer l'autocomplete
– Avoir un contrôle fin (view) sur les objets référencés
– Créer un objet sans quitter le form en cours
• En D6 : noderelationships
• En D7 : references_dialog (fonctionne avec references et entityreference)
Tips & Tricks en Vrac• Un module par content
type ?
• Gestion des taxonomies hiérarchiques
• Date : beware
• EntityFieldQuery est ton ami
• Gestion des medias : scald :)
TnT : 1 module par CT ?• Utile en D6 car :
– Hooks non disponibles autrement
– Permettait de supprimer le body
• En D7, plus vraiment d'intérêt
• Cepenant, il est sain de regrouper ses hooks ;-)
TnT : Taxo Hiérarchiques
• On est tous confrontés un jour ou l'autre
• D6 : hierarchical_select mais peu stable et plus maintenu (en 7 aussi)
• Alternative D7 : term_reference_tree
TnT : Date• Le couteau suisse du
champ date => usine à gaz
• Mais pas moyen de faire autrement
• Tout champ date est dans un fieldset !
• Mieux vaut bien choisir son format de stockage dés le début
TnT : EntityFieldQuery• Nouvelle classe
• Permet de requêter sur les entités avec une couche d'abstraction
• LA façon de faire des requêtes sur les entités
• http://drupal.org/node/1343708
• http://drupal.org/project/scald
• </autopromo>
• S'appuie sur la puissance des entités
TnT : Gestion des medias
Discutons !