Guide Z - Etape 1 : une page sommaire avec le layout Gala 23

, par _Eric_

Introduction

A chaque fois que j’ai besoin de créer un squelette « from scratch », même très simple, je me tourne vers le framework Z qui, une fois en place, permet facilement d’ajouter des pages, de modifier les styles, voire de modifier le layout d’une page donnée.

Alors pourquoi pas prendre Zpip-dist ? C’est souvent le cas, sauf quand je souhaite un layout fluide comme le layout Gala 23. Et là je bloque pour modifier mon Zpip-dist ou créer un thème qui me conviendrait.

Alors j’ai décidé de reprendre la mécanique depuis le début et de décortiquer chaque concept qui sous-tend le framework Z afin d’être capable de construire mon propre jeu de squelettes Z basé sur les layouts Gala. Et pour éviter de me reposer n fois la même question, j’ai noté toutes les étapes de cette aventure afin d’en faire un mini guide.

Au préalable, il est conseiller de lire l’article Comprendre le framework Z qui fait un tour d’horizon des concepts Z et de leur implémentation dans Z-core. En effet, le point de départ de mon nouveau est bien le framework Z v2 bâti à partir du plugin Z-core.

Création du paquet.xml

Comme je distribue toujours mes squelettes sous forme de plugin pour plus simplicité, je commence par créer son paquet.xml puisque la compatibilité projetée est SPIP ≥ 3. La seule particularité du fichier réside dans le nécessite du plugin Z-core qui est comme indiqué plus haut, la brique de base du modèle Z.
Je choisis le préfixe zgala pour mon plugin et je termine cette opération en créant le fichier de langue lang/paquet-zgala_fr.php pour traduire le nom, le slogan et la description du squelette.

Déclaration des blocs Z

A la lecture du contenu de la balise <body> d’un layout Gala quelconque, on distingue clairement 5 blocs de base qui sont appelés à devenir des blocs Z. Ce sont les blocs header, content, navigation, extra et footer.

A ces blocs il faut rajouter les blocs Z qui composent la balise c’est-à-dire head et head_js.

On déclare donc 7 blocs Z dans le fichiers d’options du squelette, zgala_options.php, que l’on crée à la racine du plugin et on y insère le code PHP suivant :

  1. // Définition des blocs Z utilisés par le squelette
  2. $GLOBALS['z_blocs'] = array('header', 'content', 'navigation', 'extra', 'footer', 'head', 'head_js');

Télécharger

Création des répertoires

Chaque blocs Z nécessite un dossier à la racine du squelette afin de recevoir un squelette propre à une page ou le squelette générique dist.html. On crée donc les répertoires correspondant, à savoir :

  • header/
  • content/
  • navigation/
  • extra/
  • footer/
  • head/
  • head_js/

Comme il va falloir très vite créer le fichier commun du head, inclure/head.html et quelques styles on ajoute aussi les dossiers suivants à la racine du squelette :

  • inclure/
  • css/

Mise en place du layout unique

Pierre angulaire du framework Z, le layout unique est matérialisé par le fichier body.html à la racine du squelette. Comme je souhaite un layout de type Gala 23, j’y insère le contenu du body.html de ce layout Gala. Il suffit alors remplacer le contenu des balises <div> qui portent les blocs Z par les inclure adéquats et on obtient le contenu suivant :

  1. <div class="container" id="container">
  2. <div class="header" id="header">
  3. <INCLURE{fond=header/#ENV{type-page},env} />
  4. </div> <!-- .HEADER -->
  5.  
  6. <div class="wrapper" id="wrapper">
  7. <div class="content" id="content">
  8. <INCLURE{fond=content/#ENV{type-page},env} />
  9. </div> <!-- .CONTENT -->
  10. </div> <!-- .WRAPPER -->
  11.  
  12. <div class="navigation col" id="navigation">
  13. <INCLURE{fond=navigation/#ENV{type-page},env} />
  14. </div> <!-- .NAVIGATION -->
  15. <div class="extra col" id="extra">
  16. <INCLURE{fond=extra/#ENV{type-page},env} />
  17. </div> <!-- .EXTRA -->
  18.  
  19. <div class="footer" id="footer">
  20. <INCLURE{fond=footer/#ENV{type-page},env} />
  21. </div> <!-- .FOOTER -->
  22. </div> <!-- .CONTAINER -->
  23. </body></body>

Télécharger

On notera que j’ai dupliqué le nom des id en classe afin de déclarer plus tard des styles moins spécifiques et plus facilement surchargeables.

Mise en place du head

Le contenu standard de la balise <body> étant défini, on peut s’attaquer au contenu de la balise <head>. Dans un premier temps on se limite à un contenu basique :

  • une meta pour le charset et une autre pour le generator ; ces meta sont communes à toutes les pages,
  • une feuille de styles unique, css/zgala.css, pour y intégrer les déclarations du layout Gala 23 et ce pour toutes les pages,
  • le titre de la page et une meta pour sa description.

Pour les deux premiers points on crée le fichier inclure/head.html et on y intègre les instructions suivantes :

  1. [(#REM)
  2. Head standard de toutes les pages ; les éléments spécifiques
  3. (title, description) figurent dans le squelette head/${type-page}.html
  4. ou par défaut dans head/dist.html.
  5. Ce head surcharge celui de Z-core.
  6. ]
  7. [(#REM) Préciser le charset ]
  8. <meta http-equiv="Content-Type" content="text/html; charset=#CHARSET" />
  9.  
  10. [(#REM) Fièrement fabriqué avec SPIP ]
  11. <meta name="generator" content="SPIP[ (#SPIP_VERSION)]" />
  12.  
  13. [(#REM) 1. Base CSS ]
  14. [<link rel="stylesheet" href="(#CSS{css/zgala.css}|direction_css)" type="text/css" />]
  15.  
  16. [(#REM) 2. Style des plugins nécessités ou utilisés par le plugins ]
  17.  
  18. [(#REM) Balise permettant aux plugins d'insérer des fichiers CSS ]
  19. #INSERT_HEAD_CSS
  20.  
  21. [(#REM) Balise permettant aux plugins d'insérer des appels javascript ou css ;
  22. C'est ici que SPIP va insérer l'appel de la librairie jQuery
  23. Et appeler a la fin compacte_head pour agreger et compacter tout le head dans des fichiers statiques
  24. si l'option est cochee dans la configuration
  25. ]
  26. #INSERT_HEAD

Télécharger

Ensuite on crée la feuille de styles layout.css dans le dossier css/. On y insère tel quel le bloc de style du layout gala 23 ce qui donne :

  1. html,body{margin:0;padding:0}
  2. body{font: 76% arial,sans-serif}
  3. p{margin:0 10px 10px}
  4. a{display:block;color: #981793;padding:10px}
  5. div#header h1{height:80px;line-height:80px;margin:0;
  6. padding-left:10px;background: #EEE;color: #79B30B}
  7. div#content p{line-height:1.4}
  8. div#navigation{background:#B9CAFF}
  9. div#extra{background:#FF8539}
  10. div#footer{background: #333;color: #FFF}
  11. div#footer p{margin:0;padding:5px 10px}
  12.  
  13. div#wrapper{float:left;width:100%;margin-left:-200px}
  14. div#content{margin-left:200px}
  15. div#navigation{float:right;width:200px}
  16. div#extra{float:right;clear:right;width:200px}
  17. div#footer{clear:both;width:100%}

Télécharger

Enfin, on termine la mise en place du head en créant le fichier par défaut du “pre-head”, à savoir, head/dist.html dans lequel on y intègre un titre et une description générique et le fichier par défaut du “post-head”, head_js/dist.html que l’on laisse vide.
Pour information, le contenu du fichier head/dist.html est le suivant :

  1. <title>[(#NOM_SITE_SPIP|textebrut)]</title>
  2. [<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|textebrut)" />]

Télécharger

Mise en place de la page d’accueil

Le but de cette phase étant d’afficher une page d’accueil reflétant exactement la page du layout Gala 23 il nous reste à créer les blocs Z constitutifs de la balise <body>.

Pour le corps de la page, soit le bloc content, on crée un fichier content/sommaire.html puisque c’est le nom de la page d’accueil en SPIP. Pour les autres blocs, header, footer, navigation et extra, on ne crée que les fichiers par défaut soit les dist.html.

Pour chacun de ces blocs on insère le contenu d’exemple du layout Gala.

En recalculant la page d’accueil du site on reconnait la page classique Gala pour le layout 23 !

Le fichier zip avec toute la structure des dossiers et les fichiers élaborés durant cette étape est annexé à cet article.