SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Meetup Drupal Paris mars 2015
Drupal 8 Theming
Meetup Drupal Paris mars 2015
Romain JARRAUD	

Formateur/consultant	

Trained People	

@romainjarraud
Meetup Drupal Paris mars 2015
Qu’est-ce que le
theming ?
Meetup Drupal Paris mars 2015
Theming ?
Fonctionnel Présentation
Drupal et modules Thème
Meetup Drupal Paris mars 2015
Theming ?
• THEMING = Sortie HTML 	

• Il existent d’autres façons « d’afficher des
données », par exemple sous forme de flux
RSS, JSON…
Meetup Drupal Paris mars 2015
Theming ?
• Les modules manipulent les données.	

• Ils proposent également un rendu par défaut.	

• Par exemple, le module block définit le
template block.twig.html de base permettant
d’afficher un bloc.	

• Le thème SURCHARGE ce que font les
modules.
Meetup Drupal Paris mars 2015
Theming ?
• Produire le code html de chaque page.	

• Habiller les balises de styles : tailles,
couleurs, images...	

• Ajouter des effets à l’aide de javascript.
Meetup Drupal Paris mars 2015
Principe de base
Meetup Drupal Paris mars 2015
Thème
Navigateur CSS
Templates
Drupal et
modules Contenu
HTML
Page Web
Requête
Meetup Drupal Paris mars 2015
Thème
Meetup Drupal Paris mars 2015
/themes/ive/ive.info.yml
Meetup Drupal Paris mars 2015
Fini !
Meetup Drupal Paris mars 2015
Templates
Meetup Drupal Paris mars 2015
Template ?
• Eléments à afficher : données.	

• Render Array : array(‘#theme’ => ‘HOOK’).	

• Passe les données au template désigné.	

• Chaque élément (bloc, noeud, vue…) est
affiché grâce à un template dédié.
Meetup Drupal Paris mars 2015
Moteur de thème TWIG
• Drupal 8 utilise le moteur de thème TWIG.	

• TWIG a été créé par Fabien Potencier.	

• Il offre un système de templates
(template.html.twig) pour générer le code
HTML.	

• La partie dynamique est obtenue grâce à du
code TWIG inséré dans le code HTML.
Meetup Drupal Paris mars 2015
Templates
• Tous les templates ont l’extension .html.twig.	

• Chaque fichier de template reçoit, non pas le tableau
$variables, mais autant de variables que le tableau
$variables contient de clés.	

• Ex. : si $variables = array(‘data1’ => $data_1,‘data2’ =>
$data_2) est passé au template, ce dernier reçoit les
variables TWIG data1 et data2.	

• Un template contient le code HTML avec du code
TWIG qui affiche principalement le contenu des
variables.
Meetup Drupal Paris mars 2015
TWIG (rapidement)
• Afficher le contenu d’une variable : {{ var }}.	

• TWIG sait afficher n’importe quel type de variable
(chaine, tableau, objet) : {{ node.title }}.	

• Fonction : {% if var %} {% endif %}.	

• Commentaires : {# commentaire #}	

• Traduction : 	

• {% trans %} {{ chaine }} {% endtrans %}.	

• Disponible ensuite via l’interface de Drupal !
Meetup Drupal Paris mars 2015
TWIG (rapidement)
• Filtres :	

• {{ date|format_date(‘medium’) }} 	

• chaine à traduire :	

• Echappement : {{ texte }} (équivalent à @).	

• Interprétation : {{ texte|passthrough }} (équivalent à !).	

• Placeholder : {{ texte|placeholder }} (équivalent à %).	

• {{ content|without(‘links’) }}.	

• {{ chaine|lower }} (upper également).	

• {{ class_name|clean_class }}.	

• {{ id_name|clean_id }}.
Meetup Drupal Paris mars 2015
/themes/ive/templates/block.html.twig
Meetup Drupal Paris mars 2015
Suggestions de template
• Chaque module définit le template de base pour rendre un
type d’élément en particulier.	

• Mais chaque élément individuellement peut être rendu avec un
template dédié.	

• Le module propose la plupart du temps des templates
alternatifs utilisés dans un contexte plus précis : suggestions de
template.	

• Par exemple pour afficher un nœud, le template utilisé par
défaut est node.html.twig. Si ce nœud est de type article,
Drupal peut potentiellement utiliser le template node--
article.html.twig (s’il existe!).
Meetup Drupal Paris mars 2015
Suggestions de template
• Déterminer le template à utiliser :	

• hook_theme_suggestions_HOOK() définit par
le module déclarant le HOOK.	

• hook_theme_suggestions_alter() : modules et
thèmes voulant modifier les suggestions pour
tous les hooks.	

• hook_theme_suggestions_HOOK_alter() :
modules et thèmes voulant modifier les
suggestions de HOOK.
Meetup Drupal Paris mars 2015
Fonctions de
preprocess
Meetup Drupal Paris mars 2015
Fonction de preprocess
Template
Preprocess par
défaut
$variables
Preprocess de
theme
$variables
Preprocess de
module
$variables
Meetup Drupal Paris mars 2015
• Fonction de preprocess de base :
template_preprocess().	

• Fonction de preprocess dédiée :
template_preprocess_HOOK().	

• $variables['attributes']['class'] : contient un
nom de classe correspondant au nom du
hook de thème invoqué.
Fonction de preprocess
Meetup Drupal Paris mars 2015
Librairies
Meetup Drupal Paris mars 2015
/themes/ive/ive.libraries.yml
• Les fichiers de CSS et JS doivent être
déclarés sous forme de librairie.
Meetup Drupal Paris mars 2015
/themes/ive/ive.info.yml
• Le chargement d’une librairie peut se faire
via le fichier .info.yml.
Meetup Drupal Paris mars 2015
/themes/ive/ive.theme
• Le chargement d’une librairie peut
également se faire via la fonction
THEME_page_attachments_alter() :
Meetup Drupal Paris mars 2015
/themes/ive/ive.theme
• Le chargement d’une librairie peut
également se faire via une fonction de
preprocess :
Meetup Drupal Paris mars 2015
/themes/ive/ive.theme
• Pour bloquer le chargement d’un fichier de
CSS, on utilise la fonction hook_css_alter() :
Meetup Drupal Paris mars 2015
Surcharge
Meetup Drupal Paris mars 2015
Surcharge
• L'un des rôles du thème est de surcharger le
formatage par défaut afin de l'adapter aux
besoins.	

• Drupal propose un mécanisme de surcharge
pour les templates.	

• Dès qu’un hook de thème est invoqué, le thème
est sollicité en premier. Dans le cas où aucune
surcharge n’est proposée, c’est l’élément par
défaut qui est appelé.
Meetup Drupal Paris mars 2015
Surcharge
• Copier le fichier original dans le dossier
de son thème. 	

• Vider le registre du thème.	

• Vous avez la main !
Meetup Drupal Paris mars 2015
Breakpoints
Meetup Drupal Paris mars 2015
/themes/ive/ive.breakpoints.yml
Meetup Drupal Paris mars 2015
Breakpoints
• Les breakpoints sont exposés côté
serveur, permettant ainsi de conditionner
l’affichage.	

• En particulier on gère le chargement des
images en fonction de ces breakpoints (via
un groupe).
Meetup Drupal Paris mars 2015
Configuration
Backoffice
Meetup Drupal Paris mars 2015
Configuration Backoffice
• Comment paramétrer le thème depuis le
backoffice de Drupal. 	

• Il existe une page avec un formulaire par
défaut pour chaque thème. 	

• On peut le modifier avec la fonction
THEME_form_system_theme_settings_alter()
en utilisant la Form API.
Meetup Drupal Paris mars 2015
/themes/ive/ive.theme
Meetup Drupal Paris mars 2015
/themes/ive/config/install/ive.settings.yml
Meetup Drupal Paris mars 2015
Autres changements
par rapport à Drupal 7
Meetup Drupal Paris mars 2015
• Tout est bloc : fil d’Ariane, zone de message,
logo…	

• Le logo est au format SVG.	

• Les classes CSS sont ajoutées dans le template
par défaut, ou bien via les fonctions de
preprocess (cas de logique plus complexe).	

• Thème de base Classy.	

• Disparition de la fonction theme() au profit des
Render Array.	

• TWIG a un mode Debug affichant les suggestions
de template sous forme de commentaires HTML.
Meetup Drupal Paris mars 2015
Conclusion
• Adaptation facile par rapport à Drupal 7.	

• Plus simple avec Drupal 8 !	

• TWIG, c’est que du bonheur !
Meetup Drupal Paris mars 2015
Merci à vous !
Meetup Drupal Paris mars 2015
Questions ?

Mais conteúdo relacionado

Mais procurados

Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysALTER WAY
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
 
Architecture des types de contenu : ce qui a changé en Drupal 7
Architecture des types de contenu : ce qui a changé en Drupal 7Architecture des types de contenu : ce qui a changé en Drupal 7
Architecture des types de contenu : ce qui a changé en Drupal 7slybud
 
Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Anne-Sophie Picot
 
Présentation de Drupal
Présentation de DrupalPrésentation de Drupal
Présentation de DrupalAdyax
 
HTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsHTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsRémy Savard
 
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détailsPrésentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détailsSymetris
 
Netvibes atelier 14_octobre_2011_kg
Netvibes atelier 14_octobre_2011_kgNetvibes atelier 14_octobre_2011_kg
Netvibes atelier 14_octobre_2011_kgkumarutil
 
Drupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMSDrupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMSAdyax
 
Optimisez vos imports de données avec Migrate
Optimisez vos imports de données avec MigrateOptimisez vos imports de données avec Migrate
Optimisez vos imports de données avec MigrateMatthieu Guillermin
 
A la découverte de Drupal
A la découverte de DrupalA la découverte de Drupal
A la découverte de DrupalClaire Roubey
 
Introduction à Drupal 8
Introduction à Drupal 8Introduction à Drupal 8
Introduction à Drupal 8Core-Techs
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Smile I.T is open
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascriptcodedarmor
 

Mais procurados (20)

Drupal presentation
Drupal presentationDrupal presentation
Drupal presentation
 
Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training Days
 
Pourquoi Drupal ?
Pourquoi Drupal ?Pourquoi Drupal ?
Pourquoi Drupal ?
 
Drupagora linagora-20111110
Drupagora linagora-20111110Drupagora linagora-20111110
Drupagora linagora-20111110
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
Architecture des types de contenu : ce qui a changé en Drupal 7
Architecture des types de contenu : ce qui a changé en Drupal 7Architecture des types de contenu : ce qui a changé en Drupal 7
Architecture des types de contenu : ce qui a changé en Drupal 7
 
Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8
 
Présentation de Drupal
Présentation de DrupalPrésentation de Drupal
Présentation de Drupal
 
HTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsHTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux éléments
 
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détailsPrésentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
 
Drupal 8
Drupal 8Drupal 8
Drupal 8
 
Netvibes atelier 14_octobre_2011_kg
Netvibes atelier 14_octobre_2011_kgNetvibes atelier 14_octobre_2011_kg
Netvibes atelier 14_octobre_2011_kg
 
Drupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMSDrupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMS
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Optimisez vos imports de données avec Migrate
Optimisez vos imports de données avec MigrateOptimisez vos imports de données avec Migrate
Optimisez vos imports de données avec Migrate
 
A la découverte de Drupal
A la découverte de DrupalA la découverte de Drupal
A la découverte de Drupal
 
CSS3 - nouveautes
CSS3 - nouveautesCSS3 - nouveautes
CSS3 - nouveautes
 
Introduction à Drupal 8
Introduction à Drupal 8Introduction à Drupal 8
Introduction à Drupal 8
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
 

Destaque

Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Drupal Asso France
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8Aurelien Navarre
 
Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Aurelien Navarre
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalLINAGORA
 
Drupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteDrupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteVanessa David
 
eZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleeZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleKaliop-slide
 
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Artusamak
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisésOSInet
 
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Vanessa David
 

Destaque (9)

Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
 
Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Configuration Management avec Drupal 8
Configuration Management avec Drupal 8
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec Drupal
 
Drupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteDrupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnante
 
eZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleeZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battle
 
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisés
 
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
 

Semelhante a Theming drupal8 - Meetup Paris - 26-mars-2015

Panels, une autre façon de construire. DrupalCamp Paris 2013
Panels, une autre façon de construire. DrupalCamp Paris 2013Panels, une autre façon de construire. DrupalCamp Paris 2013
Panels, une autre façon de construire. DrupalCamp Paris 2013bellesmanieres
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)
Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)
Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)Laurent Moccozet
 
Projet Plateforme de Partage de Contenus Multimédias (3)
Projet Plateforme de Partage de Contenus Multimédias (3)Projet Plateforme de Partage de Contenus Multimédias (3)
Projet Plateforme de Partage de Contenus Multimédias (3)Laurent Moccozet
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheAurelien Navarre
 
Drupagora 2014 : Reprendre un projet avec Drupal quand on a des centaines de...
Drupagora 2014 :  Reprendre un projet avec Drupal quand on a des centaines de...Drupagora 2014 :  Reprendre un projet avec Drupal quand on a des centaines de...
Drupagora 2014 : Reprendre un projet avec Drupal quand on a des centaines de...Core-Techs
 
Projet de semestre / 1ére partie / partage de contenus multimédias
Projet de semestre / 1ére partie / partage de contenus multimédiasProjet de semestre / 1ére partie / partage de contenus multimédias
Projet de semestre / 1ére partie / partage de contenus multimédiasLaurent Moccozet
 
Drupal & responsive
Drupal & responsiveDrupal & responsive
Drupal & responsiveRezonova
 
Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8OSInet
 
Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)Nicolas Morin
 
HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?Qelios
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFBoubker ABERWAG
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...CERTyou Formation
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Sylvain Leroy
 
Drupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersDrupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersFrédéric Simonet
 
DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
 DrupalCamp Paris 2013 - Drupal : un CMS orienté métier DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
DrupalCamp Paris 2013 - Drupal : un CMS orienté métierActency
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)LaNetscouade
 
Découvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référenceDécouvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référenceLINAGORA
 

Semelhante a Theming drupal8 - Meetup Paris - 26-mars-2015 (20)

Panels, une autre façon de construire. DrupalCamp Paris 2013
Panels, une autre façon de construire. DrupalCamp Paris 2013Panels, une autre façon de construire. DrupalCamp Paris 2013
Panels, une autre façon de construire. DrupalCamp Paris 2013
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)
Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)
Projet Plateforme de Partage de Contenus Multimédias 2013 (3/5)
 
Projet Plateforme de Partage de Contenus Multimédias (3)
Projet Plateforme de Partage de Contenus Multimédias (3)Projet Plateforme de Partage de Contenus Multimédias (3)
Projet Plateforme de Partage de Contenus Multimédias (3)
 
Outils front-end
Outils front-endOutils front-end
Outils front-end
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
 
Drupagora 2014 : Reprendre un projet avec Drupal quand on a des centaines de...
Drupagora 2014 :  Reprendre un projet avec Drupal quand on a des centaines de...Drupagora 2014 :  Reprendre un projet avec Drupal quand on a des centaines de...
Drupagora 2014 : Reprendre un projet avec Drupal quand on a des centaines de...
 
Projet de semestre / 1ére partie / partage de contenus multimédias
Projet de semestre / 1ére partie / partage de contenus multimédiasProjet de semestre / 1ére partie / partage de contenus multimédias
Projet de semestre / 1ére partie / partage de contenus multimédias
 
Drupal & responsive
Drupal & responsiveDrupal & responsive
Drupal & responsive
 
Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8
 
Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)
 
HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPF
 
Atelier template
Atelier templateAtelier template
Atelier template
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++
 
Drupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersDrupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliers
 
DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
 DrupalCamp Paris 2013 - Drupal : un CMS orienté métier DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)
 
Découvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référenceDécouvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référence
 

Theming drupal8 - Meetup Paris - 26-mars-2015

  • 1. Meetup Drupal Paris mars 2015 Drupal 8 Theming
  • 2. Meetup Drupal Paris mars 2015 Romain JARRAUD Formateur/consultant Trained People @romainjarraud
  • 3. Meetup Drupal Paris mars 2015 Qu’est-ce que le theming ?
  • 4. Meetup Drupal Paris mars 2015 Theming ? Fonctionnel Présentation Drupal et modules Thème
  • 5. Meetup Drupal Paris mars 2015 Theming ? • THEMING = Sortie HTML • Il existent d’autres façons « d’afficher des données », par exemple sous forme de flux RSS, JSON…
  • 6. Meetup Drupal Paris mars 2015 Theming ? • Les modules manipulent les données. • Ils proposent également un rendu par défaut. • Par exemple, le module block définit le template block.twig.html de base permettant d’afficher un bloc. • Le thème SURCHARGE ce que font les modules.
  • 7. Meetup Drupal Paris mars 2015 Theming ? • Produire le code html de chaque page. • Habiller les balises de styles : tailles, couleurs, images... • Ajouter des effets à l’aide de javascript.
  • 8. Meetup Drupal Paris mars 2015 Principe de base
  • 9. Meetup Drupal Paris mars 2015 Thème Navigateur CSS Templates Drupal et modules Contenu HTML Page Web Requête
  • 10. Meetup Drupal Paris mars 2015 Thème
  • 11. Meetup Drupal Paris mars 2015 /themes/ive/ive.info.yml
  • 12. Meetup Drupal Paris mars 2015 Fini !
  • 13. Meetup Drupal Paris mars 2015 Templates
  • 14. Meetup Drupal Paris mars 2015 Template ? • Eléments à afficher : données. • Render Array : array(‘#theme’ => ‘HOOK’). • Passe les données au template désigné. • Chaque élément (bloc, noeud, vue…) est affiché grâce à un template dédié.
  • 15. Meetup Drupal Paris mars 2015 Moteur de thème TWIG • Drupal 8 utilise le moteur de thème TWIG. • TWIG a été créé par Fabien Potencier. • Il offre un système de templates (template.html.twig) pour générer le code HTML. • La partie dynamique est obtenue grâce à du code TWIG inséré dans le code HTML.
  • 16. Meetup Drupal Paris mars 2015 Templates • Tous les templates ont l’extension .html.twig. • Chaque fichier de template reçoit, non pas le tableau $variables, mais autant de variables que le tableau $variables contient de clés. • Ex. : si $variables = array(‘data1’ => $data_1,‘data2’ => $data_2) est passé au template, ce dernier reçoit les variables TWIG data1 et data2. • Un template contient le code HTML avec du code TWIG qui affiche principalement le contenu des variables.
  • 17. Meetup Drupal Paris mars 2015 TWIG (rapidement) • Afficher le contenu d’une variable : {{ var }}. • TWIG sait afficher n’importe quel type de variable (chaine, tableau, objet) : {{ node.title }}. • Fonction : {% if var %} {% endif %}. • Commentaires : {# commentaire #} • Traduction : • {% trans %} {{ chaine }} {% endtrans %}. • Disponible ensuite via l’interface de Drupal !
  • 18. Meetup Drupal Paris mars 2015 TWIG (rapidement) • Filtres : • {{ date|format_date(‘medium’) }} • chaine à traduire : • Echappement : {{ texte }} (équivalent à @). • Interprétation : {{ texte|passthrough }} (équivalent à !). • Placeholder : {{ texte|placeholder }} (équivalent à %). • {{ content|without(‘links’) }}. • {{ chaine|lower }} (upper également). • {{ class_name|clean_class }}. • {{ id_name|clean_id }}.
  • 19. Meetup Drupal Paris mars 2015 /themes/ive/templates/block.html.twig
  • 20. Meetup Drupal Paris mars 2015 Suggestions de template • Chaque module définit le template de base pour rendre un type d’élément en particulier. • Mais chaque élément individuellement peut être rendu avec un template dédié. • Le module propose la plupart du temps des templates alternatifs utilisés dans un contexte plus précis : suggestions de template. • Par exemple pour afficher un nœud, le template utilisé par défaut est node.html.twig. Si ce nœud est de type article, Drupal peut potentiellement utiliser le template node-- article.html.twig (s’il existe!).
  • 21. Meetup Drupal Paris mars 2015 Suggestions de template • Déterminer le template à utiliser : • hook_theme_suggestions_HOOK() définit par le module déclarant le HOOK. • hook_theme_suggestions_alter() : modules et thèmes voulant modifier les suggestions pour tous les hooks. • hook_theme_suggestions_HOOK_alter() : modules et thèmes voulant modifier les suggestions de HOOK.
  • 22. Meetup Drupal Paris mars 2015 Fonctions de preprocess
  • 23. Meetup Drupal Paris mars 2015 Fonction de preprocess Template Preprocess par défaut $variables Preprocess de theme $variables Preprocess de module $variables
  • 24. Meetup Drupal Paris mars 2015 • Fonction de preprocess de base : template_preprocess(). • Fonction de preprocess dédiée : template_preprocess_HOOK(). • $variables['attributes']['class'] : contient un nom de classe correspondant au nom du hook de thème invoqué. Fonction de preprocess
  • 25. Meetup Drupal Paris mars 2015 Librairies
  • 26. Meetup Drupal Paris mars 2015 /themes/ive/ive.libraries.yml • Les fichiers de CSS et JS doivent être déclarés sous forme de librairie.
  • 27. Meetup Drupal Paris mars 2015 /themes/ive/ive.info.yml • Le chargement d’une librairie peut se faire via le fichier .info.yml.
  • 28. Meetup Drupal Paris mars 2015 /themes/ive/ive.theme • Le chargement d’une librairie peut également se faire via la fonction THEME_page_attachments_alter() :
  • 29. Meetup Drupal Paris mars 2015 /themes/ive/ive.theme • Le chargement d’une librairie peut également se faire via une fonction de preprocess :
  • 30. Meetup Drupal Paris mars 2015 /themes/ive/ive.theme • Pour bloquer le chargement d’un fichier de CSS, on utilise la fonction hook_css_alter() :
  • 31. Meetup Drupal Paris mars 2015 Surcharge
  • 32. Meetup Drupal Paris mars 2015 Surcharge • L'un des rôles du thème est de surcharger le formatage par défaut afin de l'adapter aux besoins. • Drupal propose un mécanisme de surcharge pour les templates. • Dès qu’un hook de thème est invoqué, le thème est sollicité en premier. Dans le cas où aucune surcharge n’est proposée, c’est l’élément par défaut qui est appelé.
  • 33. Meetup Drupal Paris mars 2015 Surcharge • Copier le fichier original dans le dossier de son thème. • Vider le registre du thème. • Vous avez la main !
  • 34. Meetup Drupal Paris mars 2015 Breakpoints
  • 35. Meetup Drupal Paris mars 2015 /themes/ive/ive.breakpoints.yml
  • 36. Meetup Drupal Paris mars 2015 Breakpoints • Les breakpoints sont exposés côté serveur, permettant ainsi de conditionner l’affichage. • En particulier on gère le chargement des images en fonction de ces breakpoints (via un groupe).
  • 37. Meetup Drupal Paris mars 2015 Configuration Backoffice
  • 38. Meetup Drupal Paris mars 2015 Configuration Backoffice • Comment paramétrer le thème depuis le backoffice de Drupal. • Il existe une page avec un formulaire par défaut pour chaque thème. • On peut le modifier avec la fonction THEME_form_system_theme_settings_alter() en utilisant la Form API.
  • 39. Meetup Drupal Paris mars 2015 /themes/ive/ive.theme
  • 40. Meetup Drupal Paris mars 2015 /themes/ive/config/install/ive.settings.yml
  • 41. Meetup Drupal Paris mars 2015 Autres changements par rapport à Drupal 7
  • 42. Meetup Drupal Paris mars 2015 • Tout est bloc : fil d’Ariane, zone de message, logo… • Le logo est au format SVG. • Les classes CSS sont ajoutées dans le template par défaut, ou bien via les fonctions de preprocess (cas de logique plus complexe). • Thème de base Classy. • Disparition de la fonction theme() au profit des Render Array. • TWIG a un mode Debug affichant les suggestions de template sous forme de commentaires HTML.
  • 43. Meetup Drupal Paris mars 2015 Conclusion • Adaptation facile par rapport à Drupal 7. • Plus simple avec Drupal 8 ! • TWIG, c’est que du bonheur !
  • 44. Meetup Drupal Paris mars 2015 Merci à vous !
  • 45. Meetup Drupal Paris mars 2015 Questions ?