Présentation Soirée Communautaire DrupalFr le 08/11/2012 La Cantine, Paris
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
Architecture des types de contenu : ce qui a changé en Drupal 7
1. 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
2. Faisons Connaissance
(« mais rapide, hein ?»)
• 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 ! »
3. 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
4. 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
5. 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
7. 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
8. 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...)
9. Objet Drupal : Taxo
• Drupal 6 : Fieldable
• Méthodes : taxonomy_image,
term_fields
• Drupal 7 : Field API baby
• Dans les deux cas :
catégoriser/classer
10. Objet Drupal : Node
• Drupal 6 : Fieldable
• Méthodes : cck et tous les
modules contrib
• Drupal 7 : Field API baby
11. 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 !
12. 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
13. Liaisons (simples)
entre les objets drupal
• D6 : Tour d'horizon
• D7 : references
• D7 : Entity Reference
• La guerre des
références
14. 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
15. 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
16. 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
17. 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)
18. 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
19. UI (minimum) pour les
types de contenus
• Grouper les champs
• Utiliser les
multigroupes
• Améliorer l'UI des
liaisons
20. 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..)
21. 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
22. 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)
23. Tips & Tricks en Vrac
• Un module par content
type ?
• Gestion des taxonomies
hiérarchiques
• Date : beware
• EntityFieldQuery est ton
ami
• Gestion des medias :
scald :)
24. 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 ;-)
25. 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
26. 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
27. 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/13437
08
28. TnT : Gestion des medias
• http://drupal.org/project/scald
• </autopromo>
• S'appuie sur la puissance des
entités