SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Panels : construire autrement
Pascal Morin
bellesmanieres @ d.o.
Senior Dev @ Code Enigma
1. Définition, utilisation, concepts de base >site
builders
2. Panels et le theme >themers & frontend devs
3. Developpement et concepts avancés>devs
1. Définition, utilisation, concepts de base
Qu'est-ce que c'est ?
La page du projet :
https://drupal.org/project/panels
Qu'est-ce que c'est ?
● At its core it is a drag and drop content manager that lets you
visually design a layout and place content within that layout.
● À la base, c'est un gestionnaire de contenu drag and drop
qui vous permet de concevoir visuellement une mise en
page et d'y placer des éléments de contenu.
Qu'est-ce que c'est ?
● At its core it is a drag and drop content manager that lets you
visually design a layout and place content within that layout.
● À la base, c'est un gestionnaire de contenu drag and drop
qui vous permet de concevoir visuellement une mise en
page et d'y place des éléments de contenu.
Qu'est-ce que c'est ?
Il faut le voir comme une manière différente de faire interagir
ensemble les éléments et concepts habituels de Drupal:
● Système de menu
● Entités (noeuds, utilisateurs, etc)
● Système de thème
● …
Pour quoi ?
Pour aller au delà de ce que Drupal permet de faire, de manière
simple et “propre”.
La preuve par l'exemple …
Article
Titre
Image principale
Corps du texte
Bloc téléchargement
Les 5 derniers noeuds de la
même catégorie
Drupal
● hook_node_preprocess
● node--article.php
● page.tpl.php
● hook_page_preprocess
● hook_block_info
● module_invoke('block',
'block_view', XXX);
● arg(1)
● node_load/entity_load
● field_view_field
● global $user
● user_is_logged_in()
● If/else/switch
Page
● C'est l'élément de base, qui correspond à un chemin :
node/%node, mapage, autre/page.
● Ce chemin peut contenir des arguments, et sert de « support »
aux variantes et aux autres éléments.
● Créer une 'page', c'est donc l'équivalent d'implémenter un
hook_menu, dont le callback, les arguments, les droits d'accès,
etc sont gérés pour nous par 'Panels'*
* En fait, c'est pas vrai !
Contexte
● L'ensemble des informations disponibles pour tous les éléments
de la page.
● Un contexte est souvent une entité ou un objet « chargé »
(nœud, utilisateur, terme de taxonomie), mais pas forcément :
langue pour un site multilingue, chaîne de texte, …
● Un contexte peut découler d'un argument, du contexte global,
d'une relation.
Variante
● C'est la partie responsable de générer le contenu, à partir des
éléments préparés par la 'page'
● Une page peut contenir plusieurs variantes, dont l'une ou l'autre
sera choisie en fonction de critéres prédéfinis, souvent liés au(x)
contextes.
● C'est ce qui permet de moduler la mise en page et les éléments
de contenu pour une même page.
Layout
● C'est un modèle de mise en page qui représente la disposition
dans laquelles les différents éléments seront placés (colonnes,
lignes).
● C'est l'équivalent d'un template de page dans un thème drupal,
avec des régions (gauche, droite, bas, etc)
● Panels fourni un layout 'flexible', qui permet de créer par
l'interface quasiment n'importe quel layout, et de le réutiliser.
Pane (panneau)
● C'est l'élément de contenu lui même, semblable au blocs de
Drupal
● Un pane peut contenir n'importe quel type d'élement : un bloc,
un menu, un élément d'entité, une vue, …
2. Panels et le theme
En guise d'introduction
● L'interface d'administration permet d'ajouter des classes et des
ids aux différents éléments (body, régions, panes).
● Suffisant dans certains cas simples.
Concevoir sa page
● Panels conserve le système de theming standard drupal, mais les
éléments de bases sont différents.
● Par défaut, Panels agit au niveau du « contenu » de la page :
$page['content'] .
● Le niveau de « Panelization » est donc principalement une
question de choix, de besoins et de familiarité avec le module.
Choix du thème
● Certains thèmes sont plus adaptés que d'autres à l'utilisation
avec Panels. En vrac :
Tao, Zen, AT Panels Everywhere, Aurora, Panels 960gs,
Precision, Clarity, Omega, …
● Le contenu d'un page.tpl.php idéal : 
<?php print render($page['content']); ?>
Templates
● Par défault, il y a peu de templates qu'on peut directement overrider dans le
theme. En gros un seul : panels-pane.tpl.php
● Les suggestions de templates sont basées sur le type de pane : (voir
https://drupal.org/node/1678810)
– panels-pane--node-title
– panels-pane--views-panes
● Il est bien sûr possible d'implémenter d'autres templates
(HOOK_preprocess_panels_pane) pour des besoins précis.
Layouts
● Panels fournit quelques layouts les plus courants : 2 et 3
colonnes, colonnes + haut et bas, etc
● Il existe aussi un layout flexible, qui permet de construire et de
réutiliser presque tout type de layout.
● https://drupal.org/project/panels_extra_layouts
● Dans la plupart des cas, on a besoin de plus de contrôle sur le
markup généré. On doit donc créer son propre layout.
Layouts
● Un layout est constitué de :
– Un fichier de définition des caractéristiques de notre layout (nom,
catégorie, régions disponibles, etc)
– Un fichier tpl.php
– (Un fichier CSS)
– (Un fichier PNG)
● C'est un peu comme un page.tpl.php, ou un mini-theme qui ne
s'appliquerait qu'au contenu que l'on choisi.
Fichier paris2013.inc
$plugin = array(
'title' => t('2 colonnes'),
'category' => t('Paris 2013'),
'icon' => 'paris2013.png',
'theme' => 'paris2013', // Les underscores doivent être remplacés par des tirets.
'css' => 'paris2013.css',
'regions' => array(
'section1' => t('Section 1'),
'section2' => t('Section 2'),
),
);
Fichier paris2013.tpl.php
<div class="panel-display panel-2col clearfix" <?php if (!empty($css_id)) { print "id="$css_id""; } ?
>>
<div class="panel-panel panel-col-first">
<div class="inside"><?php print $content['section1']; ?></div>
</div>
<div class="panel-panel panel-col-last">
<div class="inside"><?php print $content['section2']; ?></div>
</div>
</div>
Styles
● Un style correspond à un ensemble de mise en forme.
● Un style est réutilisable et s'applique au niveau de la région, du
pane ou de la variante.
● Un sous-module de Panels (stylizer) permet de créer et réutiliser
des styles par l'interface.
Styles
● Exemple tiré de : https://drupal.org/project/panels_tabs
$plugin = array(
'title' => t('Tabs'),
'description' => t('Show panel panes in a region as tabs.'),
'render region' => 'panels_tabs_style_render_region',
);
● Pour résumer, la démarche est à l'opposée du theming Drupal
habituel :
au lieu de subir du contenu formaté et de chercher comment
supplanter le markup, on définit le markup séparément (layout,
style) et on choisit à quel élément l'appliquer.
● C'est toujours la même démarche de séparation de la logique et
de la génération de contenu.
Pour aller plus loin
● https://drupal.org/project/semantic_panels
● https://drupal.org/project/ds
● https://drupal.org/project/panels_everywhere
● http://www.codeenigma.com/en/blog/drupal-theming-death-of-a-
themer
3. Developpement et concepts avancés
Rendre à César …
● Panels lui-même ne fournit en fait que certaines des
fonctionalités que l'on a vu jusqu'à présent.
● C'est en fait la combinaison de 3 modules :
– CTools
– Page Manager
– Panels
Ctools
● C'est le module sur lequel tout repose. Il fournit les composants
de base :
– Contextes et arguments
– Droits d'accès
– Cache*
– Relations
– « Content type »
Page Manager
● Il joue un rôle similaire au menu router de Drupal
● Implémente/supplante les entrées de menu
● Détermine quels handlers doivent être appelés
● Fournit aussi l'interface d'administration des pages
Panels
● Il étend (beaucoup!) les fonctionnalités du page manager et de
Ctools et sert de glue entre les deux
● Définit des 'renderer' (ce qui effectivement génére le HTML)
● Ajoute de nouveaux types de plugins Ctools : style, layout, cache
● …
● Et bien sûr, fournit l'interface d'administration qui permet de
créer tout notre contenu
Plugins
● Taches
● Contexte
● Cache
● Access
● Argument
● Content type
● Relationship
● (Layout)
● (Style)
● …
Plugins
● HOOK_ctools_plugin_directory()
● HOOK_ctools_plugin_api()
plugin_name.inc
$plugin = array(
'title' => t('Mon plugin'),
'category' => t('Ma catégorie'),
'callback' => 'ma_function_de_callback',
);
MODULENAME_PLUGINNAME_PLUGINTYPE_CALLBACKNAME() 
Task handler : json_output.inc
Content type : paris_2013.inc
$plugin = array(
'single' => TRUE,
'title' => t('Infos utilisateurs'),
'icon' => 'icon_test.png',
'category' => t('Paris 2013'),
'defaults' => array(),
'render callback' => 'panelstalk_paris_2013_content_type_render',
'required context' => array(
new ctools_context_optional(t('User ID'), 'user') //@see argument uid.inc @see node.inc
),
);
function panelstalk_paris_2013_content_type_render($subtype, $conf, $panel_args, $context)
function panelstalk_paris_2013_content_type_admin_title($subtype, $conf)
function panelstalk_paris_2013_content_type_edit_form($form, &$form_state)
function panelstalk_paris_2013_content_type_edit_form_submit($form, &$form_state)
Accès
● Garder à l'esprit que les contextes ne sont pas encore
disponibles
● Variante + 403
● Un exemple de plugin d'accès :
https://drupal.org/project/domain_ctools
Contexte
● Ctools fournit déjà un contexte pour les entités, même custom.
Renderer
● Permet de controller entièrement le rendu d'un display de
Panels.
● C'est, par exemple, la méthode utilisée par les modules IPE et
ESI.
En vrac
● https://drupal.org/project/pm_existing_pages
● http://drupal.org/project/fieldable_panels_panes
● https://drupal.org/project/panelizer
● https://drupal.org/project/panopoly

Más contenido relacionado

La actualidad más candente

Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPressChi Nacim
 
18 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-2015
18 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-201518 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-2015
18 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-2015Emmanuelle Morlock
 
Conversion de template HTML en thème WordPress
Conversion de template HTML en thème WordPressConversion de template HTML en thème WordPress
Conversion de template HTML en thème WordPressChi Nacim
 
Creation de-themes-wp
Creation de-themes-wpCreation de-themes-wp
Creation de-themes-wpChi Nacim
 
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
 
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013Ghilas BELHADJ
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapBassem ABCHA
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutantStanislas Chollet
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirYves Van Goethem
 
Jquery - introduction au langage
Jquery - introduction au langageJquery - introduction au langage
Jquery - introduction au langageStrasWeb
 
Les balises HTML
Les balises HTMLLes balises HTML
Les balises HTMLNeovov
 
Création de themes WordPress
Création de themes WordPressCréation de themes WordPress
Création de themes WordPressChi Nacim
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
 

La actualidad más candente (20)

Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPress
 
JQuery
JQueryJQuery
JQuery
 
HTML5 & CSS3 : Jeux
HTML5 & CSS3 : Jeux HTML5 & CSS3 : Jeux
HTML5 & CSS3 : Jeux
 
18 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-2015
18 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-201518 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-2015
18 02-2015 atelier-pratique-xml-tei-stage-d-ecdotique-2015
 
Conversion de template HTML en thème WordPress
Conversion de template HTML en thème WordPressConversion de template HTML en thème WordPress
Conversion de template HTML en thème WordPress
 
HTML5
HTML5HTML5
HTML5
 
Creation de-themes-wp
Creation de-themes-wpCreation de-themes-wp
Creation de-themes-wp
 
Apprenez le jQuery
Apprenez le jQueryApprenez le jQuery
Apprenez le jQuery
 
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
 
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
Création de Thème WordPress - Ghilas BELHADJ - Semaine du Web 2013
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutant
 
Html 5
Html 5Html 5
Html 5
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
Jquery - introduction au langage
Jquery - introduction au langageJquery - introduction au langage
Jquery - introduction au langage
 
Les balises HTML
Les balises HTMLLes balises HTML
Les balises HTML
 
HTML
HTMLHTML
HTML
 
Création de themes WordPress
Création de themes WordPressCréation de themes WordPress
Création de themes WordPress
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 

Destacado

Bilan jonglage cp ce2 et cliss
Bilan jonglage cp ce2 et clissBilan jonglage cp ce2 et cliss
Bilan jonglage cp ce2 et clisspounousajongle
 
II Marató de Comunicació: Jingles de Campanya
II Marató de Comunicació: Jingles de CampanyaII Marató de Comunicació: Jingles de Campanya
II Marató de Comunicació: Jingles de CampanyaRicard Espelt
 
Schéma départementale de la lecture publique - Doubs 2013
Schéma départementale de la lecture publique - Doubs 2013Schéma départementale de la lecture publique - Doubs 2013
Schéma départementale de la lecture publique - Doubs 2013mddoubs
 
Confort estival - Comment éviter la surchauffe? Exemple 2
Confort estival - Comment éviter la surchauffe? Exemple 2Confort estival - Comment éviter la surchauffe? Exemple 2
Confort estival - Comment éviter la surchauffe? Exemple 2minergie-romande
 
Confort estival - Comment éviter la surchauffe? Exemples pratiques
Confort estival - Comment éviter la surchauffe? Exemples pratiquesConfort estival - Comment éviter la surchauffe? Exemples pratiques
Confort estival - Comment éviter la surchauffe? Exemples pratiquesminergie-romande
 
Presentacion Cintia
Presentacion CintiaPresentacion Cintia
Presentacion Cintiaguest2f2681
 
Loic sarton teletravail
Loic sarton   teletravailLoic sarton   teletravail
Loic sarton teletravailLoic Sarton
 
CasualServices - Búsqueda de información sobre negocios y lugares de interés
CasualServices - Búsqueda de información sobre negocios y lugares de interésCasualServices - Búsqueda de información sobre negocios y lugares de interés
CasualServices - Búsqueda de información sobre negocios y lugares de interésDaniel Martín-Yerga
 
Riz2arc presentation 2014
Riz2arc presentation 2014Riz2arc presentation 2014
Riz2arc presentation 2014Marietou Sall
 
Cuba 1959 2008 Baldor 1906 1978 Libertad
Cuba 1959 2008  Baldor 1906 1978 LibertadCuba 1959 2008  Baldor 1906 1978 Libertad
Cuba 1959 2008 Baldor 1906 1978 LibertadCharles Dent
 
Escribimos nuestros nombres
Escribimos nuestros nombresEscribimos nuestros nombres
Escribimos nuestros nombresVerónica Blanco
 
La Herencia CláSica, Final Grecia 2
La Herencia CláSica, Final Grecia 2La Herencia CláSica, Final Grecia 2
La Herencia CláSica, Final Grecia 2fervil
 

Destacado (20)

Deporte
DeporteDeporte
Deporte
 
Bilan jonglage cp ce2 et cliss
Bilan jonglage cp ce2 et clissBilan jonglage cp ce2 et cliss
Bilan jonglage cp ce2 et cliss
 
Fotomontaje con Etoys
Fotomontaje con EtoysFotomontaje con Etoys
Fotomontaje con Etoys
 
Biology of Tooth eruption
Biology of Tooth eruptionBiology of Tooth eruption
Biology of Tooth eruption
 
II Marató de Comunicació: Jingles de Campanya
II Marató de Comunicació: Jingles de CampanyaII Marató de Comunicació: Jingles de Campanya
II Marató de Comunicació: Jingles de Campanya
 
Schéma départementale de la lecture publique - Doubs 2013
Schéma départementale de la lecture publique - Doubs 2013Schéma départementale de la lecture publique - Doubs 2013
Schéma départementale de la lecture publique - Doubs 2013
 
Confort estival - Comment éviter la surchauffe? Exemple 2
Confort estival - Comment éviter la surchauffe? Exemple 2Confort estival - Comment éviter la surchauffe? Exemple 2
Confort estival - Comment éviter la surchauffe? Exemple 2
 
Confort estival - Comment éviter la surchauffe? Exemples pratiques
Confort estival - Comment éviter la surchauffe? Exemples pratiquesConfort estival - Comment éviter la surchauffe? Exemples pratiques
Confort estival - Comment éviter la surchauffe? Exemples pratiques
 
EL pasado nos cuenta
EL pasado nos cuentaEL pasado nos cuenta
EL pasado nos cuenta
 
DAMOISELLE D
DAMOISELLE DDAMOISELLE D
DAMOISELLE D
 
Marcador social
Marcador socialMarcador social
Marcador social
 
Presentacion Cintia
Presentacion CintiaPresentacion Cintia
Presentacion Cintia
 
Actrices
ActricesActrices
Actrices
 
Loic sarton teletravail
Loic sarton   teletravailLoic sarton   teletravail
Loic sarton teletravail
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1
 
CasualServices - Búsqueda de información sobre negocios y lugares de interés
CasualServices - Búsqueda de información sobre negocios y lugares de interésCasualServices - Búsqueda de información sobre negocios y lugares de interés
CasualServices - Búsqueda de información sobre negocios y lugares de interés
 
Riz2arc presentation 2014
Riz2arc presentation 2014Riz2arc presentation 2014
Riz2arc presentation 2014
 
Cuba 1959 2008 Baldor 1906 1978 Libertad
Cuba 1959 2008  Baldor 1906 1978 LibertadCuba 1959 2008  Baldor 1906 1978 Libertad
Cuba 1959 2008 Baldor 1906 1978 Libertad
 
Escribimos nuestros nombres
Escribimos nuestros nombresEscribimos nuestros nombres
Escribimos nuestros nombres
 
La Herencia CláSica, Final Grecia 2
La Herencia CláSica, Final Grecia 2La Herencia CláSica, Final Grecia 2
La Herencia CláSica, Final Grecia 2
 

Similar a Panels, une autre façon de construire. DrupalCamp Paris 2013

Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet DrupalAdyax
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Romain Jarraud
 
Introduction à la gestion de projet
Introduction à la gestion de projetIntroduction à la gestion de projet
Introduction à la gestion de projetlaureno
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
DrupalCamp Paris 2013 - Theming
DrupalCamp Paris 2013 - ThemingDrupalCamp Paris 2013 - Theming
DrupalCamp Paris 2013 - ThemingRomain Jarraud
 
Cours_1 - HTML5 et JS.ppt
Cours_1 - HTML5 et JS.pptCours_1 - HTML5 et JS.ppt
Cours_1 - HTML5 et JS.pptRihabBENLAMINE
 
Formation developpement web KADODJOMON EMMANUEL COULIBALY.pptx
Formation developpement web KADODJOMON EMMANUEL COULIBALY.pptxFormation developpement web KADODJOMON EMMANUEL COULIBALY.pptx
Formation developpement web KADODJOMON EMMANUEL COULIBALY.pptxtanokouakouludovic
 
Drupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersDrupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersFrédéric Simonet
 
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
 
Comment évaluer la qualité d'un site web selon les techniques d'intégration w...
Comment évaluer la qualité d'un site web selon les techniques d'intégration w...Comment évaluer la qualité d'un site web selon les techniques d'intégration w...
Comment évaluer la qualité d'un site web selon les techniques d'intégration w...Renoir Boulanger
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Alexandre Marie
 
Introduction Gestion Projet web
Introduction Gestion Projet webIntroduction Gestion Projet web
Introduction Gestion Projet webguest6d3f53
 
introduction à la gestion de projet
introduction à la gestion de projetintroduction à la gestion de projet
introduction à la gestion de projetlaureno
 
Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)Nicolas Morin
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Guillaume RICHARD
 

Similar a Panels, une autre façon de construire. DrupalCamp Paris 2013 (20)

Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet Drupal
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015
 
Introduction à la gestion de projet
Introduction à la gestion de projetIntroduction à la gestion de projet
Introduction à la gestion de projet
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
DrupalCamp Paris 2013 - Theming
DrupalCamp Paris 2013 - ThemingDrupalCamp Paris 2013 - Theming
DrupalCamp Paris 2013 - Theming
 
Cours_1 - HTML5 et JS.ppt
Cours_1 - HTML5 et JS.pptCours_1 - HTML5 et JS.ppt
Cours_1 - HTML5 et JS.ppt
 
Formation developpement web KADODJOMON EMMANUEL COULIBALY.pptx
Formation developpement web KADODJOMON EMMANUEL COULIBALY.pptxFormation developpement web KADODJOMON EMMANUEL COULIBALY.pptx
Formation developpement web KADODJOMON EMMANUEL COULIBALY.pptx
 
Drupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersDrupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliers
 
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
 
Comment évaluer la qualité d'un site web selon les techniques d'intégration w...
Comment évaluer la qualité d'un site web selon les techniques d'intégration w...Comment évaluer la qualité d'un site web selon les techniques d'intégration w...
Comment évaluer la qualité d'un site web selon les techniques d'intégration w...
 
Atelier template
Atelier templateAtelier template
Atelier template
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
Introduction Gestion Projet web
Introduction Gestion Projet webIntroduction Gestion Projet web
Introduction Gestion Projet web
 
SPIP
SPIPSPIP
SPIP
 
introduction à la gestion de projet
introduction à la gestion de projetintroduction à la gestion de projet
introduction à la gestion de projet
 
Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)Drupal en bibliothèque (2008)
Drupal en bibliothèque (2008)
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
 
Initiation au html
Initiation au htmlInitiation au html
Initiation au html
 
Les dessous de html+ccs+js
Les dessous de html+ccs+jsLes dessous de html+ccs+js
Les dessous de html+ccs+js
 
Atelier initiation au html5
Atelier initiation au html5Atelier initiation au html5
Atelier initiation au html5
 

Panels, une autre façon de construire. DrupalCamp Paris 2013

  • 1. Panels : construire autrement Pascal Morin bellesmanieres @ d.o. Senior Dev @ Code Enigma
  • 2. 1. Définition, utilisation, concepts de base >site builders 2. Panels et le theme >themers & frontend devs 3. Developpement et concepts avancés>devs
  • 3. 1. Définition, utilisation, concepts de base
  • 4. Qu'est-ce que c'est ? La page du projet : https://drupal.org/project/panels
  • 5. Qu'est-ce que c'est ? ● At its core it is a drag and drop content manager that lets you visually design a layout and place content within that layout. ● À la base, c'est un gestionnaire de contenu drag and drop qui vous permet de concevoir visuellement une mise en page et d'y placer des éléments de contenu.
  • 6. Qu'est-ce que c'est ? ● At its core it is a drag and drop content manager that lets you visually design a layout and place content within that layout. ● À la base, c'est un gestionnaire de contenu drag and drop qui vous permet de concevoir visuellement une mise en page et d'y place des éléments de contenu.
  • 7. Qu'est-ce que c'est ? Il faut le voir comme une manière différente de faire interagir ensemble les éléments et concepts habituels de Drupal: ● Système de menu ● Entités (noeuds, utilisateurs, etc) ● Système de thème ● …
  • 8. Pour quoi ? Pour aller au delà de ce que Drupal permet de faire, de manière simple et “propre”. La preuve par l'exemple …
  • 9. Article Titre Image principale Corps du texte Bloc téléchargement Les 5 derniers noeuds de la même catégorie
  • 10. Drupal ● hook_node_preprocess ● node--article.php ● page.tpl.php ● hook_page_preprocess ● hook_block_info ● module_invoke('block', 'block_view', XXX); ● arg(1) ● node_load/entity_load ● field_view_field ● global $user ● user_is_logged_in() ● If/else/switch
  • 11. Page ● C'est l'élément de base, qui correspond à un chemin : node/%node, mapage, autre/page. ● Ce chemin peut contenir des arguments, et sert de « support » aux variantes et aux autres éléments. ● Créer une 'page', c'est donc l'équivalent d'implémenter un hook_menu, dont le callback, les arguments, les droits d'accès, etc sont gérés pour nous par 'Panels'* * En fait, c'est pas vrai !
  • 12. Contexte ● L'ensemble des informations disponibles pour tous les éléments de la page. ● Un contexte est souvent une entité ou un objet « chargé » (nœud, utilisateur, terme de taxonomie), mais pas forcément : langue pour un site multilingue, chaîne de texte, … ● Un contexte peut découler d'un argument, du contexte global, d'une relation.
  • 13. Variante ● C'est la partie responsable de générer le contenu, à partir des éléments préparés par la 'page' ● Une page peut contenir plusieurs variantes, dont l'une ou l'autre sera choisie en fonction de critéres prédéfinis, souvent liés au(x) contextes. ● C'est ce qui permet de moduler la mise en page et les éléments de contenu pour une même page.
  • 14. Layout ● C'est un modèle de mise en page qui représente la disposition dans laquelles les différents éléments seront placés (colonnes, lignes). ● C'est l'équivalent d'un template de page dans un thème drupal, avec des régions (gauche, droite, bas, etc) ● Panels fourni un layout 'flexible', qui permet de créer par l'interface quasiment n'importe quel layout, et de le réutiliser.
  • 15. Pane (panneau) ● C'est l'élément de contenu lui même, semblable au blocs de Drupal ● Un pane peut contenir n'importe quel type d'élement : un bloc, un menu, un élément d'entité, une vue, …
  • 16. 2. Panels et le theme
  • 17. En guise d'introduction ● L'interface d'administration permet d'ajouter des classes et des ids aux différents éléments (body, régions, panes). ● Suffisant dans certains cas simples.
  • 18. Concevoir sa page ● Panels conserve le système de theming standard drupal, mais les éléments de bases sont différents. ● Par défaut, Panels agit au niveau du « contenu » de la page : $page['content'] . ● Le niveau de « Panelization » est donc principalement une question de choix, de besoins et de familiarité avec le module.
  • 19. Choix du thème ● Certains thèmes sont plus adaptés que d'autres à l'utilisation avec Panels. En vrac : Tao, Zen, AT Panels Everywhere, Aurora, Panels 960gs, Precision, Clarity, Omega, … ● Le contenu d'un page.tpl.php idéal :  <?php print render($page['content']); ?>
  • 20. Templates ● Par défault, il y a peu de templates qu'on peut directement overrider dans le theme. En gros un seul : panels-pane.tpl.php ● Les suggestions de templates sont basées sur le type de pane : (voir https://drupal.org/node/1678810) – panels-pane--node-title – panels-pane--views-panes ● Il est bien sûr possible d'implémenter d'autres templates (HOOK_preprocess_panels_pane) pour des besoins précis.
  • 21. Layouts ● Panels fournit quelques layouts les plus courants : 2 et 3 colonnes, colonnes + haut et bas, etc ● Il existe aussi un layout flexible, qui permet de construire et de réutiliser presque tout type de layout. ● https://drupal.org/project/panels_extra_layouts ● Dans la plupart des cas, on a besoin de plus de contrôle sur le markup généré. On doit donc créer son propre layout.
  • 22. Layouts ● Un layout est constitué de : – Un fichier de définition des caractéristiques de notre layout (nom, catégorie, régions disponibles, etc) – Un fichier tpl.php – (Un fichier CSS) – (Un fichier PNG) ● C'est un peu comme un page.tpl.php, ou un mini-theme qui ne s'appliquerait qu'au contenu que l'on choisi.
  • 23. Fichier paris2013.inc $plugin = array( 'title' => t('2 colonnes'), 'category' => t('Paris 2013'), 'icon' => 'paris2013.png', 'theme' => 'paris2013', // Les underscores doivent être remplacés par des tirets. 'css' => 'paris2013.css', 'regions' => array( 'section1' => t('Section 1'), 'section2' => t('Section 2'), ), );
  • 24. Fichier paris2013.tpl.php <div class="panel-display panel-2col clearfix" <?php if (!empty($css_id)) { print "id="$css_id""; } ? >> <div class="panel-panel panel-col-first"> <div class="inside"><?php print $content['section1']; ?></div> </div> <div class="panel-panel panel-col-last"> <div class="inside"><?php print $content['section2']; ?></div> </div> </div>
  • 25. Styles ● Un style correspond à un ensemble de mise en forme. ● Un style est réutilisable et s'applique au niveau de la région, du pane ou de la variante. ● Un sous-module de Panels (stylizer) permet de créer et réutiliser des styles par l'interface.
  • 26. Styles ● Exemple tiré de : https://drupal.org/project/panels_tabs $plugin = array( 'title' => t('Tabs'), 'description' => t('Show panel panes in a region as tabs.'), 'render region' => 'panels_tabs_style_render_region', );
  • 27. ● Pour résumer, la démarche est à l'opposée du theming Drupal habituel : au lieu de subir du contenu formaté et de chercher comment supplanter le markup, on définit le markup séparément (layout, style) et on choisit à quel élément l'appliquer. ● C'est toujours la même démarche de séparation de la logique et de la génération de contenu.
  • 28. Pour aller plus loin ● https://drupal.org/project/semantic_panels ● https://drupal.org/project/ds ● https://drupal.org/project/panels_everywhere ● http://www.codeenigma.com/en/blog/drupal-theming-death-of-a- themer
  • 29. 3. Developpement et concepts avancés
  • 30. Rendre à César … ● Panels lui-même ne fournit en fait que certaines des fonctionalités que l'on a vu jusqu'à présent. ● C'est en fait la combinaison de 3 modules : – CTools – Page Manager – Panels
  • 31. Ctools ● C'est le module sur lequel tout repose. Il fournit les composants de base : – Contextes et arguments – Droits d'accès – Cache* – Relations – « Content type »
  • 32. Page Manager ● Il joue un rôle similaire au menu router de Drupal ● Implémente/supplante les entrées de menu ● Détermine quels handlers doivent être appelés ● Fournit aussi l'interface d'administration des pages
  • 33. Panels ● Il étend (beaucoup!) les fonctionnalités du page manager et de Ctools et sert de glue entre les deux ● Définit des 'renderer' (ce qui effectivement génére le HTML) ● Ajoute de nouveaux types de plugins Ctools : style, layout, cache ● … ● Et bien sûr, fournit l'interface d'administration qui permet de créer tout notre contenu
  • 34. Plugins ● Taches ● Contexte ● Cache ● Access ● Argument ● Content type ● Relationship ● (Layout) ● (Style) ● …
  • 36. plugin_name.inc $plugin = array( 'title' => t('Mon plugin'), 'category' => t('Ma catégorie'), 'callback' => 'ma_function_de_callback', ); MODULENAME_PLUGINNAME_PLUGINTYPE_CALLBACKNAME() 
  • 38. Content type : paris_2013.inc $plugin = array( 'single' => TRUE, 'title' => t('Infos utilisateurs'), 'icon' => 'icon_test.png', 'category' => t('Paris 2013'), 'defaults' => array(), 'render callback' => 'panelstalk_paris_2013_content_type_render', 'required context' => array( new ctools_context_optional(t('User ID'), 'user') //@see argument uid.inc @see node.inc ), ); function panelstalk_paris_2013_content_type_render($subtype, $conf, $panel_args, $context) function panelstalk_paris_2013_content_type_admin_title($subtype, $conf) function panelstalk_paris_2013_content_type_edit_form($form, &$form_state) function panelstalk_paris_2013_content_type_edit_form_submit($form, &$form_state)
  • 39. Accès ● Garder à l'esprit que les contextes ne sont pas encore disponibles ● Variante + 403 ● Un exemple de plugin d'accès : https://drupal.org/project/domain_ctools
  • 40. Contexte ● Ctools fournit déjà un contexte pour les entités, même custom.
  • 41. Renderer ● Permet de controller entièrement le rendu d'un display de Panels. ● C'est, par exemple, la méthode utilisée par les modules IPE et ESI.
  • 42. En vrac ● https://drupal.org/project/pm_existing_pages ● http://drupal.org/project/fieldable_panels_panes ● https://drupal.org/project/panelizer ● https://drupal.org/project/panopoly