100% ont trouvé ce document utile (1 vote)
2K vues537 pages

Typo 3

Transféré par

Ayoub Lamrani
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
2K vues537 pages

Typo 3

Transféré par

Ayoub Lamrani
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TYPO3

Werner Altmann Ren Fritz Daniel Hinderink

DITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 [Link]

Traduction autorise de louvrage en langue allemande intitul : TYPO3 Enterprise Content Management (ISBN : 3-937514-01-5) de Werner Altmann, Ren Fritz et Daniel Hinderink 2004, Open Source Press, Munich (Allemagne) [Link] Adapt de lallemand par Nicolas Wezel de la socit Streamsys.

Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace. En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. Open Source Press, Munich, 2004, pour ldition originale en langue allemande Groupe Eyrolles, 2006, pour la prsente dition, ISBN : 2-212-11781-7

Table des mati` eres


Pr eface de Kasper Sk arhj Pr eface des auteurs ` propos de ce livre A 11 17 19

Introduction
1 Introduction 1.1 1.2 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quest-ce quun CMS ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3 1.4 S eparation du contenu de la forme . . . . . . . . . . . . . . . . . . . Cycle de vie du contenu . . . . . . . . . . . . . . . . . . . . . . . . . Syst` eme modulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . Groupe cible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R ef erences TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21
23 23 24 25 25 26 26 26 27 29 29 29 31 31 32 35 35 36 36 1 Mat eriel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Serveur Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Base de donn ees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Autres logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Choix du paquetage TYPO3 . . . . . . . . . . . . . . . . . . . . . . .

La communaut e TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lassociation TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 1.4.2 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . membre et sinscrire . . . . . . . . . . . . . . . . . . . . . . . . . Etre

2 Installation 2.1 Choix du paquetage TYPO3 et de la conguration du serveur . . . . . . . . . 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5

Table des mati` eres

2.2

Installation de test et dinitiation . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 2.2.2 Installation WAMP sous Windows . . . . . . . . . . . . . . . . . . . . Installation Quick Install sous Linux . . . . . . . . . . . . . . . . . . . Installation LAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation WAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation WIIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Basic Conguration . . . . . . . . . . . . . . . . . . . . . . . . . . Database Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . Image Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . All Conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . typo3temp/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . phpinfo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Edit les in typo3conf/ . . . . . . . . . . . . . . . . . . . . . . . . About . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [GFX]:$TYPO3_CONF_VARS["GFX"] . . . . . . . . . . . . . . . . . . [SYS]:$TYPO3_CONF_VARS["SYS"] . . . . . . . . . . . . . . . . . . . [EXT]:$TYPO3_CONF_VARS["EXT"] . . . . . . . . . . . . . . . . . . . [BE]:$TYPO3_CONF_VARS["BE"] . . . . . . . . . . . . . . . . . . . . [FE]:$TYPO3_CONF_VARS["FE"] . . . . . . . . . . . . . . . . . . . . Autres options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pages statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38 38 39 40 40 43 44 45 46 47 49 49 49 49 49 50 50 50 53 58 59 64 70 70 71 71 73 74

2.3

Linstallation en production . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 2.3.2 2.3.3

2.4

Loutil dinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8

2.5

Options de conguration dans TYPO3_CONF_VARS . . . . . . . . . . . . . . 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6

2.6 2.7 2.8 2.9

S eparation du serveur de production et du serveur en ligne . . . . . . . . . . 2.6.1 Sauvegardes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ` jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mises a En cas de probl` eme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

TYPO3 pour les r edacteurs


3 TYPO3 pour les r edacteurs 3.1 3.2 Le r ole du r edacteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acc eder au syst` eme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 3.2.2 2 Conguration du navigateur . . . . . . . . . . . . . . . . . . . . . . Identication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75
77 78 79 79 79

Table des mati` eres

3.3

Interface utilisateur et modules . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 3.3.2 Zones de linterface utilisateur . . . . . . . . . . . . . . . . . . . . . Modules principaux et sous-modules un aperc u . . . . . . . . . . .

80 80 83 91 91 92 95

3.4 3.5

Le module utilisateur centre de t aches comme centre de communication 87 Les pages, r eceptacles de contenu . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 3.5.2 3.5.3 l Structure dun site, arborescence et e ements de contenu . . . . . . . diter de nouvelles pages . . . . . . . . . . . . . . . . . . . . Cr eer et e Diff erents types de pages . . . . . . . . . . . . . . . . . . . . . . . .

3.6

Insertion d el ements de contenu dans TYPO3 . . . . . . . . . . . . . . . . . . 99 dition de nouveaux e l 3.6.1 Cr eation et e ements de contenu . . . . . . . . 101 3.6.2 Types de contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Gestion des ressources dans larborescence des chiers . . . . . . . . 115 Ressources dans TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 3.7.1 3.7.2 Ins erer des ressources dans une application . . . . . . . . . . . . . . 116 Edition frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Le Rich Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 3.10.1 Sc enario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 3.10.2 Cr eer larborescence des pages . . . . . . . . . . . . . . . . . . . . . 124 3.10.3 Presse-papiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 3.10.4 Editer des champs s electionn es . . . . . . . . . . . . . . . . . . . . . 127 3.10.5 Raccourcis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 3.10.6 Aide au niveau du contenu . . . . . . . . . . . . . . . . . . . . . . . 130 3.10.7 Restaurer/ editer lhistorique . . . . . . . . . . . . . . . . . . . . . . . 132 3.10.8 Multilinguisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

3.7

3.8 3.9

3.10 Travailler efcacement avec TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . 123

TYPO3 pour les administrateurs


4 TYPO3 pour les administrateurs 4.1 4.2 4.3

137
139

T aches et objectifs de ladministration . . . . . . . . . . . . . . . . . . . . . . 139 Planier et installer lenvironnement de gestion de contenu . . . . . . . . . . 141 Principes dorganisation des droits dacc` es dans TYPO3 . . . . . . . . . . . . . 142 4.3.1 4.3.2 Exemple pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Etapes de mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . 144 Cr eer des groupes dutilisateurs . . . . . . . . . . . . . . . . . . . . . 145 3

4.4

Administration des utilisateurs backend . . . . . . . . . . . . . . . . . . . . . 144 4.4.1

Table des mati` eres

4.4.2 4.5 4.6 4.7 4.8

Cr eer des comptes utilisateurs . . . . . . . . . . . . . . . . . . . . . . 150

` laide du module Outils Administration Administration des utilisateurs a des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Droits dacc` es au niveau de la page . . . . . . . . . . . . . . . . . . . . . . . . 153 Edition frontend pour utilisateurs backend . . . . . . . . . . . . . . . . . . . 155 TScong options et interface . . . . . . . . . . . . . . . . . . . . . . . . . . 157 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 Assistant TSCong : consulter les propri et es TypoScript . . . . . . . . 157 TSCong utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 TSCong page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Ajustement du Rich Text Editor . . . . . . . . . . . . . . . . . . . . . 162 Le module Web Info Conguration TS de la page . . . . . . 167 Conguration dun workow . . . . . . . . . . . . . . . . . . . . . . 168 Exemple : workow dActualit es . . . . . . . . . . . . . . . . . . . . . 168

4.9

Cr eer des Workows simples . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 4.9.1 4.9.2

4.10 Proc edures et actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 4.10.1 Types dactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 4.10.2 Exemple : action pour cr eer des utilisateurs . . . . . . . . . . . . . . 172 4.11 Administration des utilisateurs frontend . . . . . . . . . . . . . . . . . . . . . 175 4.11.1 Cr eation de groupes dutilisateurs . . . . . . . . . . . . . . . . . . . . 175 4.11.2 Cr eation de comptes utilisateurs . . . . . . . . . . . . . . . . . . . . 175 4.11.3 Identication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 l 4.11.4 Assigner des pages et des e ements de contenu . . . . . . . . . . . . 176 4.11.5 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.12 Statistiques et logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.12.1 Le module Web Info . . . . . . . . . . . . . . . . . . . . . . . . . 178 4.12.2 Int egration dAWStats . . . . . . . . . . . . . . . . . . . . . . . . . . 178 4.12.3 Analyse des chiers journaux . . . . . . . . . . . . . . . . . . . . . . 179 4.12.4 Logs frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 4.12.5 Le module V erication BD . . . . . . . . . . . . . . . . . . . . . . . 180 4.13 TYPO3 et le syst` eme de cache . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.14 Digital Asset Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 4.14.1 T aches et buts du DAM . . . . . . . . . . . . . . . . . . . . . . . . . . 184 4.14.2 Int egration dans TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . 185 4.14.3 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 4.15 Administration : lavenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 4

Table des mati` eres

TYPO3 pour les d eveloppeurs


5 TypoScript 5.1 5.1.1 5.1.2 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9

193
195

Le r ole du d eveloppeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Le processus de mise en uvre . . . . . . . . . . . . . . . . . . . . . 195 Pr erequis et vue densemble . . . . . . . . . . . . . . . . . . . . . . . 196 Quest-ce que TypoScript ? . . . . . . . . . . . . . . . . . . . . . . . . 197 TSref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Digression : TypoScript et PHP . . . . . . . . . . . . . . . . . . . . . . 199 Gabarits TypoScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Hello World! Le premier gabarit TypoScript . . . . . . . . . . . . . 203 Cascade de gabarits . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Enregistrements de gabarits . . . . . . . . . . . . . . . . . . . . . . . 206 Constants et Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 ements et concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 El

TypoScript Principes de base . . . . . . . . . . . . . . . . . . . . . . . . . . 197

5.2.10 La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 5.2.11 Ordre de traitement . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 5.2.12 Lembo tement dobjets . . . . . . . . . . . . . . . . . . . . . . . . . 223 5.3 Objets, fonctions et types de donn ees TS . . . . . . . . . . . . . . . . . . . . . 225 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7 5.5 5.5.1 5.5.2 Types de donn ees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Le concept denveloppe . . . . . . . . . . . . . . . . . . . . . . . . . 227 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Objets de contenu (cObjects) . . . . . . . . . . . . . . . . . . . . . . 229 Objets de premier niveau . . . . . . . . . . . . . . . . . . . . . . . . 237 Info/Modify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Assistant TS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 TypoScript Object Browser . . . . . . . . . . . . . . . . . . . . . . . . 242 Template Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Constant Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Panneau dAdministration . . . . . . . . . . . . . . . . . . . . . . . . 251 Import et export de pages TYPO3 . . . . . . . . . . . . . . . . . . . . 252 content (default) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 styles.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 5

Outils de d eveloppement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Gabarits standards (gabarits statiques) . . . . . . . . . . . . . . . . . . . . . . 255

Table des mati` eres

5.5.3 5.5.4 5.5.5 5.5.6 5.5.7 5.5.8 5.5.9 5.6

cSet.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 frameset;* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 template;* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 plugin.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 temp.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 content.tt_* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 (example) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

5.5.10 language.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Les bases de la mise en page Concepts de gabarit . . . . . . . . . . . . . . 264 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.7 5.8 5.9 Gabarits standards (gabarits statiques) . . . . . . . . . . . . . . . . . 264 Gabarits TypoScript purs . . . . . . . . . . . . . . . . . . . . . . . . . 265 Gabarits TypoScript et HTML . . . . . . . . . . . . . . . . . . . . . . . 265 Template Auto-Parser . . . . . . . . . . . . . . . . . . . . . . . . . . 266 TemplaVoil` a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Restitution du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Changer de gabarits avec type/typeNum . . . . . . . . . . . . . . . . . . . . 268 Cr eation de gabarits TypoScript . . . . . . . . . . . . . . . . . . . . . . . . . . 269 5.9.1 5.9.2 5.9.3 TypoScript et gabarits HTML . . . . . . . . . . . . . . . . . . . . . . . 272 Le Template Auto-Parser . . . . . . . . . . . . . . . . . . . . . . . . . 284 Gabarits TypoScript purs . . . . . . . . . . . . . . . . . . . . . . . . . 290

5.10 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 5.10.1 Le cObject HMENU propri et es g en erales des menus . . . . . . . . . 298 5.10.2 Menus de texte (TMENU) . . . . . . . . . . . . . . . . . . . . . . . . 300 5.10.3 Menus graphiques (GMENU) . . . . . . . . . . . . . . . . . . . . . . 304 5.10.4 Menus bas es sur des couches (TMENU_LAYERS/ GMENU_LAYERS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 5.10.5 GMENU_FOLDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 5.10.6 ImageMaps (IMGMENU) . . . . . . . . . . . . . . . . . . . . . . . . . 314 5.10.7 Menus JavaScript (JSMENU) . . . . . . . . . . . . . . . . . . . . . . . 317 5.10.8 Menus .special . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 5.11 TypoScript en d etail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 5.11.1 La fonction optionSplit . . . . . . . . . . . . . . . . . . . . . . . . . 322 5.11.2 Travailler avec des images et le GIFBUILDER . . . . . . . . . . . . . . 325 5.11.3 La fonction stdWrap . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 5.11.4 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 5.12 Travailler avec des cadres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 6

Table des mati` eres

5.12.1 Cr eation de cadres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 5.12.2 Le site exemple avec des cadres . . . . . . . . . . . . . . . . . . . . . 348 5.13 Futur et perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 5.13.1 XHTML et accessibilit e . . . . . . . . . . . . . . . . . . . . . . . . . . 353 5.13.2 Accessibilit e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 5.13.3 TemplaVoil` a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 6 Extensions 6.1 6.2 367

Aperc u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Le syst` eme dextensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 Structure dextensions . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Cl e dextension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Composants dextensions . . . . . . . . . . . . . . . . . . . . . . . . 369 Cat egories dextensions . . . . . . . . . . . . . . . . . . . . . . . . . 370 Installation: niveau syst` eme, global ou local . . . . . . . . . . . . . . 371 R epertoire dextensions . . . . . . . . . . . . . . . . . . . . . . . . . 371 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Liste des extensions disponibles . . . . . . . . . . . . . . . . . . . . . 374 Importer des extensions du r epertoire . . . . . . . . . . . . . . . . . 375 Le Kickstarter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 379

6.3

Gestionnaire dextensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 6.3.1 6.3.2 6.3.3

7 D eveloppement dextensions 7.1 7.2

Un compteur de visiteurs en 20 minutes . . . . . . . . . . . . . . . . . . . . . 380 Assistant dextensions : le Kickstarter . . . . . . . . . . . . . . . . . . . . . . . 387 7.2.1 7.2.2 7.2.3 7.2.4 D enition dune cl e dextension . . . . . . . . . . . . . . . . . . . . . 388 Composants de Kickstarter . . . . . . . . . . . . . . . . . . . . . . . . 388 Structure dune extension . . . . . . . . . . . . . . . . . . . . . . . . 390 R` egles de base des extensions . . . . . . . . . . . . . . . . . . . . . . 392 Fonctions du gestionnaire dextensions . . . . . . . . . . . . . . . . . 393 Compte utilisateur TER . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Transfert dune extension vers le TER . . . . . . . . . . . . . . . . . . 396 Gestion dextensions TER . . . . . . . . . . . . . . . . . . . . . . . . . 397 Publication de documentation . . . . . . . . . . . . . . . . . . . . . 398 Structure du framework . . . . . . . . . . . . . . . . . . . . . . . . . 400 7

7.3

Gestion dextensions pour les programmeurs . . . . . . . . . . . . . . . . . . 393 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5

7.4

Le framework TYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 7.4.1

Table des mati` eres

7.4.2 7.4.3 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.4.9

Conventions d ecriture

. . . . . . . . . . . . . . . . . . . . . . . . . 401

Structure des r epertoires . . . . . . . . . . . . . . . . . . . . . . . . . 402 Biblioth` eques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 LAPI dextension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Structure de base de donn ees . . . . . . . . . . . . . . . . . . . . . . 410 Base de donn ees, TCA et TCEForms . . . . . . . . . . . . . . . . . . . 414 Flexforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 TYPO3 Core Engine (TCE) . . . . . . . . . . . . . . . . . . . . . . . . 422

7.4.10 SQL et tables d enies dans le TCA . . . . . . . . . . . . . . . . . . . . 425 7.4.11 Utilisateurs, sessions et identication . . . . . . . . . . . . . . . . . . 426 7.4.12 Programmation TYPO3 et plate-forme . . . . . . . . . . . . . . . . . 429 7.4.13 Multilinguisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 7.4.14 Codage des caract` eres . . . . . . . . . . . . . . . . . . . . . . . . . . 433 7.5 Programmer dans le frontend : les principes . . . . . . . . . . . . . . . . . . . 438 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.5.8 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.6.5 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.8 7.8.1 8 Frontend : restitution du contenu . . . . . . . . . . . . . . . . . . . . 438 API frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 TypoScript frontend (TSFE) . . . . . . . . . . . . . . . . . . . . . . . . 440 cObject, tslib_cObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Restitution des cObjects par PHP . . . . . . . . . . . . . . . . . . . . 444 tslib_pibase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Liens et param` etres dans les plugins . . . . . . . . . . . . . . . . . . 446 USER, USER_INT, cache et param` etres . . . . . . . . . . . . . . . . . 448 Bordures d el ements de contenu . . . . . . . . . . . . . . . . . . . . 453 ` rebours (TypoTag) . . . . . . . . . . . . . 457 La balise Typo de compte a ` rebours en JavaScript . . . . . . . . . . . . . . . . 461 Balise de compte a Int egration de scripts PHP externes . . . . . . . . . . . . . . . . . . . 465 Portage de script PHP . . . . . . . . . . . . . . . . . . . . . . . . . . 470 Structure dun module . . . . . . . . . . . . . . . . . . . . . . . . . 476 Module: framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Modules : script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Module principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 Fonctions de sous-modules . . . . . . . . . . . . . . . . . . . . . . . 482 Outils Derni` eres modications . . . . . . . . . . . . . . . . . . 482

Programmation frontend : exemples . . . . . . . . . . . . . . . . . . . . . . . 453

Programmation du backend : principes . . . . . . . . . . . . . . . . . . . . . . 476

Programmation backend : exemple . . . . . . . . . . . . . . . . . . . . . . . . 482

Table des mati` eres

7.8.2 7.8.3 7.9

Fonction de sous-module Web Fonctions Assistants . . . . . 494 Menu contextuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504

7.8.4 Habillages Changer lapparence du backend . . . . . . . . . . . . . 507 Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 7.9.1 7.9.2 7.9.3 Mise en uvre des services . . . . . . . . . . . . . . . . . . . . . . . 510 D evelopper des services . . . . . . . . . . . . . . . . . . . . . . . . . 512 Conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518

7.9.4 Introduction dun nouveau type de service . . . . . . . . . . . . . . . 519 7.10 XCLASS : modication et extension de classe . . . . . . . . . . . . . . . . . . 519 7.11 TYPO3 et autres langages de programmation . . . . . . . . . . . . . . . . . . 521 7.12 Outils pour le d eveloppeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 7.12.1 ExtDevEval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 7.12.2 D ebogage avec debug() . . . . . . . . . . . . . . . . . . . . . . . . . 522 7.12.3 D ebogage avec t3lib_div::devLog() . . . . . . . . . . . . . . . . . . . 524 7.12.4 FE Debug/Info output et BE Env-Info . . . . . . . . . . . . . . . . . . 526 7.12.5 Environnements de d eveloppement PHP . . . . . . . . . . . . . . . . 527 Index 529

Pr eface de Kasper Sk arhj


There is a picture of a child standing on the shelf next to me here in my ofce. It was in my grandmothers possession until she moved to an old peoples home. The boy in the image holds an object in his hand while looking at the camera, interrupted from his investigations by the photographer. I dont have kids yet myself so . . . the boy is me as a three-year old. The picture fascinates me because it helps me to understand myself and Gods design of our creative souls. It rips me out of TypoScript, PHP variables and foreach-loops for a moment and puts a smile on my face. The picture captures the essence of my personality, which has always been curious and creative; from building playhouses on my uncles farm, shooting VHS-movies as a teenager, wiring up a house automation system to, well, programming a little CMS tool which I accidentially needed in the early days of the passion we all share; the modern Internet.

Opening the playground


Creativity denes a lot of who I am. TYPO3 has been the output valve of this energy. It is the Very best of album from my life until now, even with all the quirks it has. I love TYPO3 because I know it is an authentic expression of my creative pulse. But how did it ever come this far? Lets turn back the clock to 1997 when I began to study at the Technical University of Denmark. I think after 5 minutes at the introduction course I had spotted another restless soul in the class for whom Taylor polynomials had no signicance for the greater meaning in life. We teamed up, I created my own little company (Curby Soft Multimedia) and college was where I slept the extra hours I missed at night. Back then I was extremely inspired by David Siegels visions for webdesign ([Link]). In fact my creativity valve pointed in the visual direction back then; my team mate handled the Linux-stuff, I just juggled around with the colors.

The binary brainwash


The CMS mantra of separating content from code was not the brilliant idea of any one individual, but what happened to all of us at that time; everyone realized that customers needed a CMS tool to maintain their websites. In late 1997 we began the rst prototypes of what some years later became TYPO3. Unfortunately my team mate didnt deliver the technical work and my proactive gene autoresponded by closing down Photoshop and starting up Homesite, a webbrowser pointed at [Link] and the installation of a RedHat 6.2 11

Pr eface de Kasper Sk arhj

server; one week later I had the minimum knowledge required to make lookups in MySQL and present the content in an HTML page. And I hated it. At the time in 1998 I met another guy with a lot more marketing experience than myself. He wanted to commercialize the early version of TYPO3. So we set up the [Link] company together, hired employees and even managed to team up with Saatchi & Saatchi in Copenhagen. But I had one condition; that I would be relieved from my role as the programmer behind the CMS as fast as possible! It was Too much work and no fun makes Jack a dull boy for me and my inside was a desert. I was crying out for colors, poetry and visual universes to explore. I hated programming, it dried me out and I had accepted it only as a temporary necessity. Maybe this should scare me, but guess what; now the pain of programming is gone! Slowly I was swallowed by PHP until the toxid inuence of booleans and arrays made me forget my visual gold age; the re-coding of a designer into a programmer was successfully complete. But even now, the spring of creativity couldnt be suppressed. Rather than being expressed in visual terms it permeated the making of TYPO3; programming is an art! Programming contains love and passion for beauty just as much as photography or oilpainting does.

Goodbye World, Hello GPL


When I realized that running a company like Supersh was not my cup of tea, nothing mattered more than my creation, TYPO3. I left the company with the rights to the code, my partner kept the rest. I felt I had passed some kind of Point of no Return and all I wanted was to nish my work. For what purpose? That question wasnt even asked at the time. I agreed with myself to do just enough freelance work to live and put the rest of my time into nishing TYPO3 over the next six months (its funny to look back at the repeatedly naive time-estimates I have made in the past and still do :-). During my short irtation with the commercial production of TYPO3, I realized that commercial pressures tend to corrupt the quality of the product; ready or not, it has to go on the shelf to create income. That was one thing I couldnt accept as an artist; I believed in quality, and compromise in this area was no option to me. On the other hand, with no company behind I could probably sell my CMS solution to only a handful of local companies. Compared to the perspectives of sharing TYPO3 with a whole world and thereby helping thousands of people, the latter would far outweigh the joy of making a bit of money locally in Denmark even if I never saw a single Euro coming back. So I chose the GPL way.

Living waters
Giving away TYPO3 for free also has a strong root in my faith in Jesus. I have been raised in a Christian family and always believed in God. But passionate faith cant be inherited and my most recent conversion happened after having worked 16 hours a day for a long time. I think many of you reading this book know the situation and how passion can drive you into intense work. It can be fun and rewarding. But in the long run it dries you out inside, and eventually you ask yourself: what is the point, what am I living for? This is where some people burn out and get depressed. For me it triggered the logical question; If I really believe in the Bible, why not open it and read about what a balanced life should be like? 12

Pr eface de Kasper Sk arhj

This had a dramatic impact on my life. I began to take my faith seriously and re-align my actions with my beliefs. I met my wife, Rie. And I discovered my identity and some personal gifts, so I could understand my mission in life. I also thought about how you could live in a Christian way in the modern world. I read feed the hungry and found that a useful tool like TYPO3 would be just that. I read love your neighbour and found that sharing TYPO3 as the best I had would be an act of love. I read seek and you shall nd and thought that TYPO3 could be just such a reward for those whose who dare to search for alternatives. I read you got it for nothing, give it for nothing and thought that TYPO3 was possible through a talent I could only attribute to God, so what would be lost by giving it away?

Reasons to believe
Mixing TYPO3 with Jesus must seem strange to most of you. Why would an apparently intelligent guy believe in something fuzzy like God? But in fact I think programmers have nothing but good reasons to conclude that some kind of higher intelligence must exist. Every day I spend hours writing characters carefully combined into a computer program. I know that a single misplaced byte will make TYPO3 fail to run. I also know that sometimes I need to make an internal redesign which does not add new functionality to TYPO3, but merely opens the possibility of further development. And who would believe me if I claimed to have created TYPO3 by repeatedly combining random bytes and trying to execute them until something useful came out even if doing this a trillion times? TYPO3 required conscious, intelligent design! I have to admit that the complexity of life points to something outside the universe itself. It doesnt put a name tag on who is behind it all, but there are good reasons for believing in a mastermind.

The 24/7 lane


I declare that I am not a perfectionist. Perfection is not obtainable for humans, it is an ideal. And although the ideal of perfection is our beacon of light, we have to settle for less. What is obtainable is completeness. Completing what you have started is what gives the rst step you took a meaning. TYPO3 is my baby, it takes enourmous amounts of my time and often it consumes most of my awareness. When people ask me about TYPO3 and my own working life, I ask them to think about how it was preparing for exams or writing a large thesis at university. I believe that captures the intensity of how my life has been for the last four years, while TYPO3 has been a public project. It has been a privilege, fun, challenging all along but it has also worn me out. The most precise way to describe this state is to compare me with a fragile ecosystem. Even small changes in the environment can have great impacts on stability. Luckily I have developed an equally good understanding of my inner self and daily I try to walk the roads that motivate, rather than those which lead to despair. I have learned to focus on single issues, and suppress the view from the top of the mountain, which can be overwhelming. I have had to trust myself to be right many times, when it would have been fair to have doubts. And I have learned to strive for perfection but settle for something complete, and sometimes less. Its a strategy of survival, and without it the wave you are surng will swallow you. 13

Pr eface de Kasper Sk arhj

Growing a community
Its easy for me to remember for how long I have been married to Rie; I just think about when TYPO3 was rst released to the public that was also in August 2000 :-) Anyhow, the launch of TYPO3 to the public was supposed to be the end of the line but it became a whole new beginning! At the time I was exhausted after developing for a year on my own with no external response. I remember how lonely I felt. Publishing TYPO3 under GPL changed all this and the growing community became a solid source of power that changed the whole perspective of the project; suddenly my work mattered to someone! This was a fulllment of my personal prophecy that giving TYPO3 away for free would be much more valuable than selling licenses to local customers in Denmark. In addition the new situation greatly compensated for the loneliness in the ofce, since I now had virtual colleagues all around the globe! As an Open Source project, a small community quickly grew up around TYPO3, including Ren e Fritz (co-author of this book) as one of the very rst personalities on the scene. People contributed by setting up mailing lists, archives, providing support to others, creating small plugins, offering help to port TYPO3 to Windows and most signicantly, translating TYPO3 into their native languages. In April 2001 Rie and I conceived the idea of arranging a snowboard tour for the community and the next winter we did it! 25 people showed up and suddenly faces were attached to email addresses. The rst snowboard tour was an amazing event and Jan-Hendrik Heuing would still quote me for saying Im starting to believe in it back then. The year after we were 50 people snowboarding the slopes of Spl ugen, the next year we were more than 80 gathered in Kitzb uhel. More than anything else, the annual snowboard event has become the identity of the TYPO3 community.

Life in The Bazaar


The community of TYPO3 has grown at an exponential rate ever since. From being a small village where everyone knew each other on the mailing lists, it is now a big city with all that that entails. The manpower to help is far greater but the risk of getting impersonal is equally high. I often receive emails from people asking me support questions. I have to delete them atly. Even answering back that they should use the mailing list can become stressful to me and it really breaks my heart, because on the other hand I hold the ideal to be personal to everyone. But today I have to trust that the community will take good care of the newbee asking for guidance, while I optimize my time for general development which helps thousands, rather than a single person. The growth of the community also holds great developmental potential. Centered around code contributions via the Extension Repository, it is directly possible for anyone to contribute quality code to the system in a safe way, which protects the integrity of everyones work, as well as their motivation for contributing. My greatest vision for TYPO3 is extensions. I strongly believe they are the most perfect vehicle for bringing broad innovation to the project and offering maximum freedom for every developer to demonstrate his or her personal love for the art and beauty of coding web applications. This is the democracy of our community, everyone has equal chances. 14

Pr eface de Kasper Sk arhj

The challenge we face, as I see it, is to maintain the friendly atmosphere for which we have traditionally been known. We also have to maintain an effective framework for contributions from the growing number of code authors and apply more quality assurance to contributions of all kinds. In another eld we have realized the need to enforce the GPL license, as TYPO3 has become a popular software which obviously would be nice to re-brand and sell as ones own work. And nally, we have to ght the prejudiced minds that think Open Source has nothing to offer, since there is no fee to pay.

Credits
So many people truely deserve to be mentioned here. Unfortunately any attempt to list some names would exclude others equally merited. It is like inviting people to your wedding; Its not hard to invite your best friend, but it is hard to nd the criteria to decide who you will exclude, since there is not room for everyone. However it will be safe to mention my wife, Rie. She is my best friend, she loves me and challenges me. She prays for me and we share faith in God. She has followed TYPO3 all the way and supported every bit of it, often with personal sacrice when I was stressed out and mentally absent. She has accepted that she is second choice at times, and we all owe her big time for that. I want to mention Christian Jul Jensen (Denmark) who has been my good friend and mental support through the years, and also my right hand in professional matters. Christian has been my personal proxy for a while, taking the load from my shoulders as times changed and TYPO3 needed more of my dedication, rather than me helping old customers. His help has been priceless. Daniel Hinderink is another cornerstone in the history of TYPO3. Daniel is not only professional and very skilled. In adition to this he has been a showcase of proactivity to me. Daniel has taken the initiative and become the solution to problems, rather than a part of them. As the coordinator of marketing efforts for TYPO3, he carries a lot of the responsibility for the marketing success TYPO3 has had. But his initiatives have borne even more fruit in areas such as initiating innovation, team building and project organisation. Im impressed and thankful! Now the list of names would explode if I wanted to thank everyone who has contributed to TYPO3 with code, support or has otherwise been active in the community. Money is good but sharing your talents in the community is worth even more! Thank you so much everyone. I hope you can recognize the value of sharing the best you have got with the world, as my experience described in this preface has been, and I encourage you hang on in there! I have received an increasing amount of money donations during the time TYPO3 has been public. To everyone who has sent money I also want to say thanks from my heart. You have enabled me to spend more and more time on TYPO3 rather than doing irrelevant freelance work. Your donations prove how many small streams make one large ood which eventually can power an Open Source project into stable and continual development. I encourage you to stay true to your promises of nancial support so we can employ more people developing TYPO3 in the future! 15

Pr eface de Kasper Sk arhj

I also want to mention Dassault Syst` emes web department in Paris for their generosity and the inspiring friendship we have shared during my times in [Link] their belief in TYPO3 they have supported the development in adventurous ways. Finally I want to say Hello to all my future friends in the community! TYPO3 and the snowboard tours are a social pit-stop for me. These relations somehow make the hours behind the screen less lonely and in some cases sparks real-world friendships like the one I have been so lucky to establish with Robert Lemke from L uneburg.

Three men in blue overalls


To me the third snowboard tour in 2004 was a fantastic experience. I saw old friends again, I got my own snowboard this time, and I met a lot of new, inspiring people. And nally it demonstrated the powerful initiative of the self-ignited reworks that has popped up in the community. The men in the mirror nally jumped into their blue overalls and began work. Even though the history of TYPO3 is more than I could ever ask for, I always joked about the day when there would be a book about TYPO3 on the shelves in my local bookstore. Three talented community members have now made this dream come true. They asked for a book and found the answer to its creation in their own mirror reections. Im thrilled about the outcome and thankful for your contribution to the big picture of completeness we are striving for. Enjoy the book and welcome to the TYPO3 corner of cyberspace! kasper

16

Pr eface des auteurs


TYPO3 est un syst` eme de gestion de contenu Open Source qui rencontre un immense succ` es tre tr` et est r eput ee es puissant, mais aussi fort complexe. Dans ce livre, nous avons essay e de d ecrire TYPO3 dans les grandes lignes, fournissant ainsi un aperc u de son utilisation tant pour les r edacteurs que pour les administrateurs et les d eveloppeurs. En raison des nombreuses r ef erences et de la quantit e de didacticiels existants, nous avons soulev e la question de lapport potentiel de ce livre. Le ot de questions des listes email na t apparemment pas e e endigu e par la documentation existante. Apr` es une longue observation des probl` emes et des questions les plus caract eristiques, nous avons d ecid e d ecrire un livre ` trasefforc ant dillustrer les principes de TYPO3 et de d emontrer ses applications pratiques a tre consid vers des exemples. Ce livre ne doit donc pas e er e comme un substitut aux r ef erences ` d et aux didacticiels de [Link] ; il devrait plut ot faire ofce de lien servant a evelopper une image coh erente de ce quest TYPO3 pour les d ebutants, les utilisateurs et les d eveloppeurs, en leur permettant dy naviguer par eux-m emes. Le projet TYPO3 a t ach e de diviser tous les niveaux de documentation et de communication en trois groupes, an de simplier la navigation. Ce livre proc edera de m eme : 1. 2. 3. R edaction : d ecrit les outils du syst` eme pour la cr eation du contenu et d ecrit les m ethodes en vue de leur utilisation pratique. ` limpl Administration : inclut les t aches dorganisation n ecessaires a ementation de la gestion de contenu en utilisant TYPO3. D eveloppement : d ecrit la cr eation dun site Web et de son interface graphique en utilisant les gabarits, ainsi que la programmation de vos propres applications dans la structure de TYPO3.

Pour les responsables qui ne sont pas encore familiaris es avec la Gestion de Contenu, et avec la Gestion de Contenu en Entreprise en particulier, nous proposons une introduction au d ebut de ce livre ; tout au long de louvrage, nous revenons r eguli` erement aux points importants en rapport avec les divers domaines des t aches mises en place au sein de lentreprise. Les chapitres 1 et 2 introduisent les bases th eoriques de la gestion de contenu. Dans ce vidents, et, a ` partir de l` tacontexte, les avantages fournis par TYPO3 deviennent e a, nous e blissons des bases an de vous permettre de prendre des d ecisions concernant son utilisation strat egique. Par ailleurs, ces chapitres introductifs donnent aux lecteurs d epourvus de connaissances ant erieures sur le sujet une description de celui-ci, en pr esentant les termes 17

Pr eface des auteurs

et les concepts les plus importants. Cet expos e est suivi du d etail de linstallation et de la conguration de TYPO3. Dans le chapitre 3, nous faisons une d emonstration du fonctionnement du syst` eme en nous servant de situations concr` etes de production de contenu. Un outil complexe doit prouver sa ` la facilit valeur dune certaine fac on, gr ace a e de prise en charge de son interface. Apr` es avoir pr esent e les options de TYPO3 et leurs fonctions, la section se cl ot sur un exemple pratique de travail effectif avec TYPO3. Le chapitre 4 couvre ladministration du syst` eme, puis les adaptations aux conditions et aux proc ed es d enis par les producteurs dans leur travail avec le syst` eme. En proc edant de la sorte, nous montrons par des exemples comment les moyens disponibles simbriquent, et comment ils sont utilis es en pratique. ` lutilisation de TYPO3. Commenc Le chapitre 5 d ecrit la production de sites Web gr ace a ant par linstallation, nous discutons ensuite de la programmation des gabarits avec TYPO3 et passons en revue les diff erentes m ethodes disponibles. Dans les chapitres 6 et 7, nous pr esentons linterface dextension de TYPO3, le Syst` eme Extensions, d ecrivant les bases et les fac ons de d evelopper vos propres extensions fonctionnelles dans la structure de TYPO3. Ici, nous pouvons observer, du point de vue du d eveloppeur, lint egration avec les fonctions du noyau et avec les diff erentes parties de larchitecture de tre e tendues. TYPO3 qui peuvent e Le texte tout entier comporte des notes de bas de page et ce que nous appelons des r ef e` encourager la lecture et lapprofondisrences . Les notes de bas de page sont destin ees a sement de domaines qui ne rel` event pas directement des aspects techniques de TYPO3. Les r ef erences servent de lien entre le livre et [Link], ainsi que dautres ressources. En saisissant le code num erique sur le site [Link] ([Link] vous se` des sources rez amen e au sujet qui y correspond sur la documentation en ligne, ou bien a plus d etaill ees. De cette mani` ere, les r ef erences techniques et la documentation sont incluses ` jour autant que possible. Le lecteur a e galement lopportunit et sont mises a e de d ecouvrir les ressources th ematiques et structurelles en ligne, qui lui donnent ainsi un certain sens de lorientation dans la profusion toujours grandissante dinformations.

18

` propos de ce livre A
Ce dont vous avez besoin pour utiliser ce livre
Il vous sera n ecessaire davoir install e TYPO3 sur un serveur Web sur lequel sont d eploy es PHP4 et MySQL. Vous pourriez aussi avoir besoin doptions suppl ementaires telles que ImageMagick, GDLib/Freetype, zlib et un acc el erateur PHP comme Zend.

Conventions
` distinguer diff Dans cet ouvrage, vous trouverez divers styles de textes servant a erentes sortes dinformations. Voici quelques exemples, ainsi quune explication de leur signication. Il existe trois styles pour les lignes de code. Les mots du code sont indiqu es comme suit dans le texte : si nous souhaitons transformer la couleur du fond d ecran en un joli gris, nous pouvons aller dans typo3_styles et personnaliser base_properties . Si nous rencontrons un bloc de code, il appara tra comme suit :
$result = $this->query($query); $row = $this->fetch_array($result); $result = $GLOBALS[TYPO3_DB]->sql_query($query); $row = $GLOBALS[TYPO3_DB]->sql_fetch_assoc($result);

Lorsque nous voulons attirer votre attention sur une partie dun bloc de code, les lignes en question seront en caract` ere gras :
<body> <div id="rootline">rootline</div> <div id="header"> <div id="logo">logo</div> <div id="headerimagetext">texteimageentete</div> </div>

Les termes nouveaux et les mots importants sont pr esent es en italique. Les mots que vous voyez dans les captures d ecran dans les menus ou dans les bo tes de dialogue, par exemple ` l apparaissent ainsi dans le texte : en cliquant sur la touche Suivant, vous arrivez a ecran suivant. Toutes les entr ees et sorties de lignes de commande sont afch ees comme suit : 19

` propos de ce livre A
user@domain:/srv/www> ls -al htdocs/ total 38 drwxr-xr-x 6 user group 512 May drwxrwxr-x 14 user group 512 Jul -rw-r--r-1 user group 4987 May -rw-r--r-1 user group 608 May -rw-r--r-1 user group 8119 May ...

23 24 23 23 23

02:42 17:51 02:42 02:42 02:42

. .. [Link] [Link] [Link]

Les commentaires des lecteurs


Les commentaires de la part de nos lecteurs sont toujours bienvenus. Faites-nous savoir ce que vous pensez de ce livre, ce que vous avez aim e ou ce que vous navez peut- etre pas aim e. Les critiques de nos lecteurs sont importantes pour nous, dans la mesure o` u nous pouvons alors d evelopper les sujets les plus pertinents pour vous. ral, vous pouvez simplement poster un email a `Pour nous envoyer un commentaire g en e ladresse typo3@[Link], en vous assurant que vous mentionnez bien le titre du livre et lobjet de votre message.

T el echarger le code exemple pour le livre


Visitez le site [Link] et tapez le code 11781 dans le champ Re` la page du livre. Vous y trouverez des liens vers les chiers du code eder a cherche pour acc source des exemples du livre et vers dautres ressources. chargeables contiennent des instructions quant a ` leur utilisation. Les chiers t ee

Errata
Bien que nous ayons pris le plus grand soin pour assurer lexactitude du contenu du livre, des erreurs peuvent toujours se produire. Si vous d ecouvrez une erreur dans lun de nos livres une faute dans le texte ou dans le code nous vous serions reconnaissants cela peut etre pargner une certaine frustration aux de nous le signaler. En agissant de la sorte, vous pouvez e galement a ` am autres lecteurs, et vous nous aidez e eliorer les versions suivantes de ce livre. ` ladresse typo3@[Link]. Apr` Si vous trouvez des erreurs, signalez-les par mail a es les ` la liste existante. Cette liste peut e tre consult avoir v eri es, nous ajouterons ces errata a ee en consultant la page du livre sur le site [Link]

20

Introduction

1
1.1 Historique

Introduction

t ` Ce livre est bas e sur la version originale allemande, dont diff erentes parties ont e e mises a ` plusieurs reprises, a ` cause de changements effectu jour a es sur le noyau de TYPO3 dans ses deux derni` eres versions (3.7.0 et 3.8.0). Les auteurs aimeraient remercier tous leurs lecteurs pour leurs nombreux commentaires avertis, leurs conseils, et, bien s ur, pour le succ` es consid erable qua rencontr e louvrage. ` commencer par Kasper Nous voudrions aussi remercier la communaut e qui nous soutient, a ` des Sk arhj, les membres de lassociation TYPO3, ensuite toutes les personnes appartenant a ` des listes mail, et enn aux prestataires de service qui nous aident. groupes dutilisateurs, a

Kasper Sk arhj, n e en 1976, travaillait d ej` a depuis la n 1997 sur lun des tout premiers ` Copenhague. Apr` syst` emes de gestion de contenu pour la jeune entreprise Supersh a es ` la conf ` San Francisco, un deux ann ees de d eveloppement, un voyage a erence de Seybold a ` vocation pratique, et plusieurs rencontres (avec le gourou certain nombre de projets a 23

Chapitre

1 Introduction

dInternet David Siege), Kasper se rendit compte que Supersh n etait pas vraiment lenvi` d ronnement ad equat ou id eal pour continuer a evelopper TYPO3. Ceci sexplique en partie par le fait que Supersh sorientait dans une nouvelle direction ` de quant au type de service fourni. De plus, il y avait une raison qui nest que trop famili` ere a nombreux d eveloppeurs de logiciels : la pression des d elais pour sortir de nouvelles versions en ` donner plus dimportance aux aspects visibles vue du prochain salon, et la tendance g en erale a ` n ` long terme, sont plus importants quand il sagit de la et a egliger les aspects invisibles, qui, a qualit e. Les cons equences que Kasper tira de cette situation ne sont pas parmi les plus habituelles : alors que la plupart des d eveloppeurs dOpen Source de la premi` ere g en eration grandissaient tant un exemple de premier plan dans un environnement universitaire Linus Torvalds en e ` la s ` laquelle il e tait de plus , Kasper d ecida de renoncer a ecurit e dune entreprise orissante, a ` plein temps sur sa conception du syst` associ e, pour travailler a eme de gestion de contenu. Un ` la mise en uvre de cette conception, la version an plus tard, s etant consacr e uniquement a 1.5 t son apparition. C etait en juillet 2000. Le d eveloppement de TYPO3 resta un one-man show jusquen juillet 2002, avec cet avan` un tr` tage crucial que la qualit e et la coh erence de lensemble demeur` erent a es haut niveau. Il y avait un d esavantage : la progression du d eveloppement et un certain nombre d el ements ` travers le chas de laiguille Kasper . Apr` devaient, en quelque sorte, passer a es de nombreuses discussions avec les membres de la liste mail, suivies par une phase de travail fr en etique, Kasper publia une nouvelle version en 2002, la version 3.5b1, qui, avec son gestionnaire dextension, transforma imm ediatement TYPO3 en un syst` eme modulaire. Depuis, la communaut e a continuellement publi e de nouvelles extensions, permettant d elargir rapidement le champ dapplication de TYPO3. t Par cons equent, des groupes de travail ont e e form es pour aborder tous les aspects de TYPO3. Kasper Sk arhj est au cur du projet et est toujours responsable de la mise en circulation. Il ` la r travaille personnellement a esolution dun certain nombre de probl` emes. Il ne faudrait pas oublier que son engagement d epend essentiellement de la question sui conomiquement viable de se concentrer sur ces sujets ? Cest pourquoi vante : pour lui, est-ce e ` de grands projets commerciaux et les prestations de services effectu ` les contributions a ees a ` pouvoir payer ses ces occasions, sont cruciales pour le projet TYPO3 : an quil continue a sp ecialistes les plus importants.

R ef erence

314624

1.2 Quest-ce quun CMS ?


Les syst` emes de gestion de contenu sont devenus incontournables pour cr eer et mettre en ligne du contenu sur Internet et les intranets. On appelle g en eralement les syst` emes de logiciel de ce domaine Web Content Management Systems (WCMS), ou Content Management Systems (CMS). Lorsquils sont int egr es dans une approche globale de linformation depuis la gestion des documents, jusqu` a la publication sur Internet, en passant par limpression, on parle de gestion professionnelle de contenu. 24

1.2 Quest-ce quun CMS ?

1.2.1 S eparation du contenu de la forme


Un principe de base est la s eparation du contenu de la forme. En pratique, cela signie que la d enition de la mise en forme est sauvegard ee ind ependamment du contenu en tant que tel, que ce dernier soit sous forme de texte, dimages ou dautres formats. Ce principe comporte de nombreux avantages quand il sagit de changer la mise en forme, ou de la prot eger contre tre e dit des auteurs de contenu proliques. Alors que le contenu peut e e par les auteurs sans tre aucune inuence sur les d etails de lafchage, la d enition de la mise en forme peut e modi ee de fac on ind ependante, permettant donc des changements effectifs darchitecture, m eme au travers de tr` es grands sites Web.

1.2.2 Cycle de vie du contenu


tapes de son Les syst` emes de gestion de contenu accompagnent le contenu dans toutes les e diteurs, en passant par lorganisation des ressources, cycle de vie, depuis sa cr eation avec les e ` larchivage des e l jusquau d eploiement en ligne lors de la publication, et enn a ements de contenu.
Figure 1.1: Cycle de vie du contenu

Durant la phase de cr eation, linformation est rassembl ee et organis ee globalement. Apr` es la crit, structur planication, linformation pertinente est mise par e ee quand cest possible, et galement l divis ee en composants. Cette phase comprend e edition ainsi que des am eliorations didactiques ajout ees par les auteurs. L etape dorganisation, ou de pr eparation, organise et sauvegarde le contenu selon un sch ema ` la fois aux r qui convient a esultats et aux sources dinformation. De plus, on d enit et on attribue ici les droits dutilisateurs. ` la distribution et a ` la pr La publication a trait a esentation du r esultat sous la forme dun site Web ou dun produit, imprim e ou sous un autre format. ` se pr Les archives sauvegardent le contenu de mani` ere a eter au mieux aux recherches, aux ` la r statistiques et, au bout du compte, a eutilisation. 25

1 Introduction

1.2.3 Syst` eme modulaire


TYPO3 est un syst` eme modulaire organis e en plusieurs couches. Depuis la sauvegarde jusquau d eploiement, ces couches divisent le syst` eme en modules. Concernant la sauvegarde, vous disposez dune API pour connecter TYPO3 aux diff erentes bases de donn ees. Vous pouvez aussi enregistrer linformation dans des chiers XML en utilisant les fonctions de la couche dabstrac tendre le noyau du tion de la base de donn ees. Par ailleurs, TYPO3 a d eni une interface pour e logiciel, nomm e pour cette raison le syst` eme dextensions . Ces extensions se connectent ` TYPO3 via le gestionnaire dextensions, qui sert aussi denvironnement de d a eveloppement (IDE). ` tous les niveaux et toutes les interfaces Les extensions peuvent ajouter des fonctionnalit es a ` jour ais du logiciel, sans en changer le noyau, et assurant donc des mises a ees et la stabilit e du code source. Tout comme les vendeurs s erieux de gestion de contenu de logiciels, les syst` emes Open Source et TYPO3 en particulier, ont adopt e cette approche modulaire, m eme ` des concepts techniques diff sils recourent a erents, selon lAPI disponible.

1.2.4 Groupe cible


Sur une p eriode relativement courte, TYPO3 a pris, tr` es rapidement, de lampleur. En termes de quantit e, le groupe dutilisateurs le plus repr esentatif est constitu e dentreprises de petite ou moyenne taille. En effet, la courbe dapprentissage et la puissance de TYPO3 constituent un ` son utilisation dans la sph` frein a ere priv ee.
R ef erence

027059

Les entreprises capables de sacquitter de leur droit dentr ee dans le monde de TYPO3, par le biais des services de sp ecialistes d ument quali es, peuvent, cependant, appr ecier les avantages dun logiciel libre en g en eral, et de TYPO3 en particulier. Les raisons les plus souvent invoqu ees comprennent la licence (GPL), la qualit e, la documentation consid erable, la communaut e qui saccro t rapidement, et les nombreuses recommandations de la part dentreprises et dorgani` la r sations renomm ees. Une s election de ces derni` eres est publi ee sur [Link], a ef erence ci-contre. Parmi les quelque 200 000 installations reprises dans le r epertoire dextensions de TYPO3 entre juillet 2002 et le d ebut de 2005, on trouve un grand nombre de noms bien connus et de ` TYPO3, prouvant la validit marques c el` ebres qui ont fait conance a e des syst` emes Open Source dentreprise en les utilisant dans leurs intranets et dans dautres applications critiques.

1.2.5 R ef erences TYPO3


R ef erence

589606

La liste des r ef erences dans [Link] pr esente une s election de projets types bas es sur TYPO3. Parmi les prestataires de services, il existe un grand nombre de noms r eput es venant dAlle galement beaucoup dentreprises de petite ou moyenne magne et du reste de lEurope, mais e ` un niveau technique avec de taille, qui voient l` a une opportunit e dentrer en comp etition a grands fournisseurs, proposant des prix attractifs et des d elais courts pour la r ealisation de projets.

26

1.3 La communaut e TYPO3

La licence GPL : GNU General Public License La licence publique g en erale GNU est la licence Open Source la plus largement utilis ee. Ce` provoquer des contradictions dans pendant, son contenu, apparemment simple, continue a diff erents pays et dans diff erentes l egislations. Une opinion l egale en suit une autre et, parce que le logiciel est distribu e gratuitement, des controverses apparaissent en ce qui concerne la ` propos des autorisations, et les int s ecurit e du consommateur, les r` eglements a er ets des programmeurs, qui peuvent sav erer signicatifs, selon le champ dapplication et dans la mesure o` u lutilisation du logiciel se r ev` ele critique pour lentreprise. Il est donc conseill e de se rensei` propos du contenu de la GPL et ses cons gner a equences l egales, dans le pays o` u le logiciel est utilis e. Quand cela se r ev` ele appropri e, les garanties offertes par une agence ou un prestataire ` la mise en uvre, doivent e tre de services techniques, qui prennent la rel` eve ou travaillent a r eglement ees. Les extensions rev etent un r ole particulier. Aussi longtemps quelles ne fonctionnent pas comme ` la GPL. des applications ind ependantes, elles sont sujettes, elles aussi, a Une fonction profond ement ancr ee dans le code source de TYPO3, qui est normalement d evelopp ee sous la forme dune extension, et qui nest pas juste une adaptation ou un script bas e sur un programme existant, est Open Source, et est elle aussi soumise aux conditions GPL. La licence GPL sp ecie que lauteur nest pas oblig e de publier, mais ne peut pas non plus emp echer la publication une fois quelle aura circul e et sera peut- etre arriv ee jusqu` a un client. ` de futures moLauteur ne peut pas non plus opposer des restrictions aux modications, ni a dications effectu ees par des tiers, une fois quils sont entr es en possession du code. conomiques, des probl` En ce qui concerne les int er ets e emes peuvent surgir concernant lutili diteurs habitu ` penser en termes de produits commerciasation de TYPO3, pour certains e es a lement viables. ` lesprit que TYPO3 a e t Mais, par analogie, il faut garder a e d evelopp e sans licence et sans co ut. De fait, la communaut e dans notre cas r eagit de deux fac ons diff erentes. ` l De nombreuses extensions ne sont pas publi ees ; sur les cl es dextension n ecessaires a echange via [Link], un cinqui` eme seulement sont des extensions publi ees. Ceci ninclut pas les nombreuses extensions qui ne sont pas enregistr ees, mais inclut en revanche beaucoup dautres inachev ees, et dautres trop sp ecialis ees pour justier leur publication. Il est certainement tr` es peu probable que des clients publient eux-m emes les extensions quils auraient obtenues dun prestataire. ` d Beaucoup de sp ecialistes se servent de plusieurs projets pour cr eer et contribuer a evelopper une extension, jusqu` a ce que leur investissement en temps et en connaissances soit r emun er e, et alors seulement ils publient leur travail, quand celui-ci est susceptible daccro tre leur renomm ee.

1.3 La communaut e TYPO3


La communaut e TYPO3, compos ee dutilisateurs et denthousiastes, grandit rapidement et devient de plus en plus internationale. 27

1 Introduction

Le noyau de la communaut e est repr esent e par des listes mail la liste mail anglaise principale ` laquelle on peut aussi sabonner via des newsgroups. R ` est la liste de r ef erence, a ef erez-vous a ` propos des listes mail. [Link] pour plus de d etails a La communaut e assure un support, comme dans la plupart des projets Open Source, en offrant une aide rapide et pratique, m eme pour les probl` emes plus compliqu es techniquement parlant, tant que les r` egles habituelles du choix de nom des sujets ainsi quune formulation pr ecise des questions sont respect ees. Il est important de lire les archives, les FAQ, et les docu` ne pas encombrer les listes avec des questions ayant ments daide aux d ebutants, de fac on a d ej` a rec u de nombreuses fois une r eponse, ce qui peut ennuyer les utilisateurs exp eriment es. Souvenez-vous que laide que vous recevez est volontaire et gratuite, et que vous ny avez pas automatiquement droit.
R ef erence

139514

Si quelquun a besoin dune plus grande disponibilit e, de mat eriel pour sexercer, ou bien a des ` poser, il peut entrer en contact avec lun des nombreux prestaquestions plus complexes a ` ladresse [Link]. Ces taires de services quon trouve dans la section Consultancies a t entreprises ont e e s electionn ees dapr` es la comp etence dont elles ont fait preuve dans leurs projets. Quelquun qui a d ej` a construit un savoir-faire pertinent en mati` ere de TYPO3 souhaitera peut tre se rendre utile en d e eveloppant davantage la documentation existante, ou en contribuant ` de telles contributions a ` tous les niveaux, au projet dune autre fac on. Le projet vit gr ace a de sorte que laide et le retour dinformation sont r eellement bienvenus, et font lobjet de longues discussions. Si vous d esirez faire cela, il est important davoir une impression g en erale t au pr ealable : quels sujets ont d ej` ae e discut es, et avec quels r esultats. Dans ce but, nous vous conseillons de visiter les archives des listes mail sur [Link], dans le champ Documentation Mailing-Lists. Selon le sujet, vous devrez peut- etre regarder dans les listes Developer , Marketing , ou une autre liste mail. ` lobjectif similaire, ou qui recoupe Ensuite, vous devrez vous assurer quil nexiste pas de projet a le v otre. Dans [Link], dans la section D eveloppement Projets, vous trouverez une liste de tous ` contacter. les projets en cours et des secteurs de travail, avec les partenaires a Lune des caract eristiques de TYPO3 et de la communaut e est que beaucoup des participants ont d ej` a fait connaissance, lors de la rencontre annuelle pour la plupart dentre eux, le TYPO3 ! Snowboard Tour , qui attire de plus en plus de participants chaque ann ee. En dehors des discussions, des soir ees de travail intensif et des nombreuses questions qui ` trouvent une r eponse, ainsi que des projets qui y sont lanc es, lobjectif est aussi dapprendre a galement conna tre les personnes qui se trouvent derri` ere les adresses mail, et bien entendu e dappr ecier les sports dhiver ensemble. Donc, quiconque souhaite combiner lapprentissage dun savoir-faire intensif avec des vacances trouvera difcilement une meilleure opportunit e v que cet e enement. De par lutilisation consid erable de TYPO3 dans des organisations et la tr` es large communaut e dutilisateurs, la premi` ere conf erence internationale devait bien avoir lieu un jour : ce fut Ty` Karlsruhe, en Allemagne. Pour plus dinformations, vous pouvez CON3, en septembre 2005, a visiter le site Web suivant : [Link]

R ef erence

424461

28

1.4 Lassociation TYPO3

1.4 Lassociation TYPO3


En novembre 2004, un groupe issu de la communaut e TYPO3, y compris Kasper Sk arhj et dautres personnes ayant contribu e au projet depuis longtemps, ont pr epar e et fond e une association appel ee lAssociation TYPO3. Son but principal est de soutenir le d eveloppement du noyau sur une base plus stable, et dam eliorer la transparence et lefcacit e de divers aspects du projet TYPO3.

1.4.1 Objectifs
Lorganisation d ev enements au b en ece de linformation et de la formation de ses membres La communication avec les membres et avec le grand public, en vue de promouvoir et ` lutilisation du logiciel TYPO3, pardaccro tre la connaissance et la comp etence relatives a ticuli` erement en vertu de son projet de site Web La formation et la certication, assurant la qualit e du service Favoriser le d eveloppement de TYPO3 Supporter ladaptation des logiciels internationaux standards au sein de TYPO3 La repr esentation des membres ` d Les relations publiques et les activit es qui contribuent a evelopper la connaissance et lutilisation du logiciel TYPO3.

membre et sinscrire 1.4.2 Etre


LAssociation TYPO3 compte deux types de membres : Membres actifs ` la fois Les membres actifs sont des personnes qui ont travaill e en accord avec TYPO3 et sont a d esireux et capables dassister aux assembl ees g en erales, o` u ils ont un droit exclusif de vote et de d ecision quant au futur de lAssociation. Les membres actifs sont nomm es en fonction de tre recommand leur m erite, et doivent e es par deux membres actifs, ou par un cinqui` eme de lassembl ee. Membres de soutien membre de soutien est possible pour tout le monde, mais requiert une inscription formelle. Etre LAssociation propose une che dinscription en ligne et un moyen de paiement des droits ` ladresse [Link] Les membres sont soit dentr ee en tant que membre a des personnes, soit des entreprises, et il leur est demand e de soutenir les buts et objectifs de ` travers leurs actions. lAssociation, a Tous les membres auront le droit de se r eclamer de leur qualit e de membre exclusivement, et t donc de soutenir TYPO3, uniquement si leur admission en tant que membres a e e accept ee. 29
R ef erence

394945

1 Introduction

Organismes et travail pratique LAssociation se compose des organismes suivants : Conseil (board) Le conseil est lorganisme ex ecutif qui assure la gestion quotidienne, les questions l egales et la comptabilit e. Assembl ee g en erale lit le conseil, contr LAG est la plus haute autorit e et e ole le travail de ce dernier et, dune fac on g en erale, d ecide de toutes les questions dimportance lors de son meeting annuel. ` tous les membres, mais seuls les membres actifs ont le droit de vote. LAG est ouverte a Comit es Les comit es sont les groupes qui effectuent le travail en tant que tel quand il sagit de discuter de lutilisation des fonds, de la communication au sein de la communaut e, v des formations, des e enements, et ainsi de suite. L egalement, ils sont nomm es par le conseil et lAG. Ils font des recommandations, qui sont ensuite ex ecut ees par le conseil.

30

Installation

Dans ce chapitre, nous abordons les diff erents types dinstallation de TYPO3 et leur champ tapes n ` leur mise en uvre. Si on se e dapplication. Nous d ecrivons ensuite les e ecessaires a ` linstallation de TYPO3 ne semblent au nombre dinstallations d ej` a existantes, les obstacles a pas infranchissables. Toutefois, les auteurs de cet ouvrage pourraient parler des heures durant voquant certains probl` de leurs premiers pas en e emes susceptibles de d erouter le d ebutant. ` votre disposition pour Pour terminer, vous trouverez un aperc u de quelques ressources mises a r esoudre les probl` emes que vous risquez de rencontrer.

2.1 Choix du paquetage TYPO3 et de la conguration du serveur


TYPO3 requiert simplement une base de donn ees et un serveur Web congur e avec PHP ; sur cette base, le mat eriel utilis e, le syst` eme dexploitation, le syst` eme de base de donn ees ainsi que le serveur Web sont choisis en fonction dun grand nombre de crit` eres, dont nous reprenons ici les plus importants. 31

Chapitre

2 Installation

Le choix du syst` eme dexploitation est d eterminant. TYPO3 fonctionne sur la plupart des syst` emes de type UNIX, ainsi que sur Windows. Il ny a pas de diff erence entre ces deux versions en termes de fonctionnalit es de base, m eme si certaines extensions exigent des programmes UNIX. Consultez la documentation sur les extensions concern ees an de tenir compte de leurs restrictions. 1 ` jour Un des avantages techniques de lutilisation dun syst` eme UNIX est la rapidit e des mises a gr ace aux liens symboliques . 2 Savoir quel syst` eme dexploitation est majoritairement utilis e au sein de la communaut e dutilisateurs de TYPO3 est aussi un facteur important. La tendance, du moins en termes de quan` lusage des syst` tit e, est a emes Linux. D` es lors, le support et, pour certaines extensions, les nouveaux d eveloppements qui d ependent dun syst` eme dexploitation sont plus fr equents pour Linux. Sil ny a aucune contre-indication telle quune infrastructure d ej` a existante bas ee sur Windows ou votre (in-)exp erience , Linux est le meilleur choix pour lexploitation de TYPO3. Les chapitres suivants abordent de mani` ere plus approfondie le choix de logiciels et de mat eriel informatique en ce qui concerne le serveur, le syst` eme de base de donn ees, dautres logiciels utiles, et nalement, le choix du paquetage de TYPO3.

2.1.1 Mat eriel


Bas e sur PHP, TYPO3 requiert au minimum un mat eriel informatique supportant un serveur ` cet effet, il ne constitue Web. M eme si un vieux 286 avec 32MB de m emoire vive conviendrait a pas une plate-forme sufsamment puissante pour exploiter TYPO3. Le syst` eme doit avoir une m emoire vive de 512 MB ou plus an de fournir les performances requises. Si vous d esirez utiliser votre propre serveur, consid erez les facteurs suivants pour dimensionner votre mat eriel : Type dutilisation Le facteur d ecisif est la mani` ere dont linformation disponible sur votre site Web sera utilis ee : le site sera-t-il statique, en tout ou en partie ? D esirez-vous g erer un site portail ? Voulez-vous cr eer du contenu dynamique sur votre serveur Web ? Pr evoyez-vous de mettre en ligne une application telle quune boutique, des cartes virtuelles ou des forums ? La r` egle suivante pr evaut : lev au plus nombreuses sont les fonctions effectu ees par le serveur, au plus e es sont les besoins en mat eriel et les d epenses pour s eparer le syst` eme en ligne du syst` eme de production. Charge du serveur tre quanti Un certain nombre de param` etres peuvent e es : Combien dutilisateurs utiliseront le syst` eme simultan ement ? ` quelle vitesse (en secondes) une page doit-elle e tre servie par le serveur ? A
1 Indexed Search, par exemple, est un puissant moteur de recherche utilis e dans TYPO3 n ecessitant un logiciel UNIX pour indexer les documents. Il en est de m eme pour plusieurs fonctionnalit es de lextension DAM et pour les extensions qui manipulent le format PDF. 2 Sous Windows, linstallation du progiciel compl ementaire Junction permet dutiliser les liens symboliques. Voir R ef erence 394 945.

32

2.1 Choix du paquetage TYPO3 et de la conguration du serveur

tre d Combien de pages par heure et par mois doivent e elivr ees ? Quel est le volume mensuel de trac pr evu, en MB ou GB ? Il sera difcile de prendre une d ecision fond ee si ces grandeurs ne sont pas connues. Si vous avez des doutes, essayez de vous informer aupr` es des prestataires offrant des services semblables aux v otres an davoir une meilleure estimation. Il existe trois sc enarios typiques : ` moyenne 1. Charge faible a conomique justiant le recours a ` un serveur d Il sagit ici de sites nayant aucune raison e edi e. ` la fois dans le backend et 50 dans le Pour ces sites, on ne pr evoit pas plus de 10 visiteurs a frontend, une g en eration de page en 1,5 secondes maximum, pas plus de 100 pages d elivr ees par heure et moins de 100 000 pages servies par mois. En tout, le trac mensuel ne d epasse ` celui-ci sur plusieurs points, vous avez tout pas 5 GB par mois. Si votre prol correspond a ` s int er et a electionner un h ebergeur de qualit e, qui id ealement propose des solutions o` u TYPO3 est d ej` a pr e-install e. Si vous optez pour une solution o` u TYPO3 nest pas encore install e, assurez-vous dabord que les conditions dinstallation suivantes sont remplies : au moins 100 MB despace disque une base de donn ees MySQL ` partir de la version 4.3.x avec les biblioth` PHP a eques GDLib et Freetype ImageMagick acc` es via SSH ` ce stade, un avertissement simpose : depuis longtemps, la location dune infrastructure A ` bas prix pour des pour le Web ne requiert plus des montants astronomiques. Via des offres a serveurs d edi es, nimporte qui disposant de quelques euros peut mettre en place en moins ` Internet. La dun mois une offre de services en tant quh ebergeur ou de fournisseur dacc` es a connaissance et la comp etence en la mati` ere ne sont pas indispensables, ce qui aboutit parfois ` de f a acheuses cons equences. ` Internet est soumis aux m conomiques que tout autre Le secteur dacc` es a eme contraintes e secteur dactivit e, et de trop bas prix r esultent dun des points suivants : 1. Une mauvaise connaissance du mat eriel : quelquun daverti sait quune courte p eriode dindisponibilit e dun serveur peut d etruire le fruit dun long travail ; 2. Peu de frais en personnel : votre prestataire sous-traite son infrastructure chez un des grands fournisseurs du march e (ce qui implique peu de marge de manuvre pour votre prestataire) ; 3. Taille du prestataire (un grand prestataire pourra plus facilement engager des experts). Bien s ur, il est parfaitement justi e de rechercher loffre la plus avantageuse. cras ` un service optimal et a ` Seulement, avec des prix e es, vous ne pouvez pas vous attendre a une protection des donn ees respectant linstallation et le contenu de votre CMS. Par prudence, pour garantir un niveau de s ecurit e minimal (ainsi quun fournisseur qui est en bonne sant e nanci` ere, redevable contractuellement dindemnit es en cas de probl` eme), ` ces vous devriez payer un prix acceptable, cest-` a-dire un minimum de 25 euros par mois. A 33

2 Installation

` des h conditions, vous pouvez faire appel a ebergeurs de plus petite taille qui vous offrent un service able et personnalis e. Ind ependamment du budget de votre projet, exigez toujours une sauvegarde automatique, faites-en un pr ealable lors de la s election dun prestataire. `e lev 2. Charge moyenne a ee et Intranet Il est judicieux davoir votre propre serveur si votre application CMS en justie linstallation et lexploitation. Dans ce cas, le co ut de la location du serveur ou de la co-location devient marginal par rapport aux autres co uts du projet. tudes ont d tait consacr ` lachat Plusieurs e emontr e quune proportion de 35% des co uts e ee a ou la location dun serveur contre 65% pour la maintenance et les autres co uts associ es. Pour lintranet, vous navez pas dautre choix que davoir votre propre serveur. La question centrale est ici celle du dimensionnement. Avant toute d ecision, il est fortement conseill e de ` une e valuation des besoins, en tenant aussi compte de leur e volution (la mainteproc eder a nance de deux serveurs ne repr esente pas plus de 10% de travail suppl ementaire que pour un seul serveur). La formule la plus r epandue pour le calcul des co uts sur la dur ee de vie dun investissement, tre appel e co ut total de propri et e ou encore Total Cost of Ownership, en anglais (TCO), peut e par exemple pr esent ee comme suit : L iceberg du TCO Co uts apparents + investissement + achat de logiciels et de mat eriel + installation + mise en uvre + adoption du syt` eme + support + administration + formation + maintenance + degr e de non-utilisation = co ut total de propri et e Ce mode de calcul sest consid erablement afn e au cours du temps 3 , mais pour un exemple valuation des co ou pour une premi` ere e uts dune op eration, la liste reprise ci-dessus suft.
3 cf. Bensberg/Dewanto : TCO VOFI for eLearning Platforms , [Link] docs/[Link]

Co uts cach es

34

2.1 Choix du paquetage TYPO3 et de la conguration du serveur

Si, en fonction de votre calcul, vous optez pour un serveur d edi e, il est essentiel de clarier les ` jour, points techniques suivants : les performances du mat eriel, les possibilit es de le mettre a la disponibilit e de pi` eces de rechange, la strat egie de sauvegarde ainsi que la s ecurit e (droits dacc` es, etc.). lev 3. Charge e ee lev Pour une charge e ee, c.-` a-d. plus dun million de pages servies par mois, la solution standard est de combiner plusieurs serveurs en cluster . La motivation de ce choix est de r epartir la charge ainsi que dassurer une redondance du syst` eme. Suivant le r ole quon lui assigne, la ` laquelle fait face le serveur peut e tre d charge maximale a epass ee m eme avec un trac peu lev e e. De plus, certaines conditions dutilisation de lapplication par exemple dans un syst` eme informatique de gestion ne tol` erent aucune interruption. Les serveurs Web et les serveurs de tre administr base de donn ees peuvent aussi e es et dimensionn es s epar ement, en fonction de la ` supporter. Divers sc charge quils ont a enarios existent, allant de syst` emes de 10 serveurs Web Apache, install es chacun avec leur propre mat eriel et un serveur MySQL, jusqu` a des syst` emes compos es de 3 serveurs Apache et de 5 serveurs MySQL. Dans tous les cas, il est ici question de solutions sp eciques qui n ecessitent une planication et une impl ementation pr ecises, ainsi quun suivi constant.

2.1.2 Serveur Web


tre exploit En th eorie, TYPO3 pourrait e e avec Apache, IIS ou tout autre serveur utilisant PHP. La combinaison la plus utilis ee, en termes de quantit e, est la combinaison Apache-PHP. La version ` la rubrique de PHP et sa conguration ont une inuence sur TYPO3 ; ce ph enom` ene est d ecrit a Server Compatibility sur le site [Link] (cf. r ef erence).
R ef erence

504537

2.1.3 Base de donn ees


La base de donn ees standard pour TYPO3 est MySQL. Elle est rest ee longtemps la seule base de t donn ees support ee. Depuis lors, une couche dabstraction de base de donn ees (DBAL4 ) a e e introduite. Comme cette couche utilise un langage SQL compatible avec MySQL au lieu dun m etalangage, MySQL reste la solution la plus performante, puisque dans ce cas, les requ etes tre transform vers la base de donn ees ne doivent pas e ees. De plus, plusieurs extensions utilisent leurs propres requ etes. Des v erications sont donc n ecessaires au cas par cas si lon veut faire fonctionner une extension avec dautres bases de donn ees pour sassurer que le code g erant les requ etes reste compatible. Choisir un syst` eme SGBDR (Syst` eme de Gestion de Bases de Donn ees Relationnelles) autre tre prise avec pr que MySQL est une d ecision qui doit e ecaution ; au bout du compte, les co uts ` jour deviendront, a ` long terme, sup ` ceux dune installation dinstallations et de mises a erieurs a standard. Une variante int eressante de lutilisation dautres bases de donn ees est de combiner diff erentes bases de donn ees, an de conserver les donn ees sp eciques sur votre propre syst` eme de base de donn ees et de les rendre disponibles pour une application sp ecique utilis ee dans TYPO3.
4 DBAL

est labr eviation de Database Abstraction Layer.

35

2 Installation

R ef erence

613803

` partir dautres syst` Lint egration directe de donn ees a emes de bases de donn ees est alors ren vitant du m due possible, e eme coup les d esavantages de la r eplication et de la synchronisation de donn ees. Labstraction de base de donn ees nest pas r eserv ee quaux syst` emes SGBDR : les tre interrog chiers plats tels que les donn ees XML peuvent aussi e es via des requ etes SQL. Nous nenvisageons ici que la situation standard avec MySQL, linformation sur dautres sc enarios n etant pas encore disponible. Toutefois, la documentation sur labstraction de base de donn ees (DBAL) fournit quelques indications (cf. r ef erence).

2.1.4 Autres logiciels


` TYPO3 pour la manipulation dimages. Ces logiciels utiDeux biblioth` eques sont n ecessaires a litaires sont enti` erement optionnels ; TYPO3 fonctionne aussi sans traitement dimages et sans tre ces biblioth` eques. La premi` ere biblioth` eque est GDLibrary, une extension PHP, qui peut e compl et ee par Freetype, une extension offrant des fonctions pour repr esenter des polices de caract` ere. Puisque GDLibrary est d ej` a compris dans une installation PHP standard, nous ne nous y attarderons pas ici.
R ef erence

353034

La seconde biblioth` eque, utilis ee principalement pour le redimensionnement et la cr eation des chiers image en pr e-visualisation, est ImageMagick. Lutilisation dune ancienne version (version 4.2.9) est recommand ee pour TYPO3, cette derni` ere pr esentant des avantages par rapport aux versions plus r ecentes. 5 tre utilis TYPO3 peut e e avec les derni` eres versions de ImageMagick si les inconv enients pour les fonctions de masquage, de contour et de lissage naffectent pas votre site Web. La version recommand ee (4.2.9) est disponible sur le site de [Link] sous la r ef erence indiqu ee ci-contre. Vous pouvez vous procurer la derni` ere version dImageMagick soit par le ` partir du site gestionnaire de paquetage de votre distribution Linux, soit en le t el echargeant a dImageMagick.6 Vous pouvez aussi utiliser GraphicsMagic , une biblioth` eque bas ee sur le projet ImageMagick, qui entend maintenir le d eveloppement de lAPI dans une ligne plus stricte. 7

R ef erence

436028

2.1.5 Choix du paquetage TYPO3


TYPO3 existe en plusieurs paquetages, selon lusage auquel on le destine. Leur format d epend du syst` eme dexploitation : Tous les paquetages UNIX sont des archives de type tar 8 et se terminent par lextension .[Link]. Les paquetages Windows sont des archives de type zip, et se terminent par lextension .zip. Il ny a aucune diff erence r eelle entre les chiers contenus dans les deux types darchive. La seule diff erence est la taille du paquetage. Le paquetage [Link] occupe moins despace disque
5 Nous navons pas rec u de r eponse satisfaisante lorsque nous avons interrog e l equipe de d eveloppement dImageMagick, concernant la baisse de qualit e dans certains domaines. L echange demails reprenant les d esavantages de ` la r chaque version dImageMagick est disponible a ef erence cit ee plus haut. 6 [Link] 7 [Link] : l evolution inconstante du d eveloppement de lAPI dImageMagick a pouss e ` se passer de cette biblioth` ` ce comportement capricieux en ajoutant plusieurs d eveloppeurs a eque. TYPO3 sest adapt ea des options de conguration pour tenir compte des particularit es de chaque version dImageMagick. 8 Une archive tar est le nom donn es a ` laide du programme tar (qui est en g e aux archives cr ee en eral aussi comprim e avec gzip). Ce format accepte les liens symboliques.

36

2.1 Choix du paquetage TYPO3 et de la conguration du serveur

vitent de d que le paquetage .zip car les liens symboliques e edoubler certains dossiers. Le paquetage .zip contient ces dossiers en double exemplaire, comme le montre la capture d ecran.
Figure 2.1: ` gauche : liens a symboliques et leur relation vers les chiers du r epertoire ` droite : liens src ; a symboliques vers les ` r epertoires sources a lint erieur du r epertoire src

Des raisons historiques expliquent le double usage des r epertoires (` a laide de liens symbo tre cr s via un acc` liques). Notez que les liens symboliques ne peuvent pas e ee es FTP. Si votre ` FTP, s acc` es au serveur Web est limit ea electionnez un paquetage zip. ` laide de logiciels utilitaires tels que Junction , il est aussi possible de cr Depuis peu, a eer des liens dans le syst` eme de chiers dune partition NTFS de Windows. Les diff erents paquetages comprennent toujours la version la plus r ecente de TYPO3 ; ils ne diff` erent que par les exemples quils contiennent. En g en eral, les paquetages [Link] ne contiennent pas le code source de TYPO3, repris dans le chier typo3 src suivi du num ero de la tre t version, qui doit e el echarg e s epar ement. Par contre, tous les paquetages zip contiennent le code source. Les principaux paquetages TYPO3 sont les suivants :

R ef erence

394945

QuickStart Cette version est pr evue pour les n eophytes et comprend le didacticiel du d ebutant. Vous devriez s electionner ce paquetage si vous voulez suivre le didacticiel car il contient tout le mat eriel et les donn ees pour les exemples. Il est aussi disponible sous la r ef erence ci-contre.
R ef erence

995697

Test Site Le paquetage Test Site contient des exemples de gabarits TypoScript, diff erents types de menus et des extensions telles quune boutique, un annuaire et des actualit es. Ce paquetage, bien quil soit un peu d epass e, est utile si vous souhaitez tester ou d ecouvrir le syst` eme par vous-m eme ` laide dexemples. a 37

2 Installation

Dummy Le paquetage Dummy diff` ere des paquetages Quickstart et Test Site par sa base de donn ees vide et par labsence dexemples. Il sert de paquetage standard pour les d eveloppeurs qui commencent un nouveau projet en partant de rien. La copie de la base de donn ees contient un compte dadministrateur, auquel on a acc` es avec le nom dutilisateur admin et le login password. TYPO3 Source Le paquetage TYPO3 source est une archive de type tar qui contient tous les r epertoires n ecessaires au fonctionnement du syst` eme de base. Les paquetages zip contiennent par d efaut ce paquetage. ` partir Les liens symboliques permettent dop erer plusieurs installations TYPO3 (sites Web) a tre stock dune source unique. Les extensions peuvent e ees dans le r epertoire global dexten` une instance de site Web. sions typo3/ext/ ou dans le r epertoire typo3conf/ext/ propre a

2.2 Installation de test et dinitiation


R ef erence

056013

[Link] offre toute une gamme de paquetages adapt es aux diff erents syst` emes dexploitation. Nous approfondissons ici les deux distributions classiques : le programme dinstallation WAMP (Windows Apache MySQL PHP) conc u pour Windows par Ingmar Schlecht, et le paquetage Quickstart pour Linux. Il existe dautres paquetages et guides dinstallation pour BigApache, Mac OS X, Debian, Gentoo, Mandrake, etc. En jetant un il sur la section download et sur la matrice de documentation du site [Link], vous trouverez de nouvelles id ees pour lutilisation de votre installation.

2.2.1 Installation WAMP sous Windows


Vous trouverez le programme dinstallation WAMP parmi les paquetages sur la page de t el echargement de [Link]. Il est tr` es simple dutilisation : 1. 2. 3. T el echargez le programme sur votre ordinateur. Ouvrez le chier par un double-clic. Apr` es un court laps de temps, une bo te de dialogue safche pour vous demander daccepter la licence GPL. Elle constitue une licence relativement courte, que vous pouvez tes temporairelire si vous d esirez conna tre vos droits. Si vous ne lacceptez pas, vous e ` la n de votre carri` ment arriv ea ere TYPO3 : il nexiste pas dautre licence pour TYPO3, ` ses conditions si vous ne voulez pas en perdre le et vous devez absolument adh erer a droit dutilisation. crira tous les Un message appara tra ensuite pour vous informer que le programme e chiers dans le r epertoire C:\apache. Acceptez seulement si vous navez pas de r epertoire pr eexistant portant ce nom, ou si vous souhaitez effacer toutes les donn ees quil contient. En effet, toutes les donn ees pr ec edemment sauvegard ees dans ce dossier seront irr em ediablement perdues. Linstallation est termin ee.

4.

5. 38

2.2 Installation de test et dinitiation

Une nouvelle entr ee TYPO3 se trouve maintenant dans votre menu d emarrer avec les options suivantes : Start Apache Lance le serveur Web Apache Start MySQL Lance le serveur de base de donn ees MySQL Stop MySQL Arr ete le serveur de base de donn ees MySQL TYPO3 start Servers before ` ladresse [Link] le frontend de TYPO3 dans une fen etre de votre navigateur a calhost TYPO3 (Alternative URL) ` ladresse [Link] appelle TYPO3 a Si vous lancez Apache et MySQL et appelez la page de d emarrage TYPO3, vous trouverez toute linformation au sujet du frontend et du backend. Le programme dinstallation WAMP sest alors d ej` a charg e de toutes les autres op erations dinstallation, et TYPO3 est pr et pour les tests, ainsi que pour vos propres essais de programmation.

2.2.2 Installation Quick Install sous Linux


Si vous avez un serveur Web disponible qui supporte MySQL et PHP, vous installerez tr` es facilement TYPO3 sur Linux ou sur dautres syst` emes dexploitation de la famille UNIX tels que BSD, OS X, etc. Si vous avez un acc` es SSH au serveur, connectez-vous et t el echargez larchive de Quickinstall ` partir du site [Link] a ` laide de curl ou wget. Les adresses sont reprises sur la page de a t el echargement de [Link]. Si vous navez quun acc` es FTP sur votre serveur Web, utilisez le paquetage zip. Transf erez tous les chiers sur le serveur dans le r epertoire source de votre site Web (ils sont souvent appel es .../htdocs/, .../html/ ou .../www/). criture sur certaines parties de TYPO3. Si vous Vous donnez maintenant des droits dacc` es en e acc edez au serveur uniquement en FTP, vous devrez proc eder autrement. Plusieurs serveurs Web ont des interfaces pour l edition de chiers tels que Cpanel, Conxx ou Webmin. En cas de doute, contactez votre administrateur ou votre fournisseur. tre modi Les droits dacc` es des chiers suivants doivent e es comme indiqu e ci-apr` es :
chmod chmod chmod chmod chmod chmod chmod 777 777 777 777 777 777 777 typo3/temp/ typo3/ext/ typo3temp/ typo3conf/ typo3conf/ext/ uploads/ fileadmin/
R ef erence

056012

tendant ainsi les droits d ` lensemble des utilisateurs, la s Attention : en e ecriture a ecurit e de tre mise en danger par quiconque ayant acc` ` votre serveur. Vous pouvez votre syst` eme peut e es a 39

2 Installation

consulter la section 2.3.1 pour plus dinformations sur la mani` ere de s ecuriser votre environnement. ` ladresse http ://[Link]/[Link] de votre serveur Web. Appelez TYPO3 a Si vous navez pas de chier [Link] dans le r epertoire de votre serveur Web, vous ne devez ` la n de lURL. Sinon, nous vous sugg pas entrer [Link] a erons de renommer [Link] ` partir du moment o` en index_alt.html. Vous pourrez bien s ur leffacer a u vous nen avez plus besoin. Avant de basculer dans le mode 1-2-3 de loutil dinstallation, un message davertissement safche, vous demandant de modier imm ediatement le mot de passe de loutil dinstallation. Entrez un nom dutilisateur et un mot de passe pour la base de donn ees MySQL et soumettez le formulaire. Ensuite, vous pourrez cr eer une nouvelle base de donn ees, ou en s electionner une pr eexistante. Dans ce dernier cas, noubliez pas que toutes les donn ees quelle contient cras seront e ees ! Chargez le chier [Link] dans la base de donn ees. Vous pouvez maintenant vous ` ladresse connecter au backend avec le nom dutilisateur admin et le mot de passe password a ` loutil dinstallation avec le log[Link] Vous pouvez acc eder a ` changer le mot de passe de loutil dinstallation d` in joh316. 9 Veillez a es votre premi` ere connexion ! Linstallation de base est maintenant termin ee.

2.3 Linstallation en production


Linstallation en production se caract erise principalement par lutilisation dun paquetage ne contenant que la source (sans exemples), et occupant de ce fait un espace disque minimum. De plus, loutil dinstallation contient un grand nombre doptions suppl ementaires qui ne sont pas incluses dans le mode simpli e dinstallation. Cest un point essentiel, non seulement pour optimiser la conguration du syst` eme, mais aussi pour avoir un aperc u de la structure de TYPO3.

2.3.1 Installation LAMP


En plus d etre le syst` eme dexploitation le plus utilis e pour les serveurs Web, UNIX/Linux est id eal pour lutilisation de TYPO3. La plate-forme Linux est tr` es avantageuse, particuli` erement ` jour ; par ailleurs, il existe plusieurs logiciels utilitaires, indispenen ce qui concerne les mises a ` certains modules additionnels de TYPO3, qui ne sont disponibles que sous Linux. Cest sables a ` propos des extensions avant pourquoi il est recommand e de lire la documentation en ligne a de les installer. Par la suite, nous envisageons une installation standard avec MySQL.
9 Pour les curieux : Kasper Sk arhj fait ici r ef erence au verset de l evang eliste Jean : Car Dieu a tant aim e le ternelle . monde quil a donn e son Fils unique : ainsi tout homme qui croit en lui ne p erira pas, mais il obtiendra la vie e

40

2.3 Linstallation en production

En fonction des distributions Linux, des diff erences pourraient appara tre entre linstallation avec Apache/PHP et avec MySQL. ImageMagick est n ecessaire au traitement et au dimensionnement des images. Vous pouvez aussi utiliser GraphicsMagick, une autre biblioth` eque de manipulation dimages d evelopp ee sur la base dImageMagick (voir page 36). Consultez la documentation de votre syst` eme ou le gestionnaire de paquetage appropri e. Dans tous les cas, PHP doit avoir au moins 16 MB de m emoire (voir le chier [Link]) et permettre le chargement de chiers de grande taille (congur e dans [Link] et Apache). Pour installer TYPO3, vous avez dabord besoin dune base de donn ees MySQL vide avec son nom dutilisateur et son mot de passe, ainsi quun des paquetages d ecrits plus haut, disponibles sur le site [Link]. Vous t el echargez ensuite la source et le paquetage dummy, qui contient des liens symboliques vitera de saisir quelques lignes de commandes. et un r epertoire de conguration, ce qui vous e Votre navigateur est la meilleure fac on douvrir la page de t el echargement du paquetage qui vous int eresse. Ouvrez en m eme temps une application de commande ([Link]. Bash, Term, Putty ) et connectez-vous au serveur Web via SSH :
$ssh user@[Link]

Passez au r epertoire de votre serveur Web, situ e un niveau au-dessus du r epertoire du site Web :
user@domain:> cd /srv/www

T el echargez la version actuelle des paquetages dummy et source. Ladresse correcte et le nom ` la page de paquetages sur le site [Link] (cf. r du dossier sont indiqu es a ef erence) :
user@domain:/srv/www> wget \ > [Link]

R ef erence

056011

et
user@domain:/srv/www> wget \ > [Link]

Ici, srv/www est le r epertoire dans lequel se trouve la racine du serveur Web (dans notre exemple htdocs/). Consultez, si n ecessaire, le chier de conguration de votre serveur Web an de trouver le bon chemin. ` laide des comApr` es avoir t el echarg e larchive dans le r epertoire /srv/www, d esarchivez-la a mandes :
user@domain:/srv/www> tar xzf typo3_src-[Link]

et
user@domain:/srv/www> tar xzf [Link]

` laide de la commande : Ensuite, d eplacez les dossiers dans le r epertoire dummy-3.8.0 a


user@domain:/srv/www> mv dummy-3.8.0/* htdocs/

41

2 Installation

vers le r epertoire htdocs, ou le r epertoire qui contiendra votre site Web. Vous pouvez maintenant effacer les archives et le dossier vide.
user@domain:/srv/www> rm -r dummy-3.8.0 user@domain:/srv/www> rm [Link]

Ensuite, si vous listez le contenu du r epertoire htdocs avec la commande :


user@domain:/srv/www> ls -al htdocs/

vous devriez obtenir le r esultat suivant :


total 38 drwxr-xr-x drwxrwxr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x lrwxr-xr-x lrwxr-xr-x lrwxr-xr-x lrwxr-xr-x lrwxr-xr-x lrwxr-xr-x lrwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x 6 14 1 1 1 1 1 1 4 1 1 1 1 1 1 1 3 2 6 user user user user user user user user user user user user user user user user user user user group group group group group group group group group group group group group group group group group group group 512 512 4987 608 8119 434 4509 46 512 18 11 17 15 15 15 18 512 512 512 May Jul May May May May May May May Jul Jul Jul Jul Jul Jul Jul May May May 23 24 23 23 23 23 23 23 23 24 24 24 24 24 24 24 23 23 23 02:42 17:51 02:42 02:42 02:42 02:42 02:41 02:41 02:41 17:51 17:51 17:51 17:51 17:51 17:51 17:51 02:41 02:41 02:41 . .. [Link] [Link] [Link] RELEASE_NOTES.txt _.htaccess [Link] fileadmin [Link] -> tslib/index_ts.php media -> tslib/media [Link] -> tslib/[Link] t3lib -> typo3_src/t3lib tslib -> typo3_src/tslib typo3 -> typo3_src/typo3 typo3_src -> ../typo3_src-3.8.0 typo3conf typo3temp uploads

criture aux Ex ecutez les commandes suivantes an de permettre au serveur Web dacc eder en e r epertoires suivants :
chmod chmod chmod chmod chmod chmod chmod 777 777 777 777 777 777 777 typo3/temp typo3/ext typo3temp typo3conf typo3conf/ext uploads fileadmin

` lenDonner les permissions 777 nest pas sans risque, puisque cela donne tous les droits a ` 770, si le semble des utilisateurs du serveur. Il serait pr ef erable dajuster les permissions a tre le Webmaster et si le groupe peut e tre celui sous lequel propri etaire des r epertoires peut e le serveur Web op` ere. Mais cela d epend des options dadministration et des permissions qui t vous ont e e accord ees ; dans tous les cas, les permissions 777 fonctionnent. Ensuite, faites diteur (dans sauter la s ecurit e de loutil dinstallation en ouvrant le chier suivant dans un e notre exemple vi, qui est disponible sur la plupart des plate-formes Linux). 42

2.3 Linstallation en production


user@domain:/srv/www> vi typo3/install/[Link]

Au d ebut, changez la ligne suivante :


die("In the main source distribution of TYPO3, the install script is disabled by a die() function call.<BR>Open the file typo3/install/[Link] and remove/out-comment the line that outputs this message!");

Dans un navigateur, vous pouvez maintenant appeler loutil dinstallation, d ecrit au chapitre ` ladresse : 2.4 a
[Link]

Si vous utilisez vi (ou vim), tapez dd suivi de ZZ. Vous avez maintenant effac e la ligne, sauvegard e le chier et quitt e vi. Il est aussi possible de commenter la ligne en ajoutant // si plus tard vous souhaitez r eactiver le verrouillage pour des raisons de s ecurit e. Il faut alors entrer i pour acc eder au mode dinsertion. Tapez // au d ebut de la ligne, quittez le mode dinsertion en appuyant sur Esc , et entrez :wq! an de sauvegarder vos changements et fermer l editeur.

2.3.2 Installation WAMP


Linstallation Windows de TYPO3 n ecessite un syst` eme WAMP op erationnel et un serveur Apache avec les distributions les plus r ecentes de PHP et MySQL. Des programmes dinstallation sont disponibles aux adresses URL [Link] ou [Link] Apr` es avoir install e Apache, MySQL et PHP, vous pouvez installer ImageMagick. Il sagit aussi ` la r dun logiciel libre ; vous trouverez a ef erence ci-contre une version correspondante dImage` lutilisation de TYPO3. Linstallation n Magick adapt ee a ecessite des ex ecutables si vous voulez viter de compiler le logiciel par vous-m e eme. Installez ImageMagick sur votre ordinateur avant de reprendre linstallation de TYPO3. T el echargez le paquetage dummy se trouvant dans la distribution zip de la page de t el echargement de [Link]. D esarchivez le zip dans le r epertoire source de votre site Web. Il sagit g en eralement du r epertoire suivant : C:\Program Files\apache\htdocs\ tape, lutilisateur sous lequel Apache op` Au cours de la prochaine e ere aura besoin des droits de lecture et d ecriture sur les r epertoires suivants :
typo3\temp\ typo3\ext\ typo3temp\ typo3conf\ typo3conf\ext\ uploads\ fileadmin\
R ef erence

892286

Dans le dossier typo3\install\[Link], la ligne :


die("In the main source distribution of TYPO3, the install script is dis abled by a die() function call.<BR>Open the file typo3/install/[Link] and remove/out-comment the line that outputs this message!") ;

43

2 Installation

tre effac doit e ee ou comment ee par linsertion de // en d ebut de ligne. ` la section sur loutil dinstallation. Ensuite, passez a

2.3.3 Installation WIIS


tapes : Linstallation WIIS (Windows Installation Information Server) comporte sept e 1. Pr eparation du syst` eme Il est fortement recommand e de cr eer une partition s epar ee pour le serveur Web, an d eviter que les droits dacc` es que vous devez congurer ninuencent pas les droits sur votre partition du syst` eme, ce qui mettrait votre syst` eme en danger. Installation de MySQL T el echargez la derni` ere version de MySQL sur le site [Link] d esarchivez le dossier dinstallation et suivez les instructions. Lorsque linstallation est termin ee, une fen etre Windows souvrira avec le programme WinMySQLadmin, dans laquelle vous pouvez d enir les utilisateurs et les bases de donn ees. Cr eez une base de donn ees vide et un compte utilisateur pour cette base de donn ees. Installation dImageMagick (optionnel) ` la r ImageMagick est aussi un logiciel libre ; vous trouverez a ef erence ci-contre une ` lutilisation de TYPO3. Linstallation version correspondante dImageMagick adapt ee a viter de compiler le logiciel par vous-m n ecessite des ex ecutables si vous voulez e eme. Installation de PHP Apr` es linstallation de PHP, vous devez v erier certains param` etres dans le chier [Link] et les ajuster si n ecessaire. Le chier [Link] contient les param` etres de conguration PHP. Le param` etre le plus important pour le fonctionnement de TYPO3 est :
memory_limit=8M

2.

R ef erence

892286

3.

4.

tre augment ` 16M (16 MB) minimum. Loutil dinstallation v Il devrait e ea erie quelques autres param` etres, mais ils sont en g en eral d ej` a initialis es correctement dans la conguration par d efaut. 5. Conguration IIS La conguration IIS ne contient pas de donn ees sp eciales en ce qui concerne TYPO3 ; les tre soit pris en charge automatiquement par le programme dinstalr eglages peuvent e lation PHP, soit ajust es manuellement, comme le d ecrit le guide dinstallation de PHP. Pour des questions de performance, il est conseill e dop erer PHP en mode ISAPI. D esarchivez TYPO3 D esarchivez le paquetage ZIP s electionn e dans le r epertoire cible, g en eralement appel e F:\inetpub\wwwroot\. Le nom de disque peut bien s ur varier. Assignation de droits dacc` es NTFS tre donn Finalement, des droits doivent e es aux deux utilisateurs sous lesquels IIS est ex ecut e. Ces utilisateurs sont d enomm es IUSR et IWAM suivis du nom de leur serveur. Lutilisateur IUSR_NOMDEMACHINE a besoin de droits de lecture sur tout le syst` eme de chiers, an dex ecuter les fonctions PHP le_exists(), is_le(), etc., et pas seulement pour les r epertoires sous lesquels TYPO3 est install e. Cet utilisateur doit aussi

6.

7.

44

2.4 Loutil dinstallation

avoir des droits de lecture et d ecriture sur le programme [Link] an dutiliser ImageMagick l` a o` u il est n ecessaire, ainsi que le droit de lecture sur le chier [Link]. Dans le tre allou ` lutilisateur r epertoire du serveur Web, les permissions suivantes doivent e ees a IUSR_NOMDEMACHINE :

TYPO3 R epertoire de serveur Web (g en eralement: Drive:\inetpub\wwwroot\) leadmin\ typo3temp\ uploads\ typo3ext\ typo3conf\ C:\PHP\uploadtemp\ ImageMagick C:\WINDOWS\system32\[Link]

Droit Lire Ecrire (r epertoire et sous-r epertoires) Ecrire (r epertoire et sous-r epertoires) Ecrire (r epertoire et sous-r epertoires) Ecrire (r epertoire et sous-r epertoires) Ecrire (r epertoire et sous-r epertoires) Ecrire Lire et ex ecuter Lire et ex ecuter

Tableau 2.1: Droits de IUSR_NOMDEMACHINE

2.4 Loutil dinstallation


Loutil dinstallation consiste essentiellement en une interface graphique qui permet d editer la conguration de TYPO3, sauvegard ee dans le chier [Link] du r epertoire typo3conf/. Le serveur Web doit donc avoir les droits d ecriture sur ce chier et sur tout le r epertoire typo3conf. ` lex Essayons de comprendre le fonctionnement du syst` eme de conguration. A ecution, TYPO3 cr ee des chiers tampon dans le r epertoire typo3conf qui reprennent les param` etres de con tre supguration. Ainsi, lorsque vous modiez la conguration, ces chiers tampon doivent e prim es pour que les changements deviennent effectifs. La suppression se fait normalement automatiquement, sauf en cas de changement de version de code source de TYPO3, principalement vers une version inf erieure ; vous devez alors supprimer manuellement les chiers tampon. Ces chiers ont des noms tels que temp_CACHED_ps2268_ext_localconf.php. En ajoutant /typo3/install/ au nom de votre domaine, vous appelez loutil dinstallation : [Link] Pour utiliser loutil dinstallation, il faut supprimer une fonction de verrouillage du script t typo3/install/[Link], ce qui a d ej` ae e d ecrit dans la section sur les installations LAMP et WAMP. Le mot de passe par d efaut pour loutil dinstallation est joh316 ; vous devriez le changer imm ediatement apr` es votre premi` ere identication. Ensuite, vous d emarrez linstallation en saisissant les informations suivantes : 45

2 Installation

1. 2.

te (localhost) et, si n nom dutilisateur, mot de passe, nom dho ecessaire, le nom dune e que TYPO3 devrait utiliser ; base de donn ees d ej` a cr ee le chemin menant au r epertoire dans lequel est install e ImageMagick ; avec la commande

$locate identify

vous le d ecouvrirez rapidement sur la plupart des distributions Linux. tre moLoutil dinstallation est divis e en plusieurs sections dont les trois premi` eres doivent e ` di ees jusqu` a un certain point lors de linstallation. Les autres sections servent a la maintenance du syst` eme.

2.4.1 Basic Conguration


Longlet de conguration de base v erie les droits dacc` es aux r epertoires dans lesquels TYPO3 crire, et v galement la conguration PHP dans le chier [Link]. Tous les doit pouvoir e erie e probl` emes pouvant emp echer linstallation sont indiqu es ici avec les avertissements correspondants.
Figure 2.2: Conguration correcte pour laquelle TYPO3 a les droits en criture sur les e r epertoires de travail

` votre base de donn Vous devez aussi sp ecier lacc` es a ees. Apr` es avoir entr e le nom dutilisa te (g teur, le mot de passe et le nom dho en eralement localhost si MySQL est install e sur votre serveur), vous soumettez le formulaire en cliquant sur update conguration soit pour s electionner une base de donn ees existante, soit pour en cr eer une nouvelle si vous en avez les droits (create).
Figure 2.3: ` la base de Acc` es a donn ees

46

2.4 Loutil dinstallation

Nous poursuivons en passant en revue la conguration pour la cr eation dimages. Si vous avez install e ImageMagick, sp eciez ici le chemin dacc` es. TYPO3 recherche automatiquement ImageMagick dans le r epertoire par d efaut et d etermine par ailleurs si vous avez compil e GDLib avec Freetype lors de linstallation PHP. Dans les versions r ecentes de Freetype, le texte dans ventuellement d limage de test peut e eborder du cadre. Si ce probl` eme persiste, nous le corri tape ult gerons lors dune e erieure (cf. section 2.4.4).
Figure 2.4: R esultat du test Freetype avec r esolution correcte

Lorsque vous soumettez le formulaire, loutil dinstallation sauvegarde toutes les valeurs des param` etres de conguration dans le chier [Link].

2.4.2 Database Analyzer


` jour Le script de lanalyse de base de donn ees vous permet aussi bien d editer et de mettre a une base de donn ees existante que den cr eer une nouvelle en sp eciant sa structure et son contenu. Une d enition minimale de base de donn ees est incluse dans le paquetage dummy. Le chier SQL correspondant est dans le r epertoire typo3conf/ et est afch e automatiquement dans loutil dinstallation.
Figure 2.5: Afchage du chier SQL par d efaut sp eciant la structure et le contenu de la base de donn ees

Avec loption Import, vous importez la base de donn ees. Apr` es avoir cliqu e sur cette option, un message safche, vous demandant de conrmer limportation de toutes les donn ees. Cochez loption et soumettez le formulaire en cliquant sur Write to database.
Figure 2.6: Import de la base de donn ees

` l Cette op eration peut prendre du temps selon les performances de votre serveur Web. A etape suivante, vous verrez une liste de toutes les tables de base de donn ees accompagn ees dun 47

2 Installation

avertissement indiquant quelles existent d ej` a. Si ce nest pas le cas, cest-` a-dire que certaines chou tables sont indiqu ees comme inexistantes, cela signie que le processus dimport a e e; ` pr vous devriez donc r eessayer. Linitialisation de la base de donn ees est a esent termin ee. Un compte administrateur est d` es lors ouvert avec admin comme nom dutilisateur et password comme mot de passe.
Figure 2.7: Le message du Database Analyzer apr` es un import r eussi du chier SQL (attention : dautres tables peuvent safcher en fonction de votre installation !

Pour initialiser la base de donn ees, vous pouvez utiliser une m ethode alternative qui ne r eclame pas lemploi du chier [Link] du paquetage dummy choisissez dans ce cas loption COMPARE. Une liste de toutes les tables de base de donn ees requises est indiqu ee. Celles-ci t ont e e pr es electionn ees. Appuyez sur le bouton de conrmation dans le formulaire pour cr eer les tables de base de donn ees. Choisissez ensuite la fonction Create admin user et ouvrez un compte administrateur.

48

2.4 Loutil dinstallation

2.4.3 Image Processing


Ce script teste linstallation des biblioth` eques de traitement dimages ImageMagick, de GDLib et Freetype. Nous nen discutons pas en d etail ici car il na pas dinuence sur la conguration de votre syst` eme.

2.4.4 All Conguration


Le script All Conguration contient des champs de saisie pour toutes les options de conguration de TYPO3 ainsi que quelques br` eves explications de ces options dont les noms sont les cl es du tableau PHP TYPO3_CONF_VARS. En g en eral, seules quelques entr ees sont importantes. Si le texte du test Freetype introduit pr ec edemment d epasse du cadre, augmentez la ` 96 dpi. r esolution dans Freetype de 72 a Entrez cette valeur dans le champ [GFX][TTFdpi] ; vous le trouverez dans la partie nale de la section [GFX], juste avant la section [SYS]. ` ce stade. Les autres entr ees sont normalement optionnelles a

2.4.5 typo3temp/
Cette section vous donne un ensemble de statistiques sur les chiers enregistr es dans le r epertoire typo3temp, et vous permet aussi de les supprimer. Cette fonction est importante pour la maintenance de linstallation. Le r epertoire est utilis e par TYPO3 pour enregistrer les chiers dimages du frontend. Ces images sont r eg en er ees chaque fois que le cache de la page est supprim e, tandis que les anciennes restent dans ce dossier. Pour les sites Web de grande envergure contenant une grande quantit e dimages, plusieurs MBs peuvent rapidement sy accumuler. Si les images sont supprim ees de ce r epertoire, bien que les pages pointent toujours vers les chiers, limage est r eg en er ee pour autant que vous vidiez le cache de la page apr` es galement aller voir dans le backend de votre installaavoir supprim e les chiers. Vous pouvez e tion TYPO3, dans le module Outils V erication BD sous Relations, pour savoir combien de chiers sans lien avec la base de donn ees se trouvent dans ce r epertoire.

2.4.6 phpinfo()
Cette section appelle la fonction PHP par d efaut phpinfo() et afche tous les param` etres essentiels de linstallation PHP. Vous trouverez tout au-dessus un r esum e des param` etres les plus importants du syst` eme TYPO3, r esum e que vous devriez ins erer dans votre email en cas ` la liste Install, de telle mani` de question a ere quune information compl` ete soit fournie pour le d ebogage .

2.4.7 Edit les in typo3conf/


Cette section reprend la liste des chiers situ es dans le r epertoire typo3conf/. Vous pouvez diter chacun de ces chiers ; cliquez simplement sur le nom du chier pour lancer le formue laire d edition. Cette option peut sav erer tr` es utile pour les utilisateurs de TYPO3 exp eriment es, car elle permet dins erer manuellement les valeurs de conguration, par exemple si lun des chou ` la ligne du scripts dinstallation a e e. Vous avez la possibilit e de convertir tous les sauts a format Windows au format Linux et de cr eer automatiquement une copie de sauvegarde du 49

2 Installation

ditez. Cette derni` chier que vous e ere fonction est hautement recommand ee pour les essais de conguration dans le chier [Link], an que vous puissiez facilement restaurer la conguration pr ec edente.

2.4.8 About
Vous connaissez d ej` a cette section : cest la premi` ere page que vous apercevez lorsque le programme d emarre. Elle vous permet de modier le mot de passe de loutil dinstallation. Si vous ne lavez pas encore fait, changez-le maintenant.

2.5 Options de conguration dans TYPO3_CONF_VARS


` c A ot e de la conguration de base, un grand nombre de param` etres sont contr ol es par le script All Conguration. En voici la liste exhaustive, accompagn ee pour chaque param` etre dune description qui est parfois reprise dans loutil dinstallation sous une forme abr eg ee.

2.5.1 [GFX]:$TYPO3_CONF_VARS["GFX"]
La zone GFX (pour Graphics ) contient toutes les options de conguration pour le traitement dimages en TYPO3. IM est une abr eviation pour ImageMagick et GD d esigne la biblioth` eque GD. [image_processing] Bool een (0,1). Active ou d esactive le traitement dimages en TYPO3. Exemple : [image_processing] = 1 [thumbnails] Bool een (0,1). Afche (ou non) les vignettes (images miniatures) dans le backend. Exemple : [thumbnails] = 1 [thumbnails_png] Bits. Bit 0 : lentr ee 0 cr ee des vignettes en format GIF, lentr ee 1 en format PNG. Bit 1 : lentr ee 2 sp ecie que chaque chier JPG est converti pour lafchage de sa vignette en GIF ou en PNG avec lentr ee 3. Exemple : [thumbnails_png] = 0 [noIconProc] Bool een (0,1). Lorsque loption est activ ee (1), les ic ones ne sont pas construites dyna` partir de couches (par exemple, pour combiner lic miquement dans le backend a one de tre dispola page avec les ic ones Lancement, Arr et ou Cacher la page) mais doivent e tre utile pour obtenir un backend op nibles sur le serveur. Cela peut e erationnel, m eme si les op erations de combinaison ne sont pas correctement support ees par le logiciel Ima tre d geMagick. Cette option devrait uniquement e esactiv ee si le serveur fournit toutes les fonctionnalit es pour le traitement des images. Exemple : [noIconProc] = 1 [gif_compress] Bool een (0,1). Cette option active la fonction t3lib_div::gif_compress() qui recomprime 50

2.5 Options de conguration dans TYPO3_CONF_VARS

les chiers GIF g en er es sils ne sont pas comprim es ou sils utilisent seulement la compression RLE (Run Length Encoding). Voir [im_path_lzw]. Exemple : [gif_compress] = 1 [imagele_ext] Vous sp eciez ici une liste dextensions de chiers (s epar ees par des virgules) qui de tre interpr vraient e et es comme des images par TYPO3. Lorsque IM nest pas disponible, tre restreinte aux extensions gif,png,jpeg,jpg, e crites en minuscules et sans la liste doit e espace. Exemple : [imagele_ext] = gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai [gdlib] Bool een (0,1). Cette option permet lutilisation de la biblioth` eque GD par TYPO3. Exemple : [gdlib] = 1 [gdlib_png] Bool een (0,1). Entrer 1 signie que GD g en erera uniquement des chiers PNG plut ot que des chiers GIF. Cependant, les vieux navigateurs nafchent pas les chiers PNG. Et m eme les versions r ecentes de lIE ne supportent pas toutes les fonctionnalit es PNG comme, par exemple, les transparences. Exemple : [gdlib_png] = 0 [gdlib_2] Bool een (0,1). Vous devriez entrer la valeur 1 si votre serveur Web utilise GDLib 2.0.1 ou plus, sans quoi certains probl` emes pourraient survenir. Exemple : [gdlib_2] = 0 [im] Bool een (0,1). Permet lutilisation dImageMagick (IM) par TYPO3. Exemple : [im] = 1

[im_path] Entrez ici le chemin menant au dossier dans lequel les programmes IM convert, combine et identify sont situ es sur le serveur Web. Exemple : [im_path] = /usr/local/bin/ [im_path_lzw] Entrez les d etails du chemin pour la version IM dont la commande convert peut im t pl ementer la compression LZW. Cette compression a e e brevet ee par Unisys et fut sup tre port ee temporairement par ImageMagick. La version recommand ee 4.2.9 dIM peut e quip e ee avec la compression LZW ; dans ce cas le champ est laiss e vide et [gif_compress] est d esactiv e. On peut attendre des versions futures de plusieurs logiciels quelles sup tant donn portent la compression LZW, e e que le brevet a expir e. Exemple : [im_path_lzw] = /usr/local/typo3sh/bin/ [im_version_5] ` 1 si vous utilisez une version dIM 5.x ou plus. Bool een (0,1). Mettez cette valeur a Exemple : [im_version_5] = 0 51

2 Installation

[im_negate_mask] ` partir de la version 5.1, les images doivent e tre ins Bool een (0,1). A er ees avant d etre combin ees avec un masque. Exemple : [im_negate_mask] = 0 [im_imvMaskState] Bool een (0,1). Depuis la version 5.4.3+, la situation d ecrite dans le paragraphe pr ec edent t tre congur ae e invers ee et TYPO3 peut e e de telle mani` ere que le r eglage global tre [im_version_5] ne demande pas la conversion des chiers dimage qui doivent e tait n masqu es, ce qui e ecessaire auparavant.10 Exemple : [im_imvMaskState] = 0 [im_no_effects] Bool een (0,1). Avec la version 4.2.9 recommand ee, les effets d ImageMagick fonctionnent bien. Dans les versions plus r ecentes, ils sont devenus plus lents, et peuvent tre d ` laide de ce param` e esactiv es a etre. Enn, dans les versions dIM les plus r ecentes, t les effets fonctionnent bien mieux mais la syntaxe de lAPI a une nouvelle fois e e modi ee sans commentaires . . . Exemple : [im_no_effects] = 0 [im_v5effects] Entier (-1,0,1). 0 = d esactiv e. -1 = ne pas rendre les contours des images plus nets par d efaut. 1 = Tous ; la d enition des contours (sharpening) et le ou (blurring) sont activ es et loption [im_no_effects] est annul ee. Exemple : [im_v5effects] = 0 [im_mask_temp_ext_gif] Bool een (0,1). Activez cette option si vous utilisez une version dIM 5+. La classe par d efaut tslib_cObj utilise le format PNG car la g en eration est plus rapide et demande moins de CPU. Etant donn e que certaines versions dIM au-del` a de la version 5 ne sup tre supprim portent pas le format PNG correctement, cela peut e e en activant cette option. Exemple : [im_mask_temp_ext_gif] = 0 [im_mask_temp_ext_noloss] Cha ne de caract` eres. Pendant que les images sont masqu ees, il faut bien entendu enregistrer les chiers temporaires dans un format sans perte. Pour ce faire, le format miff dImageMagick est id eal. Malheureusement, la version 5.4.9 dImageMagick nest pas capable de g en erer son propre format de chier. Dans ce cas, en cas de probl` eme avec les masques, vous pouvez utiliser au choix les formats TIF, PNG, or JPG. Exemple : [im_mask_temp_ext_noloss] = miff [im_noScaleUp] Bool een (0,1). Les images ne sont pas agrandies lorsque loption est activ ee. Exemple : [im_noScaleUp] = 0
10 Ceci a men ` la s e, de pair avec beaucoup dautres d eveloppements, a eparation du projet GraphicsMagic an de ` ce moment venait clairement du cur : All cr eer une interface plus able. Le commentaire de Kasper Sk arhj a eluia pour ImageMagick ai-je un jour regrett e dutiliser ce paquetage . . .

52

2.5 Options de conguration dans TYPO3_CONF_VARS

[im_combine_lename] Cha ne de caract` eres. Les versions dIM les plus r ecentes ont renomm e la commande combine en composite ; donnez ici le nom correct. Exemple : [im_combine_lename] = combine [im_noFramePrepended] Bool een (0,1). Certains formats dimage comme GIF ou TIF permettent de sauver plusieurs images dans un seul chier. ImageMagick fournit une option pour travailler uniquement avec la premi` ere image, ce qui accro t g en eralement la vitesse de travail. Malheureusement, quelques versions dIM contiennent une erreur impliquant quIM ignore ch tre activ tout bonnement ces images. Le cas e eant, cette option doit e ee. Exemple : [im_noFramePrepended] = 0 [enable_typo3temp_db_tracking] tre enreBool een(0,1). Vous sp eciez ici si tous les chiers dans typo3temp/ doivent e es sigistr es dans une table de la base de donn ees. Ceci emp eche les images d etre cr ee multan ement par deux processus diff erents, puisque la relation entre le chier de sortie temporaire et le chier source est not ee ici. En outre, le module Outils V erication BD du backend et loutil dinstallation vous renseigne sur le nombre de vieux chiers se trouvant dans le r epertoire temp/. Exemple : [enable_typo3temp_db_tracking] = 0 [TTFLocaleConv] Cha ne de caract` eres. Vous pouviez sp ecier ici, jusqu` a la version 3.6.0, le format de sortie des fonctions TrueType. Depuis la version 3.6.0, la sortie est toujours de type UTF8. Exemple : [TTFLocaleConv] = [TTFdpi] Entier. Cette option importante permet de r egler la r esolution en dpi (pixels par pouce) dans laquelle fonctionne le syst` eme Freetype sur votre serveur. Cette r esolution est de 96 dpi depuis la version 2 pour 72 avant ; lafchage des polices est alors trop grand si ` 96 dpi pour les versions plus r la valeur nest pas chang ee a ecentes. Exemple : [TTFdpi] = 96 [im_jpg_quality] Entier. Cette valeur d etermine la qualit e du format JPEG. Exemple : [im_jpg_quality] = 70

2.5.2 [SYS]:$TYPO3_CONF_VARS["SYS"]
Cette section d ecrit les options de conguration des interfaces backend et frontend. [textle_ext] tre e dit Indiquez ici, via les extensions de chiers, quels types de chiers peuvent e es dans le backend. Exemple : [textle_ext] = txt,html,htm,css,inc,php,php3,tmpl,js,sql 53

2 Installation

[contentTable] l Cette option vous permet de sp ecier le nom de la table des e ements de contenu de la page. La valeur par d efaut est tt_content. Exemple : [contentTable] = tt_content [sitename] ` c Il sagit du nom de linstallation qui est montr e au sommet de larbre de la page, a ot e de lic one repr esentant le globe terrestre. Le nom est aussi disponible dans la section Basic Conguration de loutil dinstallation. Exemple : [sitename] = BT3-Entreprise [ddmmyy] ` la notation de la fonction date() en Le format dafchage de la date correspond a PHP. Exemple : [ddmmyy] = d.m.y [hhmm] ` la notation de la fonction date() en Le format dafchage de lheure correspond a PHP. Exemple : [hhmm] = H:i [encryptionKey] Cette option permet de sp ecier une cha ne de caract` eres al eatoire utilis ee dans la cr eation de valeurs de hachage pour le chiffrement dans le menu contextuel, le Direct Mail Module, ainsi qu` a dautres endroits dans le syst` eme ; cela permet dam eliorer la s ecurit e. Exemple : [encryptionKey] = Haaken Flip [doNotCheckReferer] Bool een (0,1). Cette option permet de d esactiver le contr ole actif dans le backend, qui te acc te r v erie que lho edant et lho ef erent (referring host ) sont bien identiques. Si ` 1, la v tre utile lorsque la valeur est mise a erication nest plus active. Cela peut e ` la valacc` es se fait via des serveurs proxy qui ne donnent pas une valeur correcte a riable HTTP_REFERER. Exemple : [doNotCheckReferer] = 0 [recursiveDomainSearch] ` un domaine Bool een (0,1). Lorsque cette option est activ ee (1), si lon essaie dacc eder a non-existant, TYPO3 efface r ecursivement des parties du nom jusquau moment o` u il trouve une correspondance avec un nom de domaine congur e dans TYPO3. Exemple : [recursiveDomainSearch] = 0 [T3instID] t tait de cr Cette option na pas encore e e utilis ee. Lintention e eer une identit e unique 54

2.5 Options de conguration dans TYPO3_CONF_VARS

` laquelle chaque installation peut sidentier lorsquelle acc` a ede au r epertoire dexten` des ns statistiques, mais na pas encore e t sions. Cela servirait a e mis en pratique. Exemple : [T3instID] = N/A [devIPmask] Indiquez les adresses IP s epar ees par des virgules. Cette option importante d enit la liste des adresses IP pour lesquelles les messages derreur sont afch es dans le frontend. La fonction Debug() utilise ces entr ees comme ltre. Une entr ee vide ne permet aucun ` tous les ho tes. Ce m acc` es. Le caract` ere * donne acc` es a eme caract` ere (*) permet de ` plusieurs adresses IP ayant certains chiffres en commun. Par exemple, donner lacc` es a ` toutes les adresses IP commenc 192.168.*.* donne lacc` es a ant par 192.168.. Exemple : [devIPmask] = 192.168.*,[Link] [curlUse] Bool een (0,1). En entrant 1, la fonction getUrl utilis ee par le syst` eme est curl au lieu de fopen(), de telle mani` ere que vous puissiez travailler avec des serveurs proxy (ce qui nest pas possible avec fopen()). La biblioth` eque Curl est certainement disponible dans votre installation PHP. Exemple : [SYS][curlUse] = 0 [curlProxyServer] ` Curl sous la forme [Link] Vous devez donner ladresse de votre serveur proxy a xy:port/. Exemple : [curlProxyServer] = [Link] [curlProxyTunnel] ` travers Bool een (0,1). Pour des raisons de s ecurit e, il est n ecessaire d etablir un tunnel a le serveur proxy. Entrez 1 et Curl sen chargera. Exemple : [curlProxyTunnel] = 0 [curlProxyUserPass] Cha ne de caract` eres. Vous entrez vos nom dutilisateur et mot de passe pour lacc` es au serveur proxy, si n ecessaire, en utilisant la notation Nom dutilisateur:Mot de passe. Exemple : [curlProxyUserPass] = Leeloo:Multipass [form_enctype] Cha ne de caract` eres. Cette option permet dajuster globalement le type de chiffrement de la plupart des formulaires dans TYPO3. multipart/form-data est loption par d efaut ; elle permet de charger les chiers. Si le chargement de chiers nest pas permis par es avec ce formulaire ne seront pas transf votre installation PHP, les donn ees cr ee er ees. tre chang Le type de chiffrement peut e e en cons equence par la valeur application/xwww-form-urlencoded. Exemple : [form_enctype] = multipart/form-data 55

2 Installation

[loginCopyrightWarrantyProvider] Cha ne de caract` eres. GPL ninclut aucune garantie de la part de lauteur du logiciel. Si vous d esirez ou devez assumer la garantie de la fonction envers un client, vous pouvez entrer votre nom dans ce champ de sorte quil soit afch e sur la page douverture de ` l session. Une adresse Internet (URL) est aussi donn ee a etape suivante. Exemple : [loginCopyrightWarrantyProvider] = VEB Optimismus [loginCopyrightWarrantyURL] Cha ne de caract` eres. Sp eciez une adresse URL de la forme [Link] com ; elle servira de lien aux noms donn es dans loption pr ec edente. Exemple : [loginCopyrightWarrantyURL] = [Link] [loginCopyrightShowVersion] Bool een (0,1). La page douverture de session indiquera la version TYPO3 si vous entrez la valeur 1. Exemple : [loginCopyrightShowVersion] = 0 [binPath] Cha ne de caract` eres sous forme de liste s epar ee par des virgules. Vous entrez une liste de chemins absolus dans lesquels la recherche de programmes externes est faite. Ceci est par exemple utilis e par les services de lextension DAM. Exemple : [binPath] = /usr/bin/ [t3lib_cs_convMethod] Cha ne de caract` eres. Dans la classe t3lib_cs, entrer lune des valeurs suivantes sp ecie avec quel outil les jeux de caract` eres sont convertis : iconv ou recode sont des pro` TYPO3. Les programmes externes ; largument par d efaut est le code PHP propre a grammes externes sont signicativement plus rapides mais lencodage HTML de caract` eres sp eciaux nest pas support e. Exemple : [t3lib_cs_convMethod] = recode [t3lib_cs_utils] ` TYPO3 pour convertir les jeux Cha ne de caract` eres. Au lieu dutiliser le code propre a de caract` eres, vous pourriez vouloir utiliser le module PHP mbstring qui est bien plus rapide. Pour ce faire, il vous suft dentrer le nom de ce module en argument. La cha ne mbstring est dailleurs la seule quaccepte cette option comme argument, contrairement ` ce qui est indiqu a e dans la description anglaise de loutil dinstallation. Si vous nentrez ` TYPO3 sera utilis rien, le code propre a e. Exemple : [t3lib_cs_utils] = mbstring [enable_DLOG] Bool een. Indique si le log d eveloppeur est activ e. Voir la constante TYPO3_DLOG. Exemple : [enable_DLOG] = 56

2.5 Options de conguration dans TYPO3_CONF_VARS

[no_pconnect] ` la base de donn ` la place de Bool een. La valeur 1 force lutilisation de connect a ees a pconnect. Exemple : [no_pconnect] = 1 [multiplyDBeldSize] Valeur d ecimale comprise entre 1 et 5. Indique un facteur par lequel sera multipli ee la taille de chaque champ lorsque loutil dinstallation calcule la taille de la base de donn ees ([Link].2,5). Cest utile lorsque vous voulez augmenter la taille des champs pour utf-8. Pour des sites de lEurope de lOuest utilisant utf-8, on ne devrait pas avoir une ` deux fois la taille normale dun octet simple et pour les langues valeur sup erieure a asiatiques, un facteur 3 devrait sufre. Exemple : [multiplyDBeldSize] =1 [setMemoryLimit] Entier. Indique la valeur du param` etre PHP memory_limit en MB : si elle est sup erieure ` 16, TYPO3 essaie dutiliser ini_set() pour xer la limite m ` cette valeur. a emoire de PHP a Cette op eration na de sens que si votre sysadmin vous a donn e les droits dutiliser la fonction ini_set(). Exemple : [setMemoryLimit] = 0 [forceReturnPath] Bool een. Force lutilisation du chemin de retour (return path) dans la fonction mail(). ` mail() par la classe t3lib htmlmail seront Si cette valeur est active, tous les appels a faits avec -f comme cinqui` eme param` etre. Cela rendra le chemin de retour correct sur ` 2 pour la plupart des syst` emes UNIX. Il y a un probl` eme avec les versions inf erieures a Postx : les emails ne sont pas envoy es si cette valeur est activ ee. Sur les plate-formes ` ini_set. Cela na pas deffet si Windows, le chemin de retour est donn e via un appel a PHP est install e en safe mode. Exemple : [forceReturnPath] = 0 [displayErrors] Entier, -1,0,1. 0=Nafcher aucun message derreur PHP. 1=Afcher les messages derreur. -1=Valeur par d efaut qui permet de remplacer le param` etre display_errors. Il est ` 0 et dactiver a ` la place loption error_log conseill e de x e la valeur de ce param` etre a dans [Link]. Exemple : [displayErrors] = 1 [serverTimeZone] ` lheure GMT. La valeur par d Entier. Sp ecie le d ecalage en heures par rapport a efaut ` lheure GMT+1 (Europe centrale). Cette valeur peut e tre utilis est 1 qui correspond a ee ` partir ou vers dautres fuseaux dans les extensions qui doivent convertir des heures a horaires. Exemple : [serverTimeZone] = 1

57

2 Installation

2.5.3 [EXT]:$TYPO3_CONF_VARS["EXT"]
Nous d ecrivons dans cette section diff erentes options pour congurer le gestionnaire dextensions et les parties du syst` eme sy rapportant. [noEdit] Bool een (0,1). La valeur 1 emp eche les chiers dans le gestionnaire dextensions d etre dit tre mise a ` 0 an quils puissent y ape es. Pour les d eveloppeurs, la valeur devrait e porter directement les changements. Exemple : [noEdit] = 1 [allowGlobalInstall] Bool een (0,1). La valeur 1 permet linstallation des extensions globales dans le r epertoire ` jour et leur suppression typo3/ext/ via le gestionnaire dextensions, ainsi que leur mise a dans ce r epertoire. Cette option est importante pour que les administrateurs ne puissent pas modier les extensions globales au cas o` u plusieurs sites Web sont install es sur le serveur. Exemple : [allowGlobalInstall] = 0 [allowLocalInstall] Bool een (0,1). La valeur 1 permet dadministrer les extensions locales dans le r epertoire typo3conf/ext/ de linstance en question via le gestionnaire dextensions. Exemple : [allowLocalInstall] = 1 [em_devVerUpdate] Bool een (0,1). La valeur 1 provoque un marquage rouge des versions des extensions si ` jour sont disponibles. des mises a Exemple : [em_devVerUpdate] = 0 [em_alwaysGetOOManual] Bool een (0,1). Vous demandez, en entrant la valeur 1, que la documentation incluse dans les extensions, disponible en format OpenOfce, soit toujours t el echarg ee depuis le serveur. Exemple : [em_alwaysGetOOManual] = 0 [em_systemInstall] Bool een (0,1). Vous permettez au gestionnaire dextensions dinstaller les extensions du ` jour r epertoire sysext/ en entrant la valeur 1. Cest n ecessaire pour r ealiser les mises a ` partir du gestionnaire dextensions. des extensions des syst` emes cms et lang a Exemple : [em_systemInstall] = 0 [requiredExt] Cha ne de caract` eres sous forme de liste s epar ee par des virgules. Vous sp eciez les tre d extensions qui ne peuvent e esactiv ees par le Gestionnaire dExtensions (GE). Normalement, les extensions cms et lang qui forment le cur du syst` eme sont incluses dans la liste. Exemple : [requiredExt] = cms,lang 58

2.5 Options de conguration dans TYPO3_CONF_VARS

[extCache] Entier (0,1,2,3). Pour ne pas enregistrer les scripts dextensions ext_local-[Link] et ` chaque ext_tables.php dans le cache, entrez 0. Les scripts seront alors lus chaque fois a requ ete de la page ce qui est int eressant lorsque vous d eveloppez les extensions, puisque cela vous permet de ne pas devoir supprimer le cache dans le backend. Largument par d efaut est 1. Les scripts sont sauv es dans des chiers sous la forme typo3conf/temp_CACHED_[sitePathHash]*, ce qui r eduit la charge du serveur et augmente ses performances un r eglage utile pour un serveur en production. La valeur 2 fait en sorte que le nom de chier du chier tampon contienne une valeur de hachage bas ee sur la cha ne de caract` eres [extList]. La valeur 3 signie que les noms des chiers tampon ne contiendront aucune valeur de hachage. Exemple : [extCache] = 1 [extList] Cha ne de caract` eres sous forme de liste s epar ee par des virgules. Les extensions install ees par le gestionnaire dextensions sont entr ees dans cette liste. Si vous installez ditez le une extension d efectueuse qui rend impossible le travail avec le syst` eme, e chier typo3conf/[Link] pour enlever cette extension et effacer la cl e de cette tre supprim liste. En outre, les chiers typo3conf/temp_CACHED_* doivent e es pour que ` nouveau op le syst` eme soit a erationnel. Exemple : [extList] = tscong_help,context_help,extra_page_cm_options,...

2.5.4 [BE]:$TYPO3_CONF_VARS["BE"]
Cette section pr esente les param` etres de la conguration backend. [unzip_path] Indiquez le chemin menant au programme de d ecompression unzip. Exemple : [unzip_path] = /usr/bin/ [diff_path] Indiquez le chemin vers lapplication diff en ligne de commande, utilis ee pour comparer ` ladresse : les chiers. Une version Windows de diff peut se t el echarger a [Link] Exemple : [diff_path] = diff [leadminDir] Le chemin du r epertoire leadmin ; chemin relatif par rapport au chemin du site sp eci e par la constante PATH_site. Exemple : [leadminDir] = leadmin/ [RTE_imageStorageDir] Le chemin vers le r epertoire dans lequel seront sauv es les chiers du Rich Text Editor. Exemple : [RTE_imageStorageDir] = uploads/ 59

2 Installation

[staticFileEditPath] dit Le chemin vers le r epertoire dans lequel sont enregistr es et e es les chiers sta tre congur tiques . Les champs de la base de donn ees peuvent e es dans le $TCA de telle sorte quils sont en r ealit e stock es dans un chier. Lextension sys_staticle_edit en est une application. Exemple : [staticFileEditPath] = leadmin/static/ [lockRootPath] Cha ne de caract` eres. Sp ecie la partie commune des chemins [userHomePath] et [groupHomePath]. Notez que la premi` ere partie des chemins [userHomePath] et ` [lockRootPath]. Cette valeur est aussi utilis [groupHomePath] doit correspondre a ee ` un r pour acc eder a epertoire en dehors des valeurs PATH_site. Par exemple, on change tre autoris ` un niveau au-dessus cette valeur si un traitement sur des donn ees doit e ea du r epertoire racine du serveur Web. Exemple : [lockRootPath] = /srv/www/archiv/ [userHomePath] Cha ne de caract` eres. Chemin vers le r epertoire personnel de lutilisateur backend. Si la valeur du chemin est ins er ee ici, TYPO3 cr ee automatiquement un r epertoire personnel pour chaque utilisateur. Par exemple, si la valeur est /home/typo3/users, alors un pour lutilisar epertoire avec le chemin /home/typo3/users/43_cameronfrye/ est cr ee teur 43_cameronfrye avec luid 43. Exemple : [userHomePath] = /srv/www/htdocs/typo3/users/ [groupHomePath] autoCha ne de caract` eres. Comme pour les utilisateurs, un r epertoire s epar e est cr ee matiquement pour chaque groupe. Exemple : [groupHomePath] = /srv/www/htdocs/typo3/group/ [userUploadDir] Cha ne de caract` eres. Un sufxe pr econgurable ajout e aux r epertoires de lutilisateur. ` luid, cest-` Si le r epertoire de lutilisateur correspond au nom dutilisateur et a a-dire ici 43_cameronfrye/ et que la valeur sp eci ee est /250GT, alors un r epertoire nomm e ` disposition de lutilisateur. 43_cameronfrye/250GT/ est mis a Exemple : [userUploadDir] = /250GT [leCreateMask] s par TYPO3 dans le D enissez ici les permissions dacc` es donn ees aux chiers cr ee syst` eme de chiers, en accord avec la syntaxe de la commande umask de UNIX. Exemple : [leCreateMask] = 0644 [folderCreateMask] Le m eme r eglage que le pr ec edent, mais cette fois pour les dossiers. Exemple : [folderCreateMask] = 0755 60

2.5 Options de conguration dans TYPO3_CONF_VARS

[warning_email_addr] ` laquelle est envoy Une adresse email a e un avertissement lorsque quatre tentatives manqu ees douverture de session au backend se sont produites en une heure. Exemple : [warning_email_addr] = ronald@[Link] [warning_mode] ` ladresse donn Entier (1,2). Si vous entrez 1, un message est envoy ea ee pr ec edemment chaque fois quun utilisateur a ouvert une session au backend. Si vous entrez 2, ladresse rec oit un avertissement uniquement lorsquun administrateur ouvre une session. Exemple : [warning_mode] = 2 [IpmaskList] Cha ne de caract` eres. Sp eciez les adresses IP auxquelles vous octroyez exclusivement un acc` es au backend. Les utilisateurs ayant dautres adresses IP nauront donc aucun acc` es. Il est possible dutiliser * comme caract` ere joker 11 . Exemple : [IPmaskList] = 192.168.1.* [adminOnly] Bool een (0,1). En sp eciant 1, seuls les administrateurs peuvent acc eder au backend. La ` tous les utilisateurs. Cette option peut e tre utile pour exclure valeur 0 donne lacc` es a ` jour. les utilisateurs du syst` eme lors des travaux de maintenance et de mise a Exemple : [adminOnly] = 0 [lockBeUserToDBmounts] ` leur Bool een (0,1). La valeur par d efaut 1 octroie uniquement aux utilisateurs lacc` es a propre Pagemount, ce qui peut etre d esactiv e en entrant 0. Ce dernier sc enario est hautement improbable. Exemple : [lockBeUserToDBmounts] = 1 [lockSSL] ` TYPO3 de rendre le backend disponible uniEntier (0,1,2). Les valeurs 0 et 1 demandent a ` [Link] via une connexion SSL. La valeur 2 fait en sorte que lacc` es a [Link]/typo3 soit automatiquement redirig e vers [Link] typo3. Exemple : [lockSSL] = 0 [disable_exec_function] Bool een (0,1). Vous supprimez lutilisation de la fonction PHP exec() en entrant 1, ce qui tre utile sous Windows. Pour ImageMagick, la m peut e eme action se fait en d esactivant toutes les fonctions graphiques : [GFX][im]=0. Exemple : [disable_exec_function] = 0
11 NdT

: wildcard en anglais

61

2 Installation

[usePHPFileFunctions] Bool een (0,1). Quand PHP op` ere en mode safe_mode, toutes les op erations sur les tre pass ` des chiers doivent e ees par le biais de fonctions PHP plut ot que par des appels a commandes externes via la fonction exec(). Cest le comportement adopt e lorsque la ` 1. valeur est mise a Exemple : [usePHPFileFunctions] = 1 [compressionLevel] Entier (1-9). Requiert zlib en PHP. La compression avec gzip se fait en entrant une valeur ` 9. Les pages comprim de 1 a ees utilisent moins de bande passante mais la charge du CPU augmente avec des taux de compression plus importants. Lentr ee 0 ne r ealise aucune compression, lentr ee 9 produit une compression maximale. Alternativement, si vous sp eciez TRUE, la compression est ajust ee dynamiquement selon la charge du syst` eme tre e galement congur (seulement sous Linux et FreeBSD). La compression peut e ee dans Apache. Exemple : [compressionLevel] = 0 [MaxFileSize] dit Entier. Indiquez la taille maximale des chiers e es par TYPO3. Cette valeur est pertinente uniquement dans le contexte des tailles de chiers d enis pour PHP dans le chier [Link]. Exemple : [maxFileSize] = 10000 [RTEenabled] Bool een(0, 1). Cette option vous permet dactiver (1) ou de d esactiver (0) globalement le Rich Text Editor ind ependamment de la conguration dans le backend. Exemple : [RTEenabled] = 1 [forceCharset] Cha ne de caract` eres. Le jeu de caract` eres est normalement en accord avec le jeu de langues dans le backend des utilisateurs respectifs. Cette option permet de le d enir pour tous les utilisateurs. Les options sont indiqu ees dans les tables de jeu de caract` eres et dans le r epertoire t3lib/csconvtbl/. Pour lencodage Unicode par exemple, vous pouvez utiliser utf-8. Sp eciez les jeux de caract` eres en minuscules. Exemple : [forceCharset] = iso-8859-8 [installToolPassword] Cha ne de caract` eres. Il sagit de la valeur de hachage du mot de passe pour loutil dinstallation. Pour bloquer lacc` es, nentrez rien. Il est judicieux de prot eger en outre ` laide dun mot de passe via un le r epertoire de loutil dinstallation, typo3/install/, a chier .htaccess. Exemple : [installToolPassword] = e1c102cf0300bf73e47018f5bd7766e5 [trackBeUser] ` TYPO3 de tracer dans la table sys_ Bool een (0,1). Entrez la valeur 1 pour demander a 62

2.5 Options de conguration dans TYPO3_CONF_VARS

trackbeuser chaque appel dun script dans le backend. Vous devez aussi installer lextension beuser_tracking. Exemple : [trackBeUser] = 0 [defaultUserTScong] Cha ne de caract` eres. TypoScript : cette option permet de d enir du code TypoScript par d efaut valable pour tous les utilisateurs backend (voir chapitre 4.8). Exemple : [defaultUserTScong] = [Link]= 1 [defaultPageTScong] Cha ne de caract` eres. TypoScript : cette option permet de d enir du code TypoScript par d efaut valable pour toutes les pages (voir chapitre 4.8). Exemple : [defaultPageTScong] = mod.web_layout.tt_content.colPos_list = 0,3 [enabledBeUserIPLock] Bool een (0,1). En entrant 1, vous activez loption User/Group TSCong [Link]. Une conguration plus pouss ee est possible via le TSCong de lutilisateur ou du groupe ` param a etrer. Exemple : [enabledBeUserIPLock] = 1 [leDenyPattern] Cha ne de caract` eres. Sp eciez les s equences de caract` eres selon la syntaxe de la fonc` ces s tion eregi(). Les chiers correspondant a equences ne sont pas renomm es ou charg es sur le serveur. Exemple : [leDenyPattern] = \.php\.|\.php3\. [interfaces] ` quelles interfaces lutilisateur acc` Indiquez ici a ede apr` es avoir ouvert une session dans le backend, et dans quel ordre. Les choix possibles sont backend et frontend (s epar es ch par une virgule le cas e eant). Exemple : [interfaces] = backend [loginLabels] crites avec dautres exLes options dentr ee de l ecran douverture de session sont r ee pressions, en franc ais par exemple. Exemple : [loginLabels] = Utilisateur|Mot de passe|Interface|Ouvrir une session|Fermer la session|... [noticationPrex] ` ladministraCette option permet de cr eer un en-t ete pour les messages du syst` eme a teur. Exemple : [noticationPrex] = Les miracles saccomplissent parfois. . . [createGroup] Entier. Sp ecie le groupe lors de la cr eation de nouveaux chiers et r epertoires. Le 63

2 Installation

tre chang groupe peut e e sur les syst` eme UNIX. Activez cette option si vous voulez changer le groupe des chiers et des r epertoires. Cest utile dans tous les cas o` u le serveur Web op` ere avec un utilisateur ou un groupe diff erent du v otre. Dans ce cas, cr eez un nouveau groupe, et ajoutez-vous-y, ainsi que lutilisateur du serveur Web. D` es ce mo` 0 ([Link]. ment, vous pouvez xer le dernier bit de leCreateMask/folderCreateMask a tre un membre 770). Important : lutilisateur sous lequel votre serveur Web op` ere doit e du groupe que vous sp eciez ici. Sinon, vous risquez de voir surgir des erreurs. Exemple : [createGroup]= [lockIP] Entier (O-4). Verrouillage de la session IP des utilisateurs backend. Voir [FE][lockIP] pour plus de d etails. La valeur par d efaut est 4. Exemple : [lockIP]=4 [sessionTimeout] Entier. Sp ecie la dur ee maximale dune session pour les utilisateurs backend. La valeur par d efaut est 3600 secondes, soit une heure. Exemple : [sessionTimeout]=3600 [loginSecurityLevel] Cha ne de caract` eres. Mot-cl e qui d etermine le niveau de s ecurit e du login dans le backend. normal signie que le mot de passe du formulaire didentication est envoy e en clair . challenge veut dire que le password nest pas envoy e, mais quune valeur de hachage est calcul ee. En sp eciant superchallenged, la valeur de hachage est calcul ee sur le mot de passe avant que cette valeur soit elle-m eme combin ee avec la valeur challenge (de cette mani` ere, la valeur de hachage du mot de passe est enregistr ee dans la base de donn ees et non plus le mot de passe lui-m eme ). NE PAS CHANGER cette valeur manuellement ; sans un autre service didentication, cela emp eche les ouvertures de session dans TYPO3 puisque la m ethode superchallenged est encod ee dans le syst` eme didentication par d efaut. Exemple : [loginSecurityLevel]=normal [useOnContextMenuHandler] Bool een. Si loption est activ ee, le clic droit (right-click) du menu contextuel est activ e dans le backend m eme si ce nest pas un attribut XHTML ! Exemple : [useOnContextMenuHandler]=1 [accessListRenderMode] [explicitADmode]

2.5.5 [FE]:$TYPO3_CONF_VARS["FE"]
Les param` etres de conguration dans la section suivante se r ef` erent au frontend, cest-` a-dire aux sites Web publi es par TYPO3. 64

2.5 Options de conguration dans TYPO3_CONF_VARS

[png_to_gif] Bool een (0,1). La valeur 1 active la conversion de tous les chiers PNG g en er es dans le frontend en chiers GIF, ce qui laisse un grand nombre de chiers temporaires dans le r epertoire typo3temp/. Exemple : [png_to_gif] = 0 [tidy] ` laide du Bool een (0,1). Si vous indiquez 1, le code HTML est nettoy e et optimis ea programme tidy. Cette option est recommand ee, surtout pendant les p eriodes de d eve` ce que le code HTML g loppement, de mani` ere a en er e soit plus lisible. Souvenez-vous toutefois que tidy, selon les options, nettoie ou r epare le code HTML d efectueux. Il est viter de charger pr ef erable de d esactiver cette option pour les syst` emes en ligne pour e ` ladresse suivante : [Link] inutilement le serveur. tidy est disponible a People/Raggett/tidy/. Exemple : [tidy] = 0 [tidy_option] Options : [all, cached, output]. all provoque le nettoyage par tidy de tout le contenu avant quil soit sauv e, ou pas, dans le cache. cached nettoie le contenu uniquement avant quil soit sauv e dans le cache. output nettoie le code HTML seulement sil est ` partir du cache. demand ea Exemple : [tidy_option] = cached [tidy_path] ` lendroit ad Sp eciez la commande tidy, chemin et options inclus, a equat. Dautres pa tre d ram` etres que ceux par d efaut peuvent e enis suivant la documentation de tidy. Pour g en erer du XHTML par tidy, ajoutez lexpression output-xhtml true. Exemple : [tidy_path] = tidy -i --quiet true --tidy-mark true -wrap 0 [logle_dir] crit les chiers Chemin. Le r epertoire que ce chemin indique est celui dans lequel TYPO3 e log selon la d enomination des serveurs Web, pour leur traitement par des programmes statistiques. Le serveur Web doit avoir le droit d ecrire dans le r epertoire. Le nom du ` r epertoire doit se terminer par une barre oblique. Vous trouverez plus dinformations a la section 4.12.2. Exemple : [logle_dir] = /srv/www/logs/ [logle_write] crire des chiers log. Par d Il existe plusieurs m ethodes pour e efaut, TYPO3 utilise la commande UNIX echo. Si vous entrez fputs, TYPO3 utilise alors la fonction PHP du galement en safe_mode. m eme nom qui fonctionne e Exemple : [logle_write] = fputs [publish_dir] Chemin menant au r epertoire dans lequel TYPO3 publie les pages HTML de mani` ere 65

2 Installation

statique. Le serveur Web doit avoir le droit d ecrire dans le r epertoire. Les pages peuvent tre publi ` partir du panneau dadministration dans la zone publish. alors e ees a Exemple : [publish_dir] = /srv/www/htdocs/publish/ [addAllowedPaths] Chemins s epar es par des virgules. Le stockage des ressources associ ees au TypoScript se fait dans les r epertoires que vous indiquez ici. Les chemins sont relatifs au r epertoire Web. Le r epertoire par d efaut commence par une barre oblique ; sans barre oblique, chaque r epertoire qui commence avec la m eme expression est accept e. Exemple : [addAllowedPaths] = b2b/, /b2c/ [allowedTempPaths] Chemins s epar es par des virgules. Il sagit de chemins additionnels o` u vous placez des images temporaires pour lutilisation de imgResource dans le TypoScript. Exemple : [allowedTempPaths] = b2btemp/ [debug] Bool een (0,1). Lorsque loption est activ ee (1), les informations de d ebogage sont in tre fait par TypoScript. diqu ees dans le frontend. Cela peut aussi e Exemple : [debug] = 1 [simulateStaticDocuments] Bool een (0,1). Avec cette entr ee, lafchage dadresses URL statiques simul ees est activ e tre congur par d efaut, mais doit e e s epar ement par TypoScript. Exemple : [simulateStaticDocuments] = 1 [noPHPscriptInclude] Bool een (0,1). Lorsque cette option est activ ee, seuls les scripts PHP situ es dans le r epertoire media/scripts/ sont appel es par TypoScript. Exemple : [noPHPscriptInclude] = 0 [compressionLevel] Cette valeur d enit par la fonction zlib en PHP la compression des pages HTML dans le frontend. La valeur 1 correspond au taux de compression le plus faible et la valeur 9 au plus important. Plus le taux de compression est important, plus la bande passante est pargn e ee, mais plus la charge du serveur est grande. Lentr ee TRUE permet au taux de ` la charge du syst` compression d etre automatiquement adapt ea eme. Exemple : [compressionLevel] = 0 [compressionDebugInfo] Bool een (0,1). Les tailles des versions comprim ees et non comprim ees dune page sont tre indiqu ees au bas de celle-ci lorsque vous activez cette option. Ceci devrait toutefois e tant donn uniquement utilis e pour des tests, e e que le contenu est comprim e deux fois an dafcher ces statistiques. Exemple : [compressionDebugInfo] = 0 66

2.5 Options de conguration dans TYPO3_CONF_VARS

[pageNotFound_handling] ` cette option, vous sp ` TYPO3 comment r ` des Cha ne de caract` eres. Gr ace a eciez a eagir a requ etes de pages lorsquelles ne sont pas disponibles. Le comportement par d efaut est dafcher la page la plus proche . En entrant true ou 1, un message derreur safche. Une alternative est de sp ecier une page HTML. Exemple : [pageNotFound_handling] = [Link] [pageNotFound_handling_statheader] Cha ne de caract` eres. Si loption [pageNotFound_handling] est activ ee, la cha ne de caract` eres sp eci ee est toujours envoy ee comme en-t ete. Exemple : [pageNotFound_handling_statheader] = Status: 404 Not Found [userFuncClassPrex] Ce pr exe est la premi` ere partie, soit de chaque fonction, soit du nom dune classe appel ee par TypoScript, par exemple dans la fonction stdWrap. Exemple : [userFuncClassPrex] = user_ [addRootLineFields] ` la Liste s epar ee par des virgules. Une liste de champs de la table pages est ajout ee a requ ete de s election. Exemple : [addRootLineFields] = [checkFeUserPid] Bool een (0,1). Si loption est activ ee, les formulaires didentication dans le frontend doivent sp ecier lID de la page (pid) sous lequel les utilisateurs frontend sont enregistr es. Si loption est d esactiv ee (0), la conguration eval de uniqueInPid dans le $TCA tre chang pour le champ fe_users.username devrait e ee en unique. Lentr ee ressemble ` ceci : $TCA[fe_users][columns][username][cong][eval] = nospace,lower, alors a required,unique; Lendroit de la sauvegarde nest plus sp eci e dans le TypoScript de la page sur laquelle le formulaire didentication est situ e ; tous les utilisateurs FE sont globalement valides. Exemple : [checkFeUserPid] = 1 [defaultUserTScong] Cha ne de caract` eres. Pr ed enissez les entr ees TSCong pour tous les utilisateurs frontend et les groupes. Exemple : [defaultUserTScong] = [defaultTypoScript_constants] Cha ne de caract` eres. Cette option permet de pr ed enir les constantes TypoScript pour tout le syst` eme. Exemple : [defaultTypoScript_constants] = [defaultTypoScript_editorcfg] Cha ne de caract` eres. Permet de d enir la conguration editorcfg de TypoScript pour 67

2 Installation

tout le syst` eme. Cette option est utilis ee par CSS Styler (cl e dextension : tstemplate_ cssanalyzer). Exemple : [defaultTypoScript_editorcfg] = [dontSetCookie] Bool een (0,1). Le syst` eme ne met aucun cookie dans le frontend lorsque cette option est activ ee, ce qui a pour effet demp echer les ouvertures de session pour lidentication. Exemple : [dontSetCookie] = 0 [get_url_id_token] Cha ne de caract` eres. Si loption TypoScript [Link] est activ ee, les utilisateurs, dans le frontend, peuvent ouvrir une session sans cookie. Dans ce cas, la session de lutilisateur est g er ee via un param` etre get. Cest le nom de ce param` etre que vous devez saisir ici. Ce type dadministration de session nest en principe pas recommand e, car il m` ene plus ` des erreurs que la variante avec cookies. facilement a Exemple : [get_url_id_token] = SESSID [content_doktypes] Cha ne de caract` eres. D enissez dans une liste s epar ee par des virgules les types de pages (valeur du champ [Link]) qui sont reconnues par le syst` eme comme pages ou dossiers syst` eme. Exemple : [content_doktypes] = 1,2,5,7 [enable_mount_pids] Bool een (0,1). Vous permet de d esactiver globalement (0) la fonction de point de montage pour les pages. Exemple : [enable_mount_pids] = 1 [pageOverlayFields] Cha ne de caract` eres. Les champs sp eci es sont utilis es dans les requ etes de bases de donn ees pour les sites Web multilingues. Cette option est pertinente pour les extensions ` la table pages. qui ajoutent leurs propres champs a Exemple : [pageOverlayFields] = title,subtitle,nav_title,media,keywords,description, abstr... [strictFormmail] Bool een. La valeur 1 sp ecie que la fonctionnalit e formmail de TYPO3 envoie des t emails seulement aux destinataires qui ont e e encod es par le syst` eme. Cest une protection contre les personnes malveillantes qui pourraient d etourner lutilisation du formulaire mail. Exemple : [strictFormmail] = 1 [secureFormmail] Bool een. La valeur 1 sp ecie que la fonctionnalit e formmail de TYPO3 envoie des emails seulement aux destinataires qui sont d enis dans lenregistrement de l el ement 68

2.5 Options de conguration dans TYPO3_CONF_VARS

de contenu associ e au formulaire. Cest une protection contre les personnes malveillantes qui pourraient d etourner lutilisation du formulaire mail. Exemple : [secureFormmail] = 1 [lockIP] ` z Entier (0-4). Si cette valeur est sup erieure a ero, un contr ole est effectu e sur le param` etre REMOTE_ADDR_IP des utilisateurs du frontend (fe users) durant leur session. Cela am eliore la s ecurit e, mais peut couper lacc` es si lutilisateur change dadresse durant sa session (dans ce cas, choisissez une valeur plus basse : 2 ou 3). La valeur enti` ere tre incluses pour la v indique combien de parties de ladresse IP doivent e erication. ` 1-3 signie respectivement que la premi` R eduire la valeur a ere, la deuxi` eme ou la troisi` eme partie de ladresse IP est utilis ee. 4 constitue lenti` eret e de ladresse IP et est la valeur recommand ee. 0 (z ero) d esactive la v erication. Exemple : [lockIP] = 2 [loginSecurityLevel] Cha ne de caract` eres. Voir la description de TYPO3_CONF_VARS[BE][loginSecurityLe lev tre vel]. L etat par d efaut du frontend est normal. Dautres niveaux plus e es peuvent e congur es. Exemple : [loginSecurityLevel] = normal [lifetime] ` z Entier positif. Si la valeur est strictement sup erieure a ero, le cookie dun utilisateur FE nest pas un cookie de session (effac e lorsque la fen etre du navigateur est ferm ee), mais plut ot un cookie avec une dur ee de vie indiqu ee par la valeur. Par exemple une valeur de 3600*24*7 aura pour r esultat une identication automatique de lutilisateur FE durant toute une semaine. Exemple : [lifetime] = 604800 [maxSessionDataSize] Entier. Sp ecie la taille maximum (en octets) des donn ees de sessions frontend qui sont sauvegard ees dans la table fe_session_data. 0 signie quil ny a pas de limite. Cependant, cette valeur nest pas conseill ee, car on ne v erie plus d` es ce moment que les donn ees de session sont enregistr ees seulement apr` es lactivation dun cookie de conrmation. Exemple : [maxSessionDataSize] = 10000 [lockHashKeyWords] Liste de valeurs s epar ees par des virgules. La seule valeur est pour linstant useragent. Cette valeur signie que la session utilisateur de frontend d epend de la valeur du param` etre HTTP_USER_AGENT, diminuant ainsi le risque de d etournement de session. Cependant, dans certains cas (tels que des solutions de paiement), vous devez d esactiver cette option (p. ex. avec une cha ne de caract` eres vide) car le cookie de session est utilis e. [hidePagesIfNotTranslatedByDefault]

69

2 Installation

2.5.6 Autres options


[MODS]: $TYPO3_CONF_VARS["MODS"] t Contenait les options de conguration des modules, mais a e e remplac ee par le syst` eme dextensions. [USER]: $TYPO3_CONF_VARS["USER"] t Contenait les options de conguration des param` etres de vos propres scripts mais a e e remplac ee par le syst` eme dextensions. [SC_OPTIONS]: $TYPO3_CONF_VARS["SC_OPTIONS"] Cette section est utilis ee pour rendre disponibles vos propres options de conguration pour nimporte quel script dans TYPO3 (en g en eral, des modules backend). [EXTCONF]: $TYPO3_CONF_VARS["EXTCONF"] Vous pouvez rajouter ici vos options de conguration pour vos propres extensions. Pen tre afch dant linstallation dans le gestionnaire dextensions, celles-ci devront e ees en utilisant le chier ext_conf_template.txt. Exemple : $TYPO3_CONF_VARS[EXTCONF][ma_cle_extension][mon_option] = ma_valeur;

2.6 S eparation du serveur de production et du serveur en ligne


Lorsque vous avez besoin daugmenter vos performances, et pour des raisons de s ecurit e, il tre utile, et m peut e eme n ecessaire, de partager entre plusieurs serveurs la g en eration des pages et dautres contenus ainsi que leur pr esentation. Une possibilit e est de publier le site Web en pages HTML statiques, sans avoir ni la base de donn ees ni TYPO3 sur le syst` eme en ligne. Mais dans le sc enario standard, le site Web lui l ` partir de la base de donn m eme contient ces e ements dynamiques g en er es a ees, ce qui rend TYPO3 n ecessaire sur le syst` eme en ligne. Le probl` eme principal dun tel sc enario est la synchronisation du contenu de la base de donn ees entre les diff erents syst` emes. En effet, plusieurs tre impliqu serveurs pourraient e es, par exemple pour r epartir la charge. Diff erents m ecanismes de synchronisation sont disponibles, en fonction de la base de donn ees utilis ee. Consultez la documentation de votre vendeur de base de donn ees. La synchronisation directe ne vous permet pas de contr oler le processus de publication : ce qui se trouve sur le syst` eme de production est automatiquement plac e en ligne. Une alternative est de r ealiser manuellement la synchronisation, en fonction du SGBDR utilis e, pour permettre tape suppl une e ementaire dans la mise en ligne du contenu. Pour linstallation de TYPO3 supportant le site en ligne et noffrant pas de fonction d edition, il est judicieux de d esactiver les identications des utilisateurs backend en donnant la valeur 1 au param` etre $TYPO3_CONF_VARS[BE][adminOnly] de la section All Conguration de loutil dinstallation. 70

2.7 Sauvegardes

2.6.1 Pages statiques


` la section 2.5.5, une seconde possibilit Comme nous lavions d ej` a mentionn e bri` evement a e, encore plus simple, est de publier des pages statiques. Une entr ee dans loutil dinstallation, ` la conguration dans le panneau dadministration dans le frontend, permet de combin ee a sauver toutes les pages Web dans un r epertoire pr ed eni du serveur.
Figure 2.8: Publication de pages statiques sur plusieurs niveaux dans le panneau dadministration du frontend

Il existe dautres logiciels qui permettent comme TYPO3 de publier des pages statiques. Par tre t exemple, loutil OpenSource HTTrack est disponible sous Linux et Windows et peut e el e` ladresse : [Link] charg e gratuitement a

2.7 Sauvegardes
Il existe plusieurs m ethodes pour cr eer des sauvegardes. La plupart des entreprises ont leurs propres strat egies de sauvegarde, et le moyen le plus s ur est dinclure le r epertoire ad equat du serveur Web dans ces routines de sauvegarde, sans oublier le r epertoire o` u les chiers de base de donn ees sont enregistr es. ` partir de TYPO3. TouIl existe diff erentes extensions disponibles pour cr eer des sauvegardes a tefois, m eme un administrateur relativement inexp eriment e peut facilement mettre en place une sauvegarde automatique au niveau du syst` eme dexploitation, ce qui est une meilleure ` chaque fois. solution, puisque les sauvegardes ne sont plus lanc ees manuellement a Avec une entr ee dans le syst` eme crontab (UNIX), ce script est appel e r eguli` erement : dans ` une heure du matin. lexemple ci-dessous, il est lanc e tous les jours a D` es lors, les chiers de sauvegarde sont copi es automatiquement sur un syst` eme physiquement s epar e. Un script tel que celui pr esent e ci-apr` es r ealise facilement et automatiquement cette ` rsync. Une cl op eration gr ace a e SSH est n ecessaire pour activer la transmission des donn ees sous forme crypt ee. Voici un exemple de script12 :
#!/bin/sh # script rsync_backup.sh # backup of webserver document root via rsync to backup server # additional do a dump of typo3-db
12 avec

` Harald Oest de [Link] nos remerciements a

71

2 Installation

# ip or fqhn of backup server SERVER="my_backup_server" # user account at backup server USER="my_username" # ssh-key (without passphrase!) used for login SSHKEY="/root/.ssh/backup_server_key" # destination dir at backup server DSTDIR="/typo3_bkp" # name of local typo3 database DB="typo3_db" # user account to access typo3 database DB_USER="typo3_db_user" # password to access typo3 database DB_PASS="typo3_db_password" # these directories will be rsynced with backup server DIRS="/srv/www" # do a mysql-dump and store result in source dir /usr/bin/mysqldump --password=$DB_PASS -u $DB_USER $DB > \ /srv/www/typo3db_bkp.sql # rsync all requested dirs for DIR in $DIRS; do logger "rsync backup $DIR to $SERVER" rsync --rsh="ssh -i $SSHKEY" -a $DIR $USER@$SERVER:$DSTDIR done; # get actual size of backup ACT_SIZE = ssh -i $SSHKEY $USER@$SERVER "du -sh $DSTDIR" logger "total backup size: $ACT_SIZE"

Vous g en erez une cl e SSH sans demande de mot de passe comme suit :
#ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/backu p_server_key Enter passphrase (empty for no passphrase): [Enter] Enter same passphrase again: [Enter] Your identification has been saved in /root/.ssh/backup_server_key. Your public key has been saved in /root/.ssh/backup_server_key.pub. The key fingerprint is: [Link] root@local_box

t e et la cl La paire de cl es a maintenant e e cr ee e priv ee est d ej` a au bon endroit (/root/.ssh/back` envoyer la cl up_server_key). Il reste a e publique au serveur de sauvegarde :
#scp /root/.ssh/backup_server_key.pub \ > user@my_backup_server:/home/.ssh

` pr ` my_backup_server et activez la cl A esent, connectez-vous a e SSH : 72

2.8 Mises a ` jour


root@my_backup_server: # cat /home/.ssh/backup_server_key.pub >> \ > /home/.ssh/authorized_keys

Pour leffacer :
root@my_backup_server: # rm /home/.ssh/backup_server_key.pub

La m eme chose sur lordinateur local :


#rm /root/.ssh/backup_server_key.pub

Vous pouvez maintenant vous connecter au serveur de sauvegarde sans mot de passe :
#ssh -i /root/.ssh/backup_server_key user@my_backup_server

` une heure du matin : Voici un exemple dune entr ee crontab qui appelle la sauvegarde rsync a
# call backup script every night at 01.00 0 1 * * * root test -x /root/bin/rsync_backup.sh && \ /root/bin/rsync_backup.sh

` jour 2.8 Mises a


` jour de TYPO3 sont particuli` Les mises a erement agr eables pour ladministrateur car elles durent rarement plus de quelques minutes, et ceci gr ace aux liens symboliques d ej` a souvent mentionn es. Ceux-ci pointent vers un r epertoire unique qui contient le code source de TYPO3 ; tous les autres chiers sont soit ind ependants de la version et restent o` u ils sont, soit sont galement des liens symboliques. e tape de toute mise a ` jour est de sauvegarder lensemble de linstallation, ou du La premi` ere e moins la base de donn ees. Avec la commande :
#/srv/wwwmysqldump -u user -p nom_base_donn ees [Link]

vous cr eez un chier de sauvegarde apr` es avoir entr e le mot de passe de lutilisateur de la base ` la de donn ees de MySQL. En cas durgence, vous pouvez d esarchiver cette sauvegarde gr ace a commande :
#/srv/wwwtar xzf [Link]

et ensuite, par la commande :


#/srv/wwwmysql -u user -p datenbankname < [Link]

restaurer la sauvegarde dans la base de donn ees. ` la mise a ` jour : pour utiliser la nouvelle version plut Retour a ot que lancienne, supprimez lancien lien symbolique. Par exemple, d` es que vous entrez :
#/srv/wwwrm typo3_src

73

2 Installation

votre site nest plus en ligne ! Avec :


#/srv/wwwln -s ../typo3-src-4.0 typo3_src

un nouveau lien symbolique pointe vers la nouvelle source que vous venez de placer sur le serveur (cf. section 2.3.1). Sous Windows et g en eralement avec des distributions zip, tous les r epertoires TYPO3 (typo3, tre replac t3lib, tslib) doivent e es manuellement, si vous nutilisez pas Junction. ` jour est d Ainsi, la mise a ej` a termin ee au niveau des chiers si le lien symbolique pointant vers . la version TYPO3 est recr ee Rappelez-vous bien quapr` es un changement de version de TYPO3, vous devriez dabord ap` la base peler le Database Analyzer de loutil dinstallation. Les changements n ecessaires a ` laide de la fonction COMPARE. Ces changements de donn ees sont identi es et afch es a concernent lajout de nouveaux champs dans la base de donn ees ou des changements de ` jour. La d enition de champs existants. S electionnez Write to database et ex ecutez la mise a galement les tables de bases de donn ` des extenfonction COMPARE enl` eve e ees associ ees a t sions qui ont e e d esinstall ees. Il va de soi que vous devez savoir ce que vous faites lorsque vous ex ecutez cette fonction, et bien s ur : sauvegardez, sauvegardez, sauvegardez ! Les tables ` enlever sont dabord renomm ` leur nom le pr et les champs a es en ajoutant a exe zzz_. Ils sont r eactiv es en enlevant ce pr exe, par exemple avec phpMyAdmin . videntes, de ne pas ex ` jour sur des sites Il est conseill e, pour des raisons e ecuter la mise a tr` es visit es. Dans ce cas-l` a, il est pr ef erable de faire une copie de la base de donn ees et des ` la nouvelle base de donn chiers, de d enir lacc` es a ees et dex ecuter des sc enarios de reprise ` migrer en quelques secondes vers un nouveau de donn ees. Cela vous pr epare par ailleurs a ` changer de disque dur. serveur ou a

2.9 En cas de probl` eme


La communaut e TYPO3 vous propose plusieurs types daide en cas de probl` eme dinstallation. tant donn Ces probl` emes sont tr` es diversi es e e les diff erentes combinaisons possibles de serveur Web, de base de donn ees et de distribution PHP utilis es. Deux mailing lists existent pour les questions dinstallation, lune pour le syst` eme dexploitation Linux et lautre pour Win tant aussi utilis dows, cette derni` ere e ee via le protocole nntp (newsgroups). En outre, il existe une archive en ligne que vous devriez certainement consulter an de vous assurer que votre t question na pas d ej` ae e pos ee. Souvenez-vous que les membres de la communaut e dutilisateurs de TYPO3 qui vous aident sont des volontaires : en leur demandant de laide, ne les t distrayez pas avec des questions inutiles. Si vous d ecouvrez un bogue qui na pas encore e e ` ladresse [Link] d ecrit, enregistrez-vous a

74

TYPO3 pour les r edacteurs

TYPO3 pour les r edacteurs


En 1999, Tim Berners-Lee, le p` ere du World Wide Web, d eclara : From the point of view of users, the biggest change I want to see is to make everyone capable of writing Web pages and making links just as easily as people can make e-mail messages today. 1 La perc ee des syst` emes de gestion de contenu est principalement due au fait quils r epondent aux demandes des particuliers souhaitant publier du contenu sur le Web. Toutefois, le taux de succ` es varie en ce qui concerne la facilit e dutilisation, en particulier pour les syst` emes de tudes gestion professionnelle de contenu. La soci et e Forrester Research, sp ecialis ee dans les e tudi de march e, a men e une enqu ete en 2001 r ev elant que lergonomie des syst` emes e es devait tre am e elior ee de toute urgence pour r epondre aux besoins des utilisateurs.2 ` laide Ce que le vocable anglais reprend sous le terme de usability se mesure et sobtient a d etapes d enies. En voici quelques exigences habituelles : ` ses besoins, e tre intuitive et simple ; Linterface de lutilisateur doit r epondre a
2 [Link] 1 [Link]

Chapitre
77

3 TYPO3 pour les r edacteurs

tre coh Elle doit e erente et garder une structure uniforme ; Elle doit offrir la possibilit e de la personnaliser suivant le r ole r eserv e aux diff erents utilisateurs ou groupes dutilisateurs ; ` lutilisateur des outils daide contextuels, Chaque fonction de lapplication doit proposer a un guide dutilisation et des exemples pour d ebutants ; Linterface doit offrir la possibilit e dannuler des manipulations individuelles op er ees au cours dune session, simplement en poussant sur un bouton (fonction Annuler ). Un tapes de travail pr historique des modications permet de recr eer les e ec edemment enregistr ees. De plus, les assistants (wizards) sont importants an de guider les utilisateurs lors dop erations sp eciques. En r` egle g en erale, un manque ou un exc` es de fonctionnalit es nuit au bon d eroulement du travail. Il est donc n ecessaire davoir la possibilit e d etendre ou de r eduire les fonctionnalit es : ` leur travail. De le syst` eme doit fournir exactement aux utilisateurs les fonctions n ecessaires a tre minimales, an plus, les connaissances techniques requises pour utiliser le CMS doivent e de r eduire le plus possible leffort dinstallation. TYPO3 offre tous ces avantages, et plus encore. Au cours de ses huit ann ees de d eveloppement, t la convivialit e de linterface utilisateur a e e optimis ee gr ace aux exp eriences des particuliers qui lutilisent au quotidien (environ 122 000 installations sont actuellement op erationnelles).

du r 3.1 Le role edacteur


La t ache du r edacteur est de cr eer de nouveaux contenus, de les adapter au m edia auquel ils sont destin es, et de les int egrer dans lapplication correspondante, un site Web par exemple. Ladministrateur place alors lutilisateur, par le biais des droits dacc` es, dans une sorte de bac ` sable a ` partir duquel il a un acc` ` ses fonctionnalit a es (limit e) au syst` eme et a es. D` es lors, luti` son espace de travail (backend) qui correspond a ` ses t lisateur acc` ede a aches et aux ressources qui lui sont allou ees (voir chapitre 4.1). Alors quun r edacteur de presse, par exemple, introduit3 tendue, de par de nouveaux articles dans le syst` eme, un r edacteur en chef aura une vue plus e ` son groupe dutilisateur. ses droits dacc` es associ es a
R ef erence

509060

En fonction de la dur ee du cycle de vie du contenu et de la complexit e des proc edures de travail, le r edacteur se contente de transformer certaines parties du contenu sur litin eraire vers sa publication. Le r edacteur travaille au sein de ce quon appelle un workow, avec dautres r edacteurs. Nous allons vous pr esenter ci-apr` es linterface utilisateur dans laquelle le contenu est r edig e, ainsi quun module de t aches une sorte de centre de communication pour les membres dun projet. Nous poursuivrons en expliquant la fac on de cr eer une page et dy ajouter un contenu. Nous ne nous attarderons pas sur chaque champ (des rubriques daide contextuelles ainsi que ` cet effet, cf. r le tr` es complet Manuel du r edacteur sont pr evus a ef erence), mais plut ot sur laspect g en eral des pages et des types de contenu, ainsi que sur leur utilisation pratique. Les
3

R ef erence

509060

works in dans le jargon anglais des habitu es du CMS

78

3.2 Acc eder au syst` eme

diteur de texte, seront aspects sp eciques tels que la manipulation de Rich Text Editor, un e trait es s epar ement. Finalement, nous pr esenterons les proc edures et les outils qui simplient diteurs sur TYPO3. et rendent plus efcace le travail quotidien des e

3.2 Acc eder au syst` eme


TYPO3 est un syst` eme de gestion de contenu bas e sur une interface Web. Il est soit install e sur le serveur intranet dans une entreprise, soit sur un serveur Web ou extranet accessible ` jour le contenu dune page, les publiquement. Pour acc eder au syst` eme et cr eer ou mettre a r edacteurs nont besoin que dun navigateur et de ladresse Internet correcte, peu importent lendroit et lheure. TYPO3 fait la distinction entre deux zones diff erentes : le backend ou zone dadministration pour la gestion des pages et des donn ees, et le frontend, le site Web tel que le voient les visiteurs. Le r edacteur peut utiliser ces deux modes de TYPO3 pour modier le contenu. Alors que le backend offre un environnement de travail complet, comportant de nombreuses fonc tre utilis tionnalit es, le frontend peut e e de fac on tr` es simple et intuitive. Les outils d edition de l base sont fort semblables dans les deux zones ; les autres e ements et la mani` ere de travailler d ecrits ici se retrouvent partiellement dans le frontend.

3.2.1 Conguration du navigateur


TYPO3 fonctionne avec diff erents navigateurs (Netscape Navigator 6.x, 7.x, Mozilla Firefox, Internet Explorer 5.x, 6.x, etc.) qui varient l eg` erement dans leur afchage et leurs fonctionna` ceci pr` lit es. Ces diff erences ne sont pas signicatives, a es que Rich Text Editor nest disponible quavec Internet Explorer, parce quil n ecessite ActiveX de Microsoft. Il existe plusieurs alternatives pour Mozilla via linstallation dextensions dans le syst` eme. tre activ Le navigateur doit accepter les cookies, et le JavaScript doit e e. La conguration du tre ajust cache du navigateur doit e ee de sorte que la toute derni` ere version dune page soit servie lorsquon en fait la requ ete.
R ef erence

352869

3.2.2 Identication
Pour vous identier an dacc eder au backend, il vous suft dentrer lURL de votre site dans votre navigateur suivi de /typo3 (ex. : [Link] La fen etre didentication (voir image) appara t. Entrez votre nom dutilisateur et votre mot de passe. Les mots de passe pour lacc` es au backend sont transmis sous forme encrypt ee par TYPO3 et sauvegard es en toute s ecurit e dans le syst` eme de base de donn ees.
Figure 3.1: Identication avec nom dutilisateur et mot de passe

79

3 TYPO3 pour les r edacteurs

3.3 Interface utilisateur et modules


R ef erence

502403

Le backend d esigne linterface utilisateur de TYPO3 o` u travaille le r edacteur. Ladministration des pages et de leur contenu via linterface frontend sera reprise plus bas (cf. section 3.8). Une ` son espace de travail. Noubliez pas : lapparence fois que le r edacteur sest identi e, il acc` ede a ` un autre. Tout d de linterface utilisateur peut varier consid erablement dun r edacteur a epend de la conguration d enie par ladministrateur. Juste apr` es lidentication, vous vous trouvez ensuite soit sur une page daide, pr esentant une courte description de chaque module, soit dans le module Utilisateur Centre de t aches. En cliquant sur une des options de navigation du menu Web dans la partie gauche de la page, la structure du backend safche ainsi :

Figure 3.2: Module Aide sur les modules apr` es identication

Linterface utilisateur de TYPO3 est g en eralement divis ee en trois colonnes : le menu de mo` gauche, l aire de navigation avec larborescence au milieu, et la vue d ` dules a etaill ee a droite.

3.3.1 Zones de linterface utilisateur


Si plusieurs r edacteurs diff erents travaillent sur le m eme syst` eme, le module Utilisateur Centre de t aches (le centre de communication et dadministration de TYPO3) pr esente normalement une conguration par d efaut lorsquil est utilis e pour la premi` ere fois. On y retrouve les trois zones caract eristiques de linterface utilisateur. 80

3.3 Interface utilisateur et modules

Figure 3.3: Les trois zones du bureau dans le module T aches : menu de modules [1] aire de navigation [2] vue d etaill ee [3]

Menu de modules Le menu de modules constitue le menu principal du backend de TYPO3. Il reprend les modules auxquels un r edacteur particulier a acc` es. Les modules principaux (Web, Fichier, Doc, ...) ne sont quun groupement de sous-modules (ex. : Page, Voir, Liste, etc.) qui, eux, pointent vers les v eritables outils d edition du backend.
Figure 3.4: Congurations backend : deux utilisateurs ayant des droits dacc` es diff erents

81

3 TYPO3 pour les r edacteurs

Aire de navigation Apr` es avoir s electionn e un sous-module, la navigation se fait dans laire de navigation. Dans le module principal Web, la colonne centrale afche larborescence , o` u sont reprises toutes les pages auxquelles le r edacteur a acc` es (fg. 3.5[1]). ` larborescence des r On acc` ede a epertoires, donnant lacc` es au gestionnaire de chiers interne ` TYPO3, via le module principal Fichier (fg. 3.5[2]). a ` linstar de lexplorateur Windows et dautres gestionnaires de chiers, les niveaux de la strucA tre e tendus a ` laide des ic ture des r epertoires peuvent e ones + et - . Si vous cliquez sur ` droite. le titre, une vue d etaill ee du r epertoire s electionn e safchera a Si vous cliquez sur une ic one repr esentant un dossier, un menu contextuel safche an de permettre un acc` es rapide aux fonctions principales de travail. Dans les navigateurs Windows, ce menu souvre directement dans larborescence. Pour les autres navigateurs, les fonctions apparaissent dans le cadre sup erieur du backend. ` lesprit les r` Gardez a egles suivantes : = Cliquez sur licone l Appel des fonctions du chier (copier des e ements, couper etc.) Cliquez sur le titre = Visualisez/modiez le contenu
Figure 3.5: Arborescence des pages [1] et arborescence des r epertoires du gestionnaire de chiers [2]

Vue d etaill ee Le v eritable espace de travail se trouve dans la vue d etaill ee (troisi` eme colonne). Une multitude dinformations peuvent sy afcher en fonction du module s electionn e. Dans les modules principaux Web et Fichier, un menu contextuel est aussi disponible, an de simplier votre travail (rappelez-vous : cliquez sur lic one). 82

3.3 Interface utilisateur et modules

3.3.2 Modules principaux et sous-modules un aperc u


Web Le module Web est celui dont le r edacteur se sert le plus. Les pages et leur contenu y sont enregistr es, g er es et modi es. Les sous-modules sy rapportant vous offrent souvent plusieurs ` des r possibilit es pour arriver a esultats identiques. Page Le module Page permet de cr eer et de modier de nouvelles pages et leur contenu. Les options disponibles sont : Edition rapide Le contenu est afch e directement en mode d edition. Le menu d eroulant ou la barre de l bas de page vous donnent la possibilit e de passer dun e ement en cours de modication ` un autre. a Colonnes Afche le contenu de toutes les colonnes dune page. Langues Repr esente le contenu dune page class e selon la langue dans laquelle celle-ci est d enie. La gestion des traductions dune page ne pose pas de r eel probl` eme car TYPO3 permet lint egration dun site multilingue dans une seule et m eme arborescence. Informations sur la page Fournit une vue densemble des informations de base de la page ; vous pouvez par tre publi exemple voir quelle est la conguration du cache pour la page, si elle doit e ee pendant une p eriode d etermin ee, si son acc` es nest r eserv e qu` a certains utilisateurs ` lintention des moteurs de recherche se trouve frontend, ou quelle m eta-information a sur la page. Voir Le module Voir afche une page exactement comme un visiteur la verra sur le site. La page afch ee comporte aussi des petites ic ones crayon qui permettent d editer la page directe t ment. Ce module vous permet de visualiser des pages nayant pas encore e e mises en ligne. Liste ` leur contenu. Les utilisateurs L afchage liste donne un acc` es direct aux pages et a exp eriment es pr ef` erent g en eralement travailler dans ce module. En activant la Vue e tendue ` laide des cases a ` cocher situ ` et le presse-papiers a ees au bas de la vue d etaill ee, combin es a une vari et e de fonctions, il est possible d editer les enregistrements simultan ement, de fac on ` atteindre des objectifs pr ` la seca ecis. Vous trouverez plus dinformations sur cette fonction a tion 3.10. La Vue de localisation donne une vue densemble des diff erentes traductions des l e ements de contenu. 83
R ef erence

762976

3 TYPO3 pour les r edacteurs

Info ` propos de la page Dans le module Info se trouve un r esum e des informations importantes a s electionn ee. En fonction de ses droits dacc` es, le r edacteur y trouve diff erentes vues de la base de donn ees : Arborescence (vue densemble) Contient les param` etres de base (ex. : publication limit ee dans le temps ou droits dacc` es pour des groupes frontend), le cache et l age, ainsi quun aperc u des types denregistrements contenus dans les pages pour lesquelles le r edacteur a les droits d edition. Si vous utilisez cette vue sur plusieurs niveaux de larborescence, les valeurs dun champ sur un tre e dit ensemble de pages peuvent e ees en un seul clic, en utilisant lic one crayon . Localisation (vue densemble) ` plusieurs niveaux de page pour La visualisation des traductions vous permet dacc eder a v erier l etat des traductions. En m eme temps, vous pouvez cr eer des en-t etes pour de diter ou cr nouvelles pages de traduction, ou encore e eer de nouvelles traductions de contenus. Fichier journal Ce module garde une trace de lensemble des modications apport ees par tous les tre ajust r edacteurs ; la vue peut e ee dans la barre de navigation en fonction du nombre ` afcher et de la p de niveaux a eriode de temps sur laquelle les modications s eche tre lonnent. Dans la colonne D etails, lhistorique des modications individuelles peut e ` laide du lien - His. afch e et ouvert en formulaire d edition a Conguration TS de la page La Conguration TS de la page na pas beaucoup dimportance pour le r edacteur, et tre d devrait normalement e esactiv ee par ladministrateur ; elle montre les d etails TypoScript sp eciques aux pages et aux utilisateurs, qui sont importants pour les adminis t trateurs et les d eveloppeurs (la r` egle suivante sapplique ici : ce qui a e e d etermin e pour une page vaut pour toutes les pages qui lui sont subordonn ees). Statistiques dafchage Les Statistiques dafchage reprennent les donn ees relatives aux visites sur votre site. Si lextension Simple hit statistics est install ee sur votre syst` eme, ladministrateur peut rapidement trouver un bon r esum e du taux de fr equentation de chaque page du site.

Acc` es ` ce module, il peut afcher les permissions de chaque page via le Si le r edacteur a acc` es a e, mode Utilisateur. Si le r edacteur est le propri etaire dune page, cest-` a-dire quil la cr ee ` un groupe dont il peut (et dans ce cas uniquement) en transf erer les droits ou les retirer a ` un autre membre du groupe. il est membre, ou encore transf erer sa propri et e de la page a Le mode Permissions dresse la liste des propri etaires, du groupe dont il fait partie, et des permissions pour chacun. Le r edacteur ne peut administrer ici que les droits des pages dont il est propri etaire. 84

3.3 Interface utilisateur et modules

Fonctions Le module Fonctions contient des outils simpliant la cr eation et ladministration de pages et de contenu. Il est bien s ur n ecessaire que les extensions correspondantes aient pr ealablement t ` la disposition du r e e install ees et mises a edacteur. Les divers Assistants de ce module permettent de manipuler larborescence des pages pour la cr eation ou le tri de pages. Le mode Importer permet dimporter des parties enti` eres darborescence TYPO3. Loutil Text tools ef l fectue des recherches et/ou des remplacements des extraits de textes dans les e ements de contenu. ` laide dun exemple pratique a ` la section Nous aborderons lutilisation de ce dernier outil a 3.10.

Fichier TYPO3 g` ere toutes les ressources (telles que les gabarits HTML, les images ou les documents) dans le r epertoire leadmin/ de son gestionnaire de chiers. En fonction de ses t aches, le ` diff r edacteur rec oit des droits dacc` es a erents points de montage du gestionnaire de chiers. De plus, ladministrateur peut d eterminer pr ecis ement le type dacc` es : par exemple, si le r edacteur a le droit denvoyer vers le serveur, de d eplacer, deffacer, de renommer, d editer ou de cr eer de nouveaux chiers, voire de supprimer un r epertoire et ses sous-r epertoires.

Fichiers Le sous-module Fichiers permet au r edacteur dacc eder aux ressources susmentionn ees. Le contenu du dossier s electionn e safche dans la vue d etaill ee. Vous pouvez aussi naviguer via ` laide du les ic ones dossier de larborescence. Pour rendre les chiers accessibles, il suft, a menu contextuel, de les envoyer directement du PC du r edacteur ou du r eseau local vers son r epertoire respectif dans TYPO3. Encore une fois la r` egle suivante sapplique : = Cliquez sur licone Appelle les fonctions du chier (Copier, couper etc.) Cliquez sur le titre = Visualiser/ editer le contenu ` cocher situ Les cases a ees en bas de la vue d etaill ee activent lafchage de vignettes pour les chiers image et le presse-papiers reprend le contenu de la m emoire tampon pour copier ou d eplacer des chiers.

Images Le sous-module Images reproduit les chiers en mode pr evisualisation, accompagn es de d etails sur la taille de limage et de ses dimensions en pixels. 85

3 TYPO3 pour les r edacteurs

Doc ` des pages ou des e l Le module Doc permet dacc eder a ements de contenu que vous avez diter. Si vous avez une s ouverts an de les e erie denregistrements ouverts, ce module vous ` un module. Par cons permet de passer rapidement dun formulaire d edition a equent vous pouvez, par exemple, passer efcacement du gestionnaire de chiers au formulaire d edition l ` un autre via le menu dun e ement de contenu. Vous pouvez naviguer dun enregistrement a d eroulant. Si aucun document nest ouvert, une liste des derniers enregistrements modi es safche.
Figure 3.6: Afchage des derniers enregistrements modi es dans le module Doc

Utilisateur ` un utiliLe module Utilisateur montre les t aches et la conguration de linterface propres a sateur. Il offre aussi la possibilit e de communiquer entre utilisateurs. Centre de t aches Sous lappellation centre de t aches se cache le centre de communication de TYPO3. Plusieurs sous-modules permettent, par exemple, de sauvegarder des notes personnelles ou en` lint core de communiquer entre membres dun m eme projet a erieur de workows et du ` la section 3.4 syst` eme de messagerie. Nous d ecrirons le module plus en d etail a Conguration
R ef erence

582216

Chaque utilisateur a la possibilit e, dans une certaine mesure, dadapter son environnement ` ses besoins, a ` commencer par la s de travail de TYPO3 a election de la langue dans laquelle le backend est pr esent e. De plus, vous pouvez ajuster lafchage du backend en fonction de cran. De cette fac vos pr ef erences ou des performances de votre e on, le menu de modules peut tre afch e e sous forme de bo te de s election ou sous forme dic ones dans le cadre sup erieur du backend, an de gagner plus despace. Vous pouvez d ecider dafcher les rubriques daide pour les champs de saisie individuels, ou si vous le souhaitez, vous pouvez d ecider que les images list ees safchent automatiquement sous forme de vignettes. l Le menu contextuel ou le Rich Text Editor (pour les e ements de contenu Texte ou Texte tre d ` un certain nombre de ni& image) peuvent e esactiv es, les copies r ecursives limit ees a veaux, ou leffacement r ecursif totalement interdit ou d esactiv e. Il est de toute fac on recom-

86

3.4 Le module utilisateur centre de t aches comme centre de communication

mand e dactiver le chargement de chiers vers le serveur via le module Doc et le navigateur d el ements an de pouvoir travailler efcacement : de cette fac on, vous envoyez les chiers ` partir des modules o` a u vous travaillez, sans passer par le module Fichier. Ladministrateur peut, de mani` ere centralis ee, congurer linterface backend pour chaque utilisateur et chaque tre limit groupe. La validit e de certains param` etres peut e ee dans le temps (cf. chapitre 4.8.2). Si ladministrateur ne la pas d ej` a fait, vous devez saisir votre nom et adresse email dans la section Donn ees personnelles . Certaines extensions, telles que le module News, utilisent ces informations an de d eterminer automatiquement lauteur des nouvelles entr ees. Cochez la case en bas du formulaire an d etre inform e par email chaque fois que quelquun sidentie sous votre nom dutilisateur. Aide Le module Aide peut comprendre plusieurs sous-modules. En r` egle g en erale, les sous-modules ` propos de TYPO3 et Manuel sont activ Sur les modules, A es ; le premier pr esente la fonc` propos de la tion principale de chacun des modules, le deuxi` eme contient des informations a version utilis ee et des droits dauteur, et indique les termes de la licence de TYPO3. An que la description de toutes les sections relevant du r edacteur ainsi que de leurs options tre int dentr ee soit toujours disponible, le Manuel du r edacteur peut e egr e dans le backend ` titre dextension. a
R ef erence

647456

3.4 Le module utilisateur centre de t aches comme centre de communication


Ce module de TYPO3 propose plusieurs outils, facilitant l edition de contenu dans le cadre ` certaines actions et a ` cerplus large dun workow, et permettant dacc eder rapidement a l ` partir de larborescence des pages. Il offre aussi des fonctions tains e ements de contenu a importantes pour simplier et concentrer les t aches dans une partie du syst` eme. Si le module est appel e via Utilisateur Centre de t aches, laire de navigation afche les fonctions de s election. Nous les reprenons ici en d etail dans lordre o` u elles apparaissent.
Figure 3.7: Aire de navigation du module Utilisateur Centre de t aches (exemple)

87

3 TYPO3 pour les r edacteurs

Note rapide
R ef erence

740912

` lutilisateur backend un espace pour ses commentaires, ses notes Le champ de saisie offre a ` lutilisateur lors de louverture de sa proou dautres textes. Leur pr esence sera rappel ee a chaine session. Ces entr ees ne sont pas visibles pour les autres utilisateurs (` a lexception de ladministrateur).

Pages r ecentes
La fonction Pages r ecentes dresse, dans laire de navigation, une liste de liens vers les derni` eres dit pages e ees par lutilisateur. Si vous cliquez directement sur Montrer les d etails de toutes dit les pr es elections, une liste des enregistrements fr equemment e es safche, dans lordre chronologique de leur modication.

Actions
R ef erence

748421

` certains utilisateurs ou a ` Ladministrateur a la possibilit e dassigner des actions pr ed enies a ` laide des actions . Les types dactions repris ci-dessous font des groupes dutilisateurs a ` leur fonction, et non au nom sous lequel laction est afch r ef erence a ee dans le module Utilisateur Centre de t aches. Cr eer un utilisateur backend Un r edacteur peut cr eer ici un nouveau compte utilisateur backend avec seulement quelques informations et sans les droits dadministrateur. Ladministrateur peut assigner lui-m eme un nom aux commandes (ex. : Cr eer un nouveau responsable produits en utilisant la commande de type Cr eer un utilisateur backend ). SQL Query Cette fonction est utile si vous d esirez obtenir dans un format pr ed etermin e des donn ees en provenance directe de la base de donn ees, par exemple, les enregistrements de produits ou de transactions, puis les exporter en format CSV ou XML an de les utiliser dans dautres applications. Record list ` diff Elle montre les enregistrements associ es a erents endroits de larborescence des pages, an dy acc eder directement dans la vue d etaill ee du module Web Liste. Edit records Cette fonction cr ee une liste d el ements (page, contenu, autre enregistrement) depuis nimporte quelle position dans larborescence, et les rend disponibles pour un traitement rapide. ` la section 4.10. Lorsque vous entreprenez une La cr eation dactions est vue plus en d etail a action, la vue d etaill ee vous montre le type daction, la description de celle-ci, ainsi que len ou modi registrement qui sera cr ee e.

88

3.4 Le module utilisateur centre de t aches comme centre de communication

Figure 3.8: Vue d etaill ee dune action d edition de page

Messages
Dans la section Messages, le r edacteur retrouve un syst` eme simpli e de messagerie pour la communication interne au projet. Le r edacteur peut lutiliser pour envoyer (ou recevoir) des ` des membres individuels ou a ` des groupes. Les nouveaux messages sont messages internes a afch es dans le module Utilisateur Centre de t aches et enregistr es dans la bo te de tre d r eception [1]. Les messages qui y sont enregistr es peuvent e eplac es vers une archive ou tre lu par un utilisateur avant son prochain acc` effac es [2]. Si un message doit e es au backend, il est possible de le lui envoyer directement sur son adresse email. Cela implique bien s ur que le serveur Web ait aussi un serveur email. On peut r epondre aux messages rec us [3] en reprenant loriginal [4].
Figure 3.9: Vous avez un message : bo te de r eception [1], d eplacer ou effacer les emails [2], contenu du message [3], r epondre au message [4]

89

3 TYPO3 pour les r edacteurs

T aches
La section T aches contient les workows que ladministrateur d enit pour les r edacteurs.4 ` faire . En fonction des droits accord Dans la barre de navigation sont afch ees les t aches a es ` lint tre autoris ` initier de nouvelles t a erieur dun workow, un r edacteur peut e ea aches. Un tape bien auteur peut uniquement effectuer un changement de statut dans le cadre dune e d enie du processus, ou autoriser un enregistrement pour sa publication. La vue d etaill ee (troisi` eme colonne) reprend vos e l ements a ` faire, vos e l ements a ` faire pour dautres utilisateurs [2] pour autant que le r edacteur ait les permissions requises et lafchage des d etails pour lenregistrement s electionn e [3]. Le log de status indique toutes les tapes par lesquelles lenregistrement est pass tat actuel, avec la possibilit e e jusqu` a son e e d editer lenregistrement. Si le r edacteur a modi e son enregistrement, ou si certains obstacles surgissent, il y ajoute alors un nouveau statut accompagn e dun commentaire. Lenregistre tape suppl ment passe alors une e ementaire dans le workow [5]. Seuls les gestionnaires de ` initier un nouveau workow [6]. t aches sont habilit es a
Figure 3.10: Edition dun ` enregistrement a partir du workow via le module Centre de t aches

4 La

` la section 4.9. cr eation de workows est d ecrite a

90

3.5 Les pages, r eceptacles de contenu

3.5 Les pages, r eceptacles de contenu


l 3.5.1 Structure dun site, arborescence et e ements de contenu
Avant de pr esenter les t aches principales du r edacteur (cr eer des pages et du contenu), nous tape, non pas pour d eveloppons dabord le concept de base de TYPO3. Nous passons par cette e aborder les aspects techniques de TYPO3, mais principalement pour a) bien manipuler la notion darborescence lors de la cr eation dun site, cette derni` ere se mat erialisant sous la forme de l menus dans le frontend, et b) comprendre la relation entre les e ements de contenu et la page qui les contient. Pour illustrer notre propos, nous avons choisi comme exemple une petite application du site B2C classique. Celle-ci contient d ej` a plusieurs pages de diff erents types (voir fg. 3.11). Nous modierons graduellement cette application au cours des explications. Nous vous encou` la section 5.9, une variante de lapplication du ` lutiliser an de vous exercer. A rageons a site B2C nous servira de base pour expliquer la conguration et les d eveloppements plus avanc es du frontend. Larborescence du site est constitu ee de pages individuelles, telles que Accueil , Produit1 , Contacts , et des sections principales telles que Actualit es , enements , et Produits . Ev
Figure 3.11: Arborescence du site exemple

La page en tant que telle ne contient pas linformation ! Elle sert simplement de r eceptacle aux l e ements de contenu qui lui sont assign es. Le r edacteur travaillant dans TYPO3 doit rarement sinqui eter de questions techniques ; tout ce qui lui importe est de conna tre la position, lordre et le type dans lesquels il doit cr eer de nouvelles pages et sous-pages dans larborescence, et comment les d eplacer si n ecessaire. Le reste des manipulations est pris en charge par TYPO3 en interne. 91

3 TYPO3 pour les r edacteurs

Chaque page a un num ero didentication unique (ID). Il appara t quand vous placez votre souris sur lic one dune page, et est aussi visible dans le formulaire d edition den-t ete de page. ` la gure pr Par exemple, a ec edente, la page B2C Accueil a comme ID : 56. Le r edacteur na pas besoin de conna tre les num eros didentication, m eme sils jouent un r ole crucial en arri` ere-plan. Les liens internes de TYPO3 utilisent ces ID en guise de r ef erences. Lavantage est que les liens demeurent m eme si la page change de position, puisque les ID ne changent jamais. tre famiLa structure du site est reprise dans larborescence. Le principe de hi erarchie devrait e lier aux utilisateurs de PC. Vu dune certaine mani` ere, larbre tient sur sa t ete : le globe (tout en haut de larborescence) forme les racines (appel ees Rootline dans le jargon TYPO3). tre ajout Les pages, consid er ees comme les branches, peuvent e ees nimporte o` u dans lar tre borescence. Les pages individuelles, voire m eme toutes les branches de larbre, peuvent e ` celle qui permet de naviguer sur le site, puisquelle d eplac ees. Cette structure est identique a ` la base de la cr est a eation des menus. Les ic ones pr esentes dans larborescence indiquent de quel type de page il sagit. TYPO3 pr evoit d ej` a un certain nombre de types de pages pr ed enis, qui diff` erent par leur comportement et leur fonctionnalit e. Les ic ones reprennent aussi dautres caract eristiques, telles que les pages cach ees, les droits dacc` es et la p eriode dafchage. Nous expliquons plus en d etail ci-apr` es les diff erents types de pages ainsi que les autres fonctionnalit es.

diter de nouvelles pages 3.5.2 Cr eer et e


R ef erence

195486

Cr eer de nouvelles pages avec TYPO3 est tr` es simple : s electionnez le sous-module Page ou Liste dans le module Web. Laire de navigation pr esente alors larborescence avec toutes les pages auxquelles vous avez acc` es. An de cr eer une nouvelle page, afchez le menu contextuel ` laquelle la nouvelle page se rattachera. Cliquez en faisant un clic droit sur lic one de la page a tre cr s de ensuite sur Nouveau. Dans la vue d etaill ee, des pages ou du contenu peuvent e ee diff erentes fac ons, en fonction des extensions install ees et des droits dacc` es au syst` eme. Selon e a ` lendroit o` u vous souhaitez ins erer votre page, s electionnez Page (Dans) (la page est cr ee e au m un niveau inf erieur) ou Page (Apr` es) (la page est cr ee eme niveau). Si vous pr ef erez cr eer la page via lassistant, il vous faut d enir sa position en cliquant sur une ` eche de positionnement. Apr` es avoir d etermin e la position, le formulaire de cr eation de page safche dans la vue d etaill ee. La structure de base de cette vue d etaill ee est la m eme pour toutes les pages et les l e ements de contenu : len-t ete et le bas de page afchent des ic ones pour enregistrer un document (disquette), pour enregistrer et visualiser (disquette avec une loupe), enregistrer et fermer (disquette avec une croix), annuler le dernier changement (croix) ou supprimer len t registrement (corbeille avec un losange jaune attention ). Si lenregistrement a d ej` ae e tapes d tre annul modi e, les e edition peuvent e ees en cliquant sur lic one dannulation (` eche ` laide des deux menus d ` un bleue). A eroulants, vous pouvez soit passer dun enregistrement a autre, soit entreprendre des actions telles que enregistrer le document ou vider la cache de cette page [1].

92

3.5 Les pages, r eceptacles de contenu

Figure 3.12: Menu contextuel pour la page Produit 3 [1] Vue d etaill ee [2]

Sp eciez le type de page et saisissez les informations obligatoires (marqu ees dun carr e jaune t attention si le champ correspondant na pas e e rempli) dans les champs. Ces derniers sont organis es en blocs ; tous les types de pages ont en commun le bloc d eterminant son type [2], le titre de la page [3], les param` etres de localisation [4] et les options g en erales [5].
Figure 3.13: Vue d etaill ee avec formulaire de cr eation dune nouvelle page (type standard). Les champs TSCong et Page de Stockage des Enregistrements G en eraux ne sont pas visibles ici pour le r edacteur

93

3 TYPO3 pour les r edacteurs

Type TYPO3 offre une s erie de types de page pr ed enis, ce qui simplie le travail quotidien. Ils diff` erent surtout par leur fonctionnalit e et par leur apparence dans le frontend. Les types les plus importants pour le r edacteur sont Standard et Avanc e. Le bloc contient aussi le champ Cacher la page, qui d etermine si une page est visible en ligne ou non. Si une page est invisible dans le frontend, son ic one repr esente une page blanche avec une croix rouge. Titre de la page tre rempli lors de la cr Le Titre de la page est le seul champ qui doit obligatoirement e eation dune nouvelle page. Parmi les options avanc ees (type de page : Avanc e), vous pouvez assigner ` la page, et ensuite lappeler en sp un Alias a eciant lURL [Link] alias. En r` egle g en erale, les pages sont cach ees elles sont enti` erement g en er ees par TYPO3 et le r esultat est enregistr e dans la base de donn ees. Pourquoi ? Parce que la g en eration dune page requiert du temps et des ressources de la part du serveur, alors quune page provenant ` jour, elles sont du cache est servie beaucoup plus vite. An de maintenir les pages cach ees a tre modi normalement r eg en er ees apr` es un d elai de 24 heures. Cet intervalle peut e e individuellement par ladministrateur pour chaque page. Le r edacteur peut toutefois en supposant quil en ait les droits les red enir, voire d ecider quelles ne soient pas cach ees du tout (sans cache). tre n ` Cette fonction peut e ecessaire pour des pages dont le contenu change dune minute a lautre (par exemple : valeurs boursi` eres ou forum). Param` etres de localisation On d etermine ici si la page est traduite vers la langue par d efaut, ou si elle demeure invisible tant quelle nest pas traduite. Options g en erales On y d enit le comportement de la page pour laquelle lafchage est limit e dans le temps, ou ` certains utilisateurs. Lancement indique le moment o` pour laquelle lacc` es est limit ea u la page sera mise en ligne automatiquement (rendue visible) et Arr et indique quand elle redeviendra invisible. Les champs de dates indiquent la date sous la forme jour-mois-ann ee , par exemple 1007-2005 . Une astuce : si vous entrez d et passez au champ suivant en appuyant sur la touche de tabulation, la date du jour safche automatiquement dans le bon format. Si vous voulez publier la page par exemple dans 14 jours, il vous suft de taper d+14. Le menu d eroulant ` une page du frontend sera limit ` certains groupes Acc` es permet de d eterminer si lacc` es a ea seulement, et si une page sera visible ou invisible apr` es lidentication dans le frontend. Loption Inclure les sous-pages permet dappliquer la conguration de la page s electionn ee (Lan` toutes les sous-pages de celle-ci. cement, Arr et et Acc` es) a 94

3.5 Les pages, r eceptacles de contenu

` chacun des champs est disponible en cliquant sur lic Une aide contextuelle associ ee a one repr esentant un point dinterrogation. Lic one montrant un formulaire et une main [6] afche des champs optionnels dans la barre grise au-dessus de la vue d etaill ee (non repris dans la gure). En cochant les cases en bas de page [7], vous modiez lafchage du formulaire l d edition de la page et de tous les e ements de contenu texte qui sy rapportent. Une courte description des champs appara t si la case Afcher la description des champs est coch ee. La case Afcher les options secondaires (palettes) afche les champs optionnels directement dans la vue d etaill ee. Vous pouvez d` es lors choisir davoir une version simple et nette du formulaire, ou dafcher toutes les options disponibles de fac on permanente. La case D esactiver l editeur de texte avanc e permet dactiver ou de d esactiver Rich Text Editor pour tous les l e ements dune page utilisant celui-ci comme option.

3.5.3 Diff erents types de pages


` d Le type de page sert tout dabord a eterminer si une page est visible dans le frontend et afch ee dans le menu, ou si elle sert seulement de dossier invisible pour entreposer linformation du backend. Lic one de la page dans larborescence indique lusage auquel elle est r eserv ee.

Standard Le type Standard suft g en eralement ; il offre une s election des informations les plus impor` un autre tantes dune page, comme mentionn e plus haut. Si vous passez de ce type de page a comportant des options additionnelles ou diff erentes, celles qui ne sont pas reprises dans le type Standard ne sont pas perdues. Ainsi si vous avez rempli des champs disponibles seulement dans le mode Avanc e et que vous passez au mode Standard, les donn ees resteront disponibles si vous retournez au mode Avanc e. Dun point de vue technique, les types de page ne sont que des interfaces afchant diff erentes parties dune m eme table de base de donn ees (Pages).

Avanc e Le type Avanc e offre des avantages consid erables : on y sp ecie la m eta-information et on y int` egre des dossiers ou des plugins. Vous pouvez aussi sp ecier un titre diff erent du titre de navigation pour chaque page, an que cette derni` ere apparaisse dans le frontend sous un titre diff erent de celui qui lui est attribu e dans le backend. Les champs de m eta-information tels que R esum e, Mots-cl es et Description sont importants pour les moteurs de recherche externes ainsi que pour la fonction de recherche de TYPO3. Il est aussi recommand e de donner aux pages un titre en rapport avec son contenu. tre int Un certain nombre dextensions doivent e egr ees directement dans la page via Contient tre int le plugin an de bien fonctionner. Si des chiers doivent e egr es depuis le gestionnaire de chiers ou depuis votre PC via le navigateur d el ements, leur afchage et leur mise en forme d ependent de la conguration du gabarit. 95

3 TYPO3 pour les r edacteurs

Figure 3.14: Int egration d el ements via le navigateur d el ements [1] ou la fonction Parcourir [2]

En fonction de la t ache, vous pouvez explorer les pages ou les r epertoires du syst` eme de chiers avec le navigateur d el ements, par exemple pour int egrer des enregistrements, placer des liens ou ajouter directement des chiers (ex. : images, vid eos, son, version imprimable). S electionnez un seul chier en cliquant sur son titre ou un groupe de chiers en cliquant sur le symbole + .

Figure 3.15: Navigateur d el ements acc edant au syst` eme de chiers : arborescence [1], s election de chiers en cliquant sur le titre ou le signe + pour une s election group ee [2], chargement des chiers dans le syst` eme de chiers [3]

URL externe
R ef erence

132947

` une adresse externe de type Internet, FTP ou email. Le type de page URL externe renvoie a La page en tant que telle na pas de contenu, mais est utilis ee pour int egrer des liens vers des applications externes dans la structure du menu du frontend. Entrez ladresse et le type de protocole.

Figure 3.16: URL externe

tre int Dans certains cas, il peut e eressant de sp ecier une adresse URL interne, pour sp ecier ` passer a ` un plugin, par exemple pour faire un lien direct vers dans ladresse des arguments a une page dactualit es en tant que nouvelle page, etc. 96

3.5 Les pages, r eceptacles de contenu

Raccourci ` Le type de page Raccourci (lien) a la m eme fonction, la seule diff erence est quelle renvoie a ` ce type. On lutilise une page interne. Dans notre exemple, la page Accueil correspond a quand la page appara t dans les menus du frontend sans avoir de contenu propre. Ce type de page propose deux modes pour d enir la page cible : 1. 2. ` une page ou a ` un e l Le navigateur d el ements peut d enir un renvoi a ement de contenu sp ecique. Dans la fonction Mode raccourci (options avanc ees), on peut cr eer un lien vers la Premi` ere sous-page ou une Sous-page al eatoire.
R ef erence

524611

t Dans notre exemple, la premi` ere m ethode a e e utilis ee pour lier la page racine B2C Accueil ` la page Accueil . a
Figure 3.17: Raccourci via le navigateur d el ements [1] ou le Mode raccourci [2]

` la mani` Le navigateur d el ements sutilise dans le contexte de larborescence de pages a ere dun navigateur de chier. Ce concept utilisateur est pr esent uniform ement dans TYPO3, m eme dans le Rich Text Editor, an de maintenir les liens manuellement. Le navigateur d el ements simplie ` laide de mots-cl la recherche rapide dune page ou d el ements de contenu a es.
Figure 3.18: Le navigateur d el ements fait un l lien vers des e ements de contenu ou une autre page via un raccourci : arborescence de pages [1], s election ` denregistrements a laide du titre ou de + [2]

Hors menu Le type de page Hors menu est celui qui sapparente le plus au mode Avanc e en termes de champs. Ce qui le distingue toutefois est son comportement dans le frontend : la page peut tre appel e ee directement via son num ero didentication, mais elle nest pas reprise dans le menu. Dans notre exemple, la page Nouveaut es-D etails est de ce type.
R ef erence

157087

97

3 TYPO3 pour les r edacteurs

Section utilisateur backend Les pages de la Section Utilisateur Backend ne sont visibles dans le frontend que pour les utilisateurs d ej` a identi es dans le backend. Ces pages n ecessitent elles aussi des droits de tre appel lecture, et leur afchage dans le frontend ne peut e e que via le backend. ` certains visiteurs par un Ne confondez pas le backend avec les pages du frontend r eserv ees a mot de passe. Ces derni` eres ne sont pas contr ol ees via le type de page, mais par le champ l Acc` es de chacune des pages et des e ements de contenu. Point de montage Le type de page point de montage ajoute vers une page cible un raccourci (analogue aux ` lendroit o` liens symboliques connus des utilisateurs UNIX) a u il est ins er e. Cela permet, non seulement de d enir la page cibl ee dans le champ du point de montage (avanc e) en utilisant le navigateur d el ements, comme pour une page de type raccourci, mais en plus de garder le ` afcher (m format d eni pour la page a eme si la page cible utilise un graphisme compl` etement diff erent). ` chacune des pages : Ces pages sont afch ees via des param` etres ajout es a [Link]?id=13&MP=8-81 ` la syntaxe suivante : ce qui correspond a ` afcher ]. [Link]?id=[page appel ee]&MP=[page cible]-[page a De cette mani` ere, vous d enissez une r eserve de contenus communs dans lesquels diff erents ` chaque site. sites Web peuvent puiser. Le contenu est afch e dans le graphisme propre a D elimiteur ` structurer les menus. Dans le menu frontend, le titre Les pages de type D elimiteur servent a ` celle-ci. Vous pouvez donc par exemple cr de la page appara t mais ne renvoie pas a eer des tre d en-t etes temporaires dans les menus. Bien s ur, lafchage doit d ej` ae eni dans TypoScript par le d eveloppeur. Dossier syst` eme Le Dossier syst` eme sert essentiellement de r eceptacle pour les enregistrements et nappara t l pas dans le frontend. Il peut servir aux pages et aux e ements de contenu, mais ces dossiers sont surtout pr evus pour administrer et structurer les enregistrements ne devant pas appara tre dans le frontend (ex. : cat egories pour lextension des actualit es, par lesquelles les messages sont class es, ou la liste de tous les utilisateurs frontend et des groupes). Dans notre exemple, la page Fonctions est de type Dossier syst` eme. Cependant, on peut aussi cr eer des sections enti` eres dune page dans un Dossier syst` eme, sil est pr evu quelles nutilisent pas la proc edure automatique de cr eation de menu. La sec es dans notre application B2C, an d tion Dates individuelles contient des pages cr ee etre s electionn ees dans la zone de contenu. 98

3.6 Insertion d el ements de contenu dans TYPO3

Corbeille ` la diff La Corbeille se comporte comme un Dossier syst` eme, a erence que son champ dapplication est symbolis e par sa propre ic one. La corbeille de TYPO3 a son propre type de page pour permettre aux utilisateurs backend de d eplacer des enregistrements sans les supprimer imm ediatement. Les enregistrements ne sont donc pas d eplac es automatiquement vers ce dossier lorsquils sont effac es ! Une fois les enregistrements supprim es, vous ny avez plus acc` es. Sils sont conserv es dans tre r ` tout moment. Vous pouvez restituer la corbeille, ils peuvent e ecup er es et retravaill es a l ` leur place dans larborescence a ` laide de la fonction annuler ou a ` laide de les e ements a lhistorique.

3.6 Insertion d el ements de contenu dans TYPO3


Jusqu` a pr esent, nous avons vu que les pages fournissent lossature sur laquelle TYPO3, en l tant que syst` eme de gestion du contenu, peut int egrer tous les e ements de contenu voulus. l A lint erieur dune page, les e ements de contenu sont class es par colonnes et par langues. l Le concept de colonne permet de regrouper certains e ements de contenu de la page pour ensuite les placer via les gabarits dans des zones pr ecises du frontend. Par exemple, un gabarit peut pr evoir une s eparation dans le frontend entre une zone principale et une zone secondaire (ex. : pour un message d elant ou une autre application). Chaque page peut contenir un l nombre illimit e d el ements de contenu. Lordre suivant lequel le frontend afche les e ements ` lordre dans lequel ils sont ins de contenu correspond a er es dans les colonnes du backend (module Page Colonnes).
Figure 3.19: Afchage de deux zones de contenu dans le frontend et la vue d etaill ee correspondante du backend (Module : Page Colonnes)

99

3 TYPO3 pour les r edacteurs

TYPO3 pr evoit quatre colonnes par d efaut : Gauche, Normal, Droite et Bordure. Il est rare que tre ajout les quatre colonnes soient utilis ees dembl ee, mais de nouvelles zones pourraient e ees ou danciennes renomm ees lors de la mise en uvre du site. De plus, ladministrateur peut ` quelle zone chaque r d eterminer a edacteur a acc` es, et d esactiver les colonnes non utilis ees. Concernant la gestion des langues, TYPO3 pr esente un mode de fonctionnement similaire : dit la m eme page peut supporter du contenu e e dans diff erentes langues. Dans ce cas, les l e ements de contenu sont ltr es en fonction du choix de la langue, et afch es en entier dans le backend, dans le module Page Langues. La gestion de sites Web multilingues est reprise plus en d etail dans la section 3.10.8.
Figure 3.20: Vue d etaill ee du backend pour la gestion des langues (module : Page colonnes) ; seules les colonnes Normal et Droite et leurs l e ements de contenu sont repris

100

3.6 Insertion d el ements de contenu dans TYPO3

dition de nouveaux e l 3.6.1 Cr eation et e ements de contenu


Le formulaire pour la cr eation de nouveaux contenus est fort semblable au formulaire de cr eation de page : cliquez sur Nouveau dans le menu contextuel de larborescence de pages du module Web. Les types de donn ees disponibles apparaissent dans la vue d etaill ee. Choisissez maintenant Cliquez ici pour lassistant ! , et d eterminez le type et la position de l el ement de contenu dans la page.
R ef erence

533217

Figure 3.21: Assistant pour la cr eation de contenu : choix du type [1] et de la position [2] du nouveau contenu

l La vue d etaill ee qui appara t pour la cr eation de nouveaux e ements de contenu ressemble au formulaire de cr eation de page : len-t ete contient la barre de menu [1], et en pied de page, on peut ajuster les options de visualisation et d edition pour les sections du formulaire [5]. Si l l editeur de texte Rich Text Editor est d esactiv e pour les e ements de contenu Texte et Texte tre tr` & image, il ny a plus de mise en forme du texte dans linterface d edition. Ceci peut e es utile si par exemple on veut v erier les balises ins er ees par le Rich Text Editor dans le code source. Les diff erents types de contenu ont tous dans leur formulaire les m emes sections pour sp ecier le Type [3], lEn-t ete [3] et les Options g en erales [4]. Si les options secondaires (palettes) pour tre afch les champs sont d esactiv ees, elles peuvent e ees en cliquant sur les ic ones correspondantes [6]. 101

3 TYPO3 pour les r edacteurs

Figure 3.22: Formulaire de cr eation d el ements de contenu texte

Type Dans le formulaire de cr eation de nouveau contenu se trouve une liste reprenant les di l vers types de contenu (reprise sous le terme technique CTypes), allant du simple e ement de l texte aux e ements multim edias. Lorsquon modie le type de contenu, lafchage des champs sadapte automatiquement en fonction des caract eristiques de ce type. Les types sont pr esent es individuellement plus bas. Lorsque vous saisissez des donn ees dans les ` une Colonne champs de la section Type du formulaire, il est important dassocier le contenu a ` la Langue correspondante. sp ecique et, pour les applications multilingues, de lassocier a Ces champs sont accessibles via les options secondaires. Avant et Apr` es d eterminent lespace l (en pixels) entre cet e ement de contenu et respectivement ceux qui le pr ec` edent ou le suivent. Gr ace au champ Cadre, vous pouvez indenter, cadrer, sp ecier une couleur de fond ou souli l ` cocher Index d gner votre e ement. La case a etermine si l el ement est repris dans le plan du site de type Index des sections (Contenu w/Index coch e) par exemple lorsque le texte est tre afch trop long pour e e dans son ensemble. Vers le haut ajoute un petit lien de retour vers le haut de la page lorsquil est activ e. Il vous permet de retourner vers le haut de la page en un ` la barre de d seul clic au lieu de recourir a element.
Figure 3.23: Section Type du formulaire de cr eation de contenu

En-t ete Lorsquil est afch e, len-t ete est g en eralement mis en relief par rapport au reste de l el ement ` des caract` de contenu en recourant a eres gras. Le champ Type offre plusieurs possibilit es de mise en forme pour len-t ete. 102

3.6 Insertion d el ements de contenu dans TYPO3

Si vous ne voulez pas que len-t ete safche sur votre site, activez loption Cach e du champ Type. Les autres champs permettent daligner len-t ete (gauche, centre, droite) ou dajouter un lien ou une date. Certains types d el ements de contenu tels quIns erer enregistrements ou HTML, ne pr esentent pas den-t ete ni doptions secondaires sy rattachant dans leur conguration de base. Ces types de contenu ne pr esentent que le champ Titre.
Figure 3.24: Section En-t ete du formulaire

Options g en erales ` linstar des Options g l A en erales pour l edition des pages, les e ements de contenu peuvent tre rendus invisibles gr ` la fonction Cacher. Les champs Lancement et Arr eux aussi e ace a et d eterminent une publication limit ee dans le temps. Avec Acc` es, il est possible de restreindre la ` certains groupes dutilisateurs frontend. visualisation a
Figure 3.25: Section Options g en erales du formulaire

3.6.2 Types de contenu


M eme dans sa version simpli ee, TYPO3 offre toute une gamme de types de contenu couvrant les cas typiques dinsertion sur une page HTML. Vous pouvez ajouter de nouveaux types de contenu en d eveloppant des extensions. Les pages suivantes pr esentent les principaux types accompagn es dexemples. Les points plus particuliers tels que la mise en forme personnalis ee de types de contenu pour lafchage dans le frontend sont repris au chapitre 6.
Figure 3.26: Types de contenu dans le backend

Titre l Cet e ement de contenu est rarement utilis e : en effet, il est d ej` a int egr e dans la plupart des l autres e ements de contenu. Il ne diff` ere de ces derniers que par lajout dune option pour linsertion dun sous-titre et une vari et e de mises en page. 103

3 TYPO3 pour les r edacteurs

Texte Le type de contenu Texte est tr` es fr equemment utilis e pour des passages de texte. On ins` ere ` laide des cases a ` cocher Gras, Italique, Soul el ement dans le champ Texte et on lajuste a lign e et Majuscule ou des options secondaires Alignement, Police, Taille et Couleur. La mise en forme sapplique ici au texte dans son ensemble : si vous souhaitez seulement r earranger des passages isol es (ex. : ajouter des liens ou des images), utilisez le Rich Text Editor.
Figure 3.27: Type de contenu Texte : section dinsertion du formulaire

Image
R ef erence

550518

l Les images sont normalement ins er ees dans une page via les e ements Image ou Texte & ` laide image. Pour y parvenir, s electionnez les images dans la gestion des m edias du syst` eme a ` partir de votre r ` laide du du navigateur d el ements, ou chargez-les directement a eseau local a ` gauche, a ` droite bouton Parcourir. La fonction Alignement d etermine sa position (align ea ou centr e). Le type de contenu Texte & image d enit directement la position de limage par ` celle du texte. rapport a ` Si vous d esirez utiliser plusieurs images, vous pouvez les disposer dans un tableau invisible a ` la taille de limage la laide de loption Colonnes. La hauteur des lignes du tableau sajuste a tre d plus grande quelles contiennent. Cet ajustement automatique peut e esactiv e en cochant la case Pas de ligne. Un tableau sera alors ins er e pour chaque ligne, dont les proportions ` toutes les images quil contient. Vous pouvez aussi afcher un cadre autour de sajustent a ` cocher Bordure (pour accentuer le contraste par exemple). limage en activant la case a

Figure 3.28: Type de contenu Image : int egration ` partir du d el ements a gestionnaire de chiers via le navigateur d el ements

104

3.6 Insertion d el ements de contenu dans TYPO3

diter a ` laide de ses propres TYPO3 peut int egrer des images de nimporte quel format et les e fonctions graphiques. Vous pouvez ainsi en modier la taille, la qualit e et le format. Vous pouvez d eterminer la taille de limage avec les champs Largeur et Hauteur (en pixels). Qualit e permet en plus de d enir son format (GIF, PNG, JPG), la profondeur de ses couleurs ou son taux de compression. Vous avez m eme la possibilit e de retravailler les images et leurs effets claircir, aiguiser, normaliser, apr` es une premi` ere sauvegarde. Vous pouvez ajuster le contraste, e convertir en nuances de gris et leur faire subir une rotation de 90 ou de 180 . tre cr s pour les images simplement en utilisant les balises HTML, mais Des cadres peuvent e ee ` partir dimages (cf. gure suivante). Ces images de cadres on peut aussi cr eer des cadres a sont disponibles dans le menu d eroulant Frames. Linstallation par d efaut propose deux s eries dexemples, Artists et Darkroom dans le r epertoire tslib/media/frames/. Ils peuvent tre personnalis bien s ur e es lorsque le d eveloppeur congure le syst` eme (cf. [Link] dans le gabarit standard [Link] (default)).
Figure 3.29: ` Ajout de cadres a laide de limage de cadre 2 de la s erie darkroom

` une adresse URL sp Dans le frontend, limage peut renvoyer a eci ee dans le champ Lien. Si ` sa taille initiale dans une vous cochez loption Cliquer pour agrandir, limage appara t a nouvelle fen etre lorsquon clique sur limage miniature. tre d ` droite, a ` gauche Le Titre appara t normalement sous limage, mais il peut e eplac e (align ea ` laide de loption Alignement. Lors de la saisie de titres pour plusieurs images, le ou centr e) a tre introduit dans le m ` chaque fois sur une texte du titre doit e eme ordre que les images, a ligne s epar ee. ` diff tre Note : Pour associer diff erents titres a erentes images, la ligne de code suivante doit e rajout ee dans le gabarit : [Link] = 1 Sinon, les titres seront afch es en un seul bloc pour toutes les images.

Texte & image L el ement de contenu Texte & image est une combinaison des types Texte et Image et com l porte des options des deux e ements. Il offre en plus la possibilit e de d eterminer la position de ` laide de loption Position. limage par rapport au texte (y compris lhabillage) a 105

3 TYPO3 pour les r edacteurs

Liste a ` puces
R ef erence

552631

La Liste a ` puces constitue un type de contenu id eal pour les listes. Chaque ligne entr ee dans ` la ligne le champ texte appara t comme l el ement dune liste dans le frontend. Les retours a l dans un m eme e ement sont indiqu es avec lexpression HTML <br>. Quatre types de Mise en page sont disponibles, qui par d efaut utilisent des ic ones, des l tre nombres ou des coches an de distinguer visuellement les e ements. Ils peuvent bien s ur e red enis par le d eveloppeur. tre mis en forme. Les options Comme pour le type de contenu Texte, le contenu peut aussi e disponibles sont Gras, Italique, Soulign e et Majuscule, ainsi quAlignement, Police, Taille et Couleur. Tableau

R ef erence

727880

Pour publier un tableau HTML, utilisez le type de contenu Tableau. Ici aussi, chaque ligne de contenu repr esente une ligne dans le tableau HTML. Les colonnes dans une m eme ligne doivent tre marqu e ees par le caract` ere | (le symbole tube 5 ). Voici lexemple dun tableau de deux lignes et quatre colonnes (le contenu de la premi` ere colonne est un espace vide) :
| Colonne 2 | Colonne 3 | Colonne 4 Ligne 2 | Apud Helvetios... | Ea res... | Damnatum...

Par facilit e, le texte de la deuxi` eme ligne est ici abr eg e. En voici le r esultat dans le frontend :
Figure 3.30: Exemple de tableau utilisant la mise en page standard 3

tre modi Lapparence du tableau peut e ee dans la section Mise en page. Quatre variantes sont disponibles dans la conguration standard, qui permettent dajouter de la couleur, par exemple, aux titres de colonnes et de lignes. Il existe aussi des options pour d enir la Couleur de fond, la largeur de la Bordure, lEspacement entre cellules et lEspacement inter cellules. Le nombre de colonnes est soit d etect e automatiquement, soit il est d eni manuellement via le ` menu d eroulant Colonnes du frame. Toutefois, si vous avez limit e le nombre de colonnes a ` des colonnes d trois par exemple, le contenu correspondant a epassant le nombre de trois sera ignor e.
5 aussi

appel e pipe en anglais

106

3.6 Insertion d el ements de contenu dans TYPO3

La mise en forme du contenu utilise les m emes fonctions que pour le type Texte, via les options standards et secondaires.
Figure 3.31: Formulaire pour le type de contenu Tableau

Apr` es avoir enregistr e un Tableau une premi` ere fois, un assistant est disponible an de sim` la droite plier les modications ult erieures. Vous lactivez en cliquant sur lic one se trouvant a diter, effacer du champ texte. Une nouvelle fen etre souvre alors, dans laquelle vous pouvez e ` laide dune interface graphique tr` et ajouter du contenu au tableau a es simple dutilisation. largir les champs individuels qui vous semblent trop petits, en cas de longs Vous pouvez e ` cocher Petits champs. extraits de texte, en d esactivant la case a
Figure 3.32: ` la Assistant a cr eation de contenu dans un tableau

Lien vers chier ` afcher divers types de chiers sous forme de L el ement de contenu Lien vers chier sert a tableau dans le frontend ; en fonction du type de m edia, un visiteur peut ouvrir le lien ou t el echarger de linformation provenant du syst` eme de chiers.
R ef erence

976910

Figure 3.33: Exemple du type de contenu Lien vers ` chier appliqu ea diff erents types de m edias

tre facilement int ` laide du navigateur d Les chiers peuvent e egr es a el ements, le bouton Parcourir, ou Lire depuis le chemin. Le r edacteur s electionne le navigateur d el ements dans la ` sa disposition, et choisit les chiers qui lint section Fichiers, ouvre les dossiers mis a eressent. 107

3 TYPO3 pour les r edacteurs

` partir du PC local a ` laide du bouIl est aussi possible denvoyer des chiers sur le serveur a ton Parcourir. Cette m ethode toutefois ne permet pas de voir les chiers dans le navigateur d el ements, car ils ne sont pas enregistr es dans le syst` eme sous le r epertoire leadmin/, mais sous uploads/media/. Pour afcher tous les chiers contenus dans ce dossier, vous devez sp ecier le chemin dans Lire depuis le chemin.
Figure 3.34: Formulaire pour le type de contenu Lien vers chier

Ces liens vers les chiers peuvent safcher de quatre fac ons diff erentes dans le frontend (via loption Mise en page). Ces quatre mod` eles sont pr econgur es dans TypoScript, et par d efaut, ils afchent le titre du chier avec lic one associ ee au type de chier ou limage en ` lafchage sous forme de tableau dans le frontend, la couleur de fond, pr evisualisation. Gr ace a tre param la bordure, lespacement entre cellules et lespacement inter-cellules peuvent e etr es individuellement. tre ajout De linformation peut e ee au titre du chier en cochant la case Afcher taille du chier et en remplissant le champ Descriptions. Tout comme pour les titres dimages, la des` chaque fois sur une ligne s cription des chiers est ins er ee a epar ee. De plus, une ligne de code doit gurer dans le TypoScript du gabarit ([Link]). Multim edia
R ef erence

986146

` laide du type Multim A edia, vous pouvez int egrer des chiers de format TXT, HTML, HTM, CLASS, SWF, SWA, DCR, WAV, AVI, AU, MOV, ASF, MPG, WMV, ou MP3 en tant que contenu ` laide du navigateur d dune page. Vous les s electionnez dans la section Fichier, soit a el ements, ` partir de lenvironnement de travail local en les plac soit directement a ant dans le r epertoire interne du syst` eme uploads/media/. ` nouveau : un chier t Dans le second cas, la r` egle sapplique a el echarg e vers le serveur de l cette fac on nappara tra pas dans le navigateur d el ements, mais nest li e qu` a cet e ement de contenu. ` la lecture de vid Les param` etres n ecessaires a eos, de chiers audio ou danimations Flash tre saisis dans le champ Param` peuvent e etres. Nous avons ici comme exemples les param` etres pour une animation Flash :
WIDTH=70 HEIGHT=55 LOOP=true QUALITY=high BGCOLOR=#FFFFFF

108

3.6 Insertion d el ements de contenu dans TYPO3


TYPE="application/x-shockwave-flash" PLUGINSPAGE=[Link] ShockwaveFlash;

Formulaire ` L el ement de contenu Formulaire permet de cr eer des formulaires email. Un assistant est a votre disposition. Il utilise la notation suivante : dans la section Conguration, chaque ligne ` un champ du formulaire a ` cr ` une fonction. correspond soit a eer, soit a
Nom: | *Nom=input,40 | [Veuillez saisir votre nom] Email: | *email=input,40 Votre adresse: | Adresse=textarea,34,4 Mon appr eciation de TYPO3: | Vote=radio | Super=super, G enial=g enial, In egalable=in egalable | formtype_mail=submit | Soumettre! | html_enabled=hidden | 1 | subject=hidden | Mon appr eciation de TYPO3
R ef erence

404318

` s Le formulaire email est afch e sous forme de tableau. Le symbole | sert ici aussi a eparer le titre (description ou commentaire) du type de champ de formulaire et des d etails de la conguration.
ement El Premi` ere valeur (Titre) Label Deuxi` eme valeur (type de champ) [*=obligatoire][nom du champ =] textarea [colonnes, lignes, "wrap=[p. ex."OFF"]"] [*=obligatoire ][nom du champ =] input [taille max.] [*=obligatoire ][nom du champ =] input [,taille,max ] [*=obligatoire ][nom du champ (*1)=] le [,taille ] [*=obligatoire ][nom du champ =]check [*=obligatoire ][nom du champ =]select [,taille (int/"auto"),"m"=multiple ] [*=obligatoire ][nom du champ =]radio [nom du champ =]hidden [nom du champ =]submit Troisi` eme valeur (d etails de conguration) [donne par dfaut ]
Tableau 3.1: Aperc u de la conguration du formulaire

zone de texte

champ texte mot de passe chier case cocher liste droulante

Label Label Label Label Label

[donne par dfaut ] [donne par dfaut ]

[coch=1 ] Label [=valeur ] ,...

bouton radio champ cach envoyer

Label

Label [=valeur ] ,... Valeur Lgende

Label

109

3 TYPO3 pour les r edacteurs

Le champ Aller a ` la page sp ecie sur quelle page se retrouve le visiteur apr` es avoir soumis le formulaire. Cette page de conrmation doit certainement appara tre pour informer le visiteur t que son email a bien e e envoy e. Il est primordial de sp ecier une adresse email valide dans le champ E-mail destinataire. On peut saisir plusieurs adresses en les s eparant par des virgules. tre appel Une fois que vous avez enregistr e les donn ees, lassistant mentionn e plus haut peut e e ` droite du champ Conguration. Il sert a ` cr ` congurer plusieurs en cliquant sur lic one a eer et a types de champs de formulaires (noubliez pas denregistrer r eguli` erement !). Dans le bas de ` cocher donne la possibilit page de lassistant, une case a e dactiver le mode HTML pour les emails. Lassistant se charge ensuite de traduire vos entr ees dans la syntaxe propre au formulaire de TYPO3.
Figure 3.35: Assistant pour la cr eation de formulaire et afchage dans le frontend

110

3.6 Insertion d el ements de contenu dans TYPO3

Recherche Un formulaire de recherche simple mais puissant est d ej` a pr evu dans la version de base de ` lutilisateur frontend de rechercher des e l TYPO3. Il permet a ements de contenu, des en-t etes a ` laide du type de contenu Recherche. Si ou des mots-cl es dans le site. Ce formulaire est cr ee vous d esirez que les r esultats de la recherche soient afch es sur une nouvelle page plut ot que sur la page du formulaire de recherche, vous devez sp ecier une page dans le champ Envoyer t e (de pr a ` la page qui doit d ej` a avoir e e cr ee ef erence une page de type Hors menu).
R ef erence

481291

Figure 3.36: Formulaire de recherche avec les r esultats afch es sur la m eme page

Il existe, en plus de la recherche standard, une version plus puissante, lIndexed Search Ex tre install tension, qui peut e ee et utilis ee au besoin.

R ef erence

724882

Identiant Le formulaire didentication permet au visiteur qui en a les droits dacc eder aux pages et l aux e ements de contenu du frontend qui lui sont r eserv ees et qui restent donc invisibles aux a ` laide du type de contenu Identiant. autres visiteurs. Le formulaire didentication est cr ee ` On peut d eterminer une page sur laquelle lutilisateur sera renvoy e apr` es s etre identi ea laide du navigateur d el ements. Tout cela implique bien s ur que les utilisateurs et les groupes t du frontend aient e e inscrits correctement et que le formulaire didentication sache t o` u les donn ees utilisateur ont e e enregistr ees. Dans notre exemple, B2B et B2E, les donn ees utilisateur sont situ ees dans le dossier syst` eme FEUtilisateurs. Les administrateurs peuvent ajuster ce param` etre en utilisant TypoScript (fe_adminLib.pid = [uid]) ou en sp eciant une seconde page de renvoi comportant les donn ees utilisateur. Le chapitre 4.11 donne plus dinformations sur les utilisateurs frontend et leur conguration dans le syst` eme. 111
R ef erence

673847

3 TYPO3 pour les r edacteurs

Figure 3.37: Formulaire didentication

Textbox Le type de contenu Textbox permet au r edacteur dutiliser une mise en page pr ed enie pour introduire du texte. La conguration par d efaut pr evoit linsertion du contenu dans un tableau de deux colonnes, la colonne de gauche pour lafchage dimages avec diff erents cadres, et la colonne de droite pour le texte, indent e de 30 pixels. La mise en page (chacune sp eci ee par le d eveloppeur) est s electionn ee dans le menu d eroulant Type de Textbox.
Figure 3.38: Section dinsertion de contenu pour le type Textbox

t a ` laide de la conguration par d L el ement suivant a e e cr ee efaut (cf. content (default)) :


Figure 3.39: Exemple dafchage dans le frontend pour le type de contenu Textbox

Menu/Plan site
R ef erence

528240

l Le Menu/Plan site contient divers e ements de contenu facilitant la navigation. On peut y cr eer des menus de navigation, une description du contenu des pages, ou afcher un plan du site Web en entier. S electionnez la fonctionnalit e via Type de menu, et choisissez un ou plusieurs points dentr ee pour le menu via Point dentr ee. Si aucun point dentr ee nest sp eci e, ` laquelle se trouve le menu est utilis la page a ee par d efaut.

112

3.6 Insertion d el ements de contenu dans TYPO3

Figure 3.40: Diff erents menus pour le type de contenu Menu/Plan du site

Les types de menus pr ed enis sont les suivants : Menu de ces pages Cr ee une liste de liens vers les titres des pages s electionn ees comme points de d epart. Menu des sous-pages Cr ee en fonction de la page s electionn ee comme point de d epart la liste des pages ` un niveau sup situ ees a erieur ou inf erieur. Menu des sous-pages (avec r esum e) ` propos du contenu des sous-pages. Pour ce, il faut avoir Afche le titre et les d etails a entr e les d etails concernant chacune des pages list ees dans le champ appropri e des options secondaires de la page. Menu des sous-pages (avec section l Ce menu afche le titre de la page et les en-t etes des e ements de contenu dont loption Index est activ ee. Plan du site Dans la conguration par d efaut, ce type de menu cr ee un aperc u des titres de pages tre d organis es en arborescence, dont le niveau de ramication peut e eni ; la mise en page se d etermine via TypoScript ([Link]). Index des sections (Contenu w/Index coch e) Ce type de menu est utile pour donner un aperc u du contenu de longues pages. Les l en-t etes de tous les e ements de contenu dont loption Index est activ ee y sont list es. Pages r ecemment mises a ` jour t Liste des dix derni` eres pages qui ont e e modi ees au cours des sept derniers jours, et qui ne sont pas exclues de la liste par loption Sans recherche. Page en relation (bas e sur les mots-cl es) Afche tous les titres des pages qui contiennent les m emes mots-cl es ; les pages peuvent tre exclues de cette liste si loption Sans recherche est activ aussi e ee.

Ins erer enregistrements l Le type de contenu Ins erer enregistrements permet dutiliser certains e ements de contenu plusieurs fois sur un m eme site. De cette fac on, on ne copie pas lenregistrement, mais on cr ee ` jour, les r simplement une r ef erence vers loriginal. Si loriginal est mis a ef erences reprendront aussi les derni` eres modications.
R ef erence

133467

113

3 TYPO3 pour les r edacteurs

ements et le navigateur d Le champ El el ements permettent de cr eer des relations vers tous les types de contenu classiques et vers les enregistrements des extensions (ex. : un enregistrement dadresse). La personnalisation de lafchage des enregistrements dans le frontend via le champ Mise en page est d enie par le TypoScript du gabarit de la page.
Figure 3.41: Type de contenu Ins erer enregistrements

Ins erer un plugin Les extensions du frontend (plugin) organisent des structures de contenu plus complexes sous la forme de cat egories, de listes ou de vues d etaill ees. Elles enrichissent la gamme des fonctionnalit es disponibles, par exemple pour une boutique en ligne ou un moteur de recherche. Pour faire en sorte quun plugin soit afch e correctement dans une page, lextension corres t pondante doit dabord avoir e e install ee et congur ee correctement par ladministrateur. Son installation est expliqu ee plus en d etail au chapitre 6. Script ` cette Le type de contenu Script permet dint egrer vos propres fonctions dans le site Web. A tre n, le d eveloppeur doit dabord d enir la fonction dans le gabarit, et ensuite, celle-ci peut e appel ee via le champ CODE. tre int Exemple : la conguration suivante devrait e egr ee dans le gabarit avec sectionscript :
tt_content.script { [Link] = select_key sectionscript = PHP_SCRIPT [Link] = fileadmin/editor/script/[Link] }

` travers larborescence des pages est sp La validit e du script a eci ee par les champs Point tre pass dentr ee et R ecursion. Dautres param` etres peuvent e es comme arguments aux scripts dans les champs correspondants6 . S eparation ` structurer le contenu dune page tr` Le type de contenu S eparation sert simplement a es ` laide de la conguration charg ee dans le backend et par le fait m eme dans le frontend a tre divis appropri ee (telle que la balise <hr />). Le contenu peut d` es lors e e en blocs.
6 Cette mention est faite dans un souci dexhaustivit e. En effet, les r edacteurs nentrent normalement pas en contact avec ce type de contenu pour des raisons techniques ainsi que de s ecurit e.

114

3.7 Ressources dans TYPO3

HTML ` l Ce type de contenu permet linsertion de lignes de code HTML a etat pur. Il est conseill e de le d esactiver pour les r edacteurs, en grande partie pour une question de s ecurit e.

3.7 Ressources dans TYPO3


3.7.1 Gestion des ressources dans larborescence des chiers
Par ressources, nous entendons les m edias et les chiers de toute sorte qui sont n ecessaires ` la conception dun site Web. Il sagit dimages, de son, de vid a eos et de documents de tous types, mais aussi des documents de d enition tels que des feuilles de style ou des gabarits HTML. Ils sont enregistr es sur le serveur Web dans le r epertoire leadmin/ et disponibles dans tre trait TYPO3 pour e es et int egr es. Il est recommand e de cr eer une structure de r epertoire la plus claire et la plus logique possible, an que chacun sy retrouve facilement. En particulier, les droits dacc` es des diff erents utilisa tre pris en compte. La t teurs et groupes dutilisateurs doivent e ache dorganiser une structure ` des sections sp et daccorder aux diff erents r edacteurs des droits dacc` es a eciques du syst` eme ` ladministrateur. En fonction de la taille de lapplication, il est recommand de chiers revient a e de grouper les chiers selon le type de m edia et de structurer des dossiers de fac on similaire ` larborescence, parce que les r a edacteurs comprennent facilement et rapidement une telle structure.
R ef erence

599239

Figure 3.42: Administration de r ef erences via le module Fichier Fichiers : acc` es restreint au point de montage media

Lorsque les droits sont accord es, il est important de savoir quels utilisateurs ont rec u des droits pour administrer les branches de larborescence de r epertoires auxquels ils ont acc` es. La quantit e de ressources grandit en g en eral tr` es rapidement. Cest pourquoi il est utile de les conserver dans des r epertoires de taille raisonnable. Pour nir, un certain nombre de r edacteurs doivent avoir la permission de cr eer, renommer, copier et/ou d eplacer des r epertoires. Les ressources sont g er ees dans le backend de TYPO3 dans le module Fichier Fichiers. Larborescence apparaissant dans laire de navigation [1] montre la structure pr evue pour le r edacteur. En cliquant sur le nom du dossier, le contenu de chacun des dossiers safche dans 115

3 TYPO3 pour les r edacteurs

la vue d etaill ee [2]. Un menu contextuel existe aussi dans les deux sections de linterface (aire de navigation et vue d etaill ee). Au bas de la vue d etaill ee, vous pouvez choisir dafcher le presse-papiers ou les vignettes des images en cochant les cases appropri ees [3]. Le pressepapiers est toujours disponible dans TYPO3 et vous permet de d eplacer, de copier ou deffacer l ` des chiers ou des e ements de contenu. Il permet m eme de travailler tout un lot de chiers a ` la section 3.10. la fois. Nous y reviendrons plus en d etail a Le menu contextuel de larborescence de r epertoires comporte les actions Nouveau et Envoyer ` laide de Nouveau ou des chiers. Vous pouvez cr eer plusieurs dossiers en m eme temps a cr eer des chiers texte dans les formats TXT, HTML, HTM, CSS, INC, PHP, PHP3, TMPL, JS, ou tre d SQL mais certains formats peuvent toutefois e esactiv es pour des raisons de s ecurit e. Envoyer des chiers permet denvoyer jusqu` a dix chiers simultan ement, du r eseau local au tre syst` eme de chiers. Lors de cette action, si vous le sp eciez, les chiers existants peuvent e remplac es, ou alors les chiers ayant le m eme nom sont renomm es par d efaut avec un num ero s equentiel.
Figure 3.43: Envoi de chiers locaux vers le syst` eme de chiers de TYPO3

3.7.2 Ins erer des ressources dans une application


R ef erence

525663

Il nest pas n ecessaire d etre dans le module Fichiers pour envoyer des chiers. Les chiers tre copi peuvent aussi e es vers le serveur Web au moment de la cr eation dune page. Le navigateur d el ements permet de s electionner des chiers d ej` a existants, mais aussi de t el echarger des chiers [3]. ` Il existe g en eralement deux fac ons de manipuler des ressources chier : les s electionner a partir du syst` eme de chiers avec le navigateur d el ements [1], ou directement avec le bouton ` partir du poste de travail local). Parcourir [2] (envoi a t ` En fonction de la fac on dont ils ont e e copi es sur le serveur, les chiers sont enregistr es a des endroits diff erents, ce qui d etermine leur disponibilit e par la suite. Un chier charg e via le navigateur d el ements vers le syst` eme de chiers est disponible pour plusieurs usages sur un m eme site. Ce nest pas le cas pour un envoi direct via Parcourir [2], parce que le chier est alors enregistr e dans un r epertoire syst` eme interne (uploads/), inaccessible au r edacteur.

116

3.8 Edition frontend

Figure 3.44: Envoi dun ensemble de chiers en tant que ressources vers le syst` eme de chiers ` [1] ou s epar ement a laide de la fonction Parcourir [2] ; illustration des tapes dans le e contexte de linsertion dune image dans un l e ement de contenu Image

Si le chier est int egr e plusieurs fois via le navigateur d el ements, TYPO3 d etecte automatique` laide dune combinaison unique de chiffres (ex. : [Link], ment les copies dune m eme image a livre_01.gif etc.). Le Rich Text Editor agit de la m eme mani` ere lorsquil int` egre des ressources graphiques. Le chier original (ex. : *.bmp) aussi bien que le format cible (ex. : *.jpg) sont chacun enregistr es et r ef erenc es en tant quobjets uniques. Il est ainsi impossible de confondre ` chaque enregistrement, et que deux chiers, puisque des donn ees uniques sont assign ees a ces donn ees demeurent, m eme si les chiers dorigine sont effac es du syst` eme de chiers. On peut d esactiver cette fonction dans TypoScript (cf. chapitre 4.8).
Figure 3.45: t [Link] a e e int egr e trois fois dans l diff erents e ements de contenu

3.8 Edition frontend


` partir du En mode d edition frontend, les pages et leur contenu sont directement modi es a ditez tout en surfant ). site Web lui-m eme ( e Pour beaucoup dutilisateurs qui, en raison des t aches qui leur sont assign ees, ne travaillent ` coup s quoccasionnellement sur le syst` eme, il sagit a ur de la m ethode la plus simple, rapide, ` un travail sp intuitive et pratique. Le mode d edition frontend est aussi bien adapt ea ecique tel que la correction nale dun texte. Ladministrateur a la possibilit e de restreindre lacc` es ` l a edition frontend pour certains utilisateurs et groupes dutilisateurs. Apr` es s etre identi e, lutilisateur se retrouve directement dans le frontend. 117
R ef erence

615520

3 TYPO3 pour les r edacteurs

Si le r edacteur est identi e dans le backend, toutefois, il a la possibilit e dappeler des pages ` laide du menu contextuel ou du bouton appropri dans le mode d edition frontend a e. En r` egle l g en erale, de petites ic ones d edition en forme de crayon [1] apparaissent sur tous les e ements de contenu et des barres d edition [2]. Les visiteurs habituels du site ne voient bien s ur jamais l ces e ements.
Figure 3.46: ` Edition frontend a laide des icones [1] et de la barre d edition [2]

l Avec lic one crayon , les e ements de contenu sont afch es individuellement en mode d edition dans une nouvelle fen etre. La barre d edition permet dautres actions telles que l d eplacer, cacher et effacer le contenu, ou alors cr eer de nouvelles pages ou e ements de contenu. Il est indispensable que ladministrateur ait congur e correctement les droits de lecture et dinscription an de pouvoir utiliser l edition frontend. Il doit avoir activ e le Panneau dadministration (Admin Panel) dans la conguration du gabarit et de lutilisateur ou du groupe ` laide du Panneau dadministration, lutilisateur peut, dans la section Editer dutilisateurs. A , choisir dafcher ou non les ic ones d edition dans le frontend, ou encore dafcher un champ de formulaire sur la page.

118

3.9 Le Rich Text Editor

Figure 3.47: Panneau dadministration en bas de page du frontend

l s et afch ` laide des ic Les e ements dans l edition frontend sont cr ee es a ones de la barre d edition. Le cache nest pas utilis e dans ce mode d edition. M eme si les pages sont servies ` lutilisateur, cela ninuence en rien la navigation dun visiteur normal. plus lentement a Le mode d edition frontend fonctionne aussi longtemps que lutilisateur est identi e dans le backend. Si la session backend prend n (ou si le r edacteur se d econnecte), les ic ones d edition disparaissent.

3.9 Le Rich Text Editor


l Pour les e ements de contenu Texte et Texte & image, il est possible dutiliser le Rich Text Editor (RTE). Suivant la conguration, le r edacteur peut r ediger des blocs de texte en mode WYSIWYG ( what you see is what you get )7 et, par exemple, ins erer des images en les tablir des liens. Toutefois, lorsque votre e l faisant glisser jusqu` a lendroit souhait e, ou e ement tant donn de contenu est sauvegard e, contenu et mise en forme ne font plus quun, e e que les ` ses balises HTML sont enregistr ees directement dans le texte. Cest pourquoi, lacc` es au RTE et a tre soigneusement param fonctions doit e etr e. Si une application doit par exemple respecter les r` egles daccessibilit e d enies par les normes du W3C, avec des feuilles de style (Stylesheets) en cascade, le RTE ne doit bien s ur utiliser aucune balise pour les polices. La conguration sera abord ee au chapitre 4.8.4. tre utilis Le RTE dans TYPO3 sappuie sur ActiveX, ce qui implique quil ne peut e e quavec Internet Explorer sur des plate-formes Microsoft. Vous avez aussi la possibilit e dutiliser htmlArea, ` ActiveX en vous reportant un autre logiciel libre. Vous trouverez la documentation relative a ` la r a ef erence ci-contre. Si le r edacteur a lautorisation dutiliser RTE, il peut le param etrer (dans le module Utilisateur Conguration ou en cochant les cases du formulaire d edition situ ees en bas de page). Si le RTE est activ e, une barre d edition comportant plusieurs options appara t dans la section Texte du formulaire. ` droite du champ texte, vous ouvrez le RTE en mode plein e cran. Les En cliquant sur lic one a ` loriginal peuvent e tre visualis changements apport es a es en cochant la case Code source. Le tre d l RTE peut aussi e esactiv e pour des e ements de contenu isol es en cochant D esactiver Rich Text Editor dans la section Texte de leur formulaire de cr eation.
R ef erence

888606

R ef erence

788773

7 NdT

` mot ce que vous voyez est ce que vous obtiendrez : mot a

119

3 TYPO3 pour les r edacteurs

Figure 3.48: Le Rich Text Editor et tous ses menus

vident. De plus, en positionnant la souris sur Le r ole de la plupart des options d edition est e les ic ones, une courte description appara t. Nous vous en donnons une vue densemble dans le tableau suivant. Nous reprendrons plus loin les fonctionnalit es plus complexes.
Tableau 3.2: Aperc u des fonctions du RTE

Fonction Couper

Raccourci Ctrl + X Ctrl + C Ctrl + V

Description l Coupe un e ement de texte et le conserve dans la m emoire tampon (aussi disponible dans le menu contextuel). Le texte s electionn e est copi e dans la m emoire tampon (aussi disponible dans le menu contextuel). Le texte contenu dans la m emoire tampon est ` lendroit o` ins er ea u est plac e le curseur (aussi disponible dans le menu contextuel). Permet de s electionner le format du paragraphe mis en surbrillance. Des classes pr ed enies par ladministrateur sont vidence des exdisponibles an de mettre en e traits de texte. Le texte en surbrillance est afch e dans la police standard s electionn ee. En fonction des polices install ees sur le PC du visiteur, le texte sera afch e dans la police s electionn ee ou non. La taille du texte en surbrillance est ajust ee sur chelle de 1 a ` 7, conform une e ement au standard HTML. En fonction de la conguration, une palette ou bien une liste de couleurs pr ed enies safche. Le texte en surbrillance est afch e en gras (aussi disponible dans le menu contextuel).

Copier

Coller

Style de paragraphe Style de caract` ere

Police de caract` ere

Taille de caract` ere

Couleur de texte Gras Ctrl + B

120

3.9 Le Rich Text Editor


suite

Fonction Italique Soulign e ` gauche Justi ea Centr e ` droite Justi ea Liste num erot ee

Raccourci Ctrl +I Ctrl + U

Description Le texte en surbrillance est afch e en italique (aussi disponible dans le menu contextuel). Le texte en surbrillance appara t soulign e (aussi disponible dans le menu contextuel). Le bloc de texte dans lequel se trouve le curseur ` gauche. est justi ea Le bloc de texte dans lequel se trouve le curseur est centr e. Le bloc de texte dans lequel se trouve le curseur ` droite. est justi ea Les paragraphes mis en surbrillance sont orga l nis es en liste, dont chaque e ement est pr ec ed e dun nombre. Les paragraphes mis en surbrillance sont orga l nis es en liste, dont chaque e ement est pr ec ed e dune ic one. R eduit ou retire lindentation du paragraphe mis en surbrillance. Indente le paragraphe mis en surbrillance une ou plusieurs fois. Les passages de texte mis en surbrillance deviennent des liens vers dautres pages de lapplication. ` la cr Ouvre un assistant a eation dun tableau. Comme pour la couleur du texte, une palette ou une liste de couleurs pr ed enies safche en fonction de la conguration du RTE. M eme si TYPO3 pr evoit un type de contenu permettant linsertion dimages dans un texte, tre effectu cette op eration peut e ee directement dans le RTE. tre TYPO3 contient une liste dic ones pouvant e ins er ees dans le texte. Vous pouvez ajouter de ` cette s nouvelles ic ones a election. Introduit une ligne entre les paragraphes. Si ladministrateur a d eni des fonctionnalit es et des d etails particuliers, ils seront introduits dans le menu appropri e.

Liste

Diminuer lindentation Augmenter lindentation Ins erer un lien

Ins erer un tableau Couleur darri` ere-fond

Ins erer une image

Ins erer une ic one

Ins erer une ligne l Ins erer des e ements utilisateur

121

3 TYPO3 pour les r edacteurs

Ins erer un lien


R ef erence

648217

Si un extrait de texte est mis en surbrillance et que vous appelez ensuite la fonction Ins erer un lien dans la barre d edition, le navigateur d el ements souvre avec des options sp eciales pour l edition. Comme dhabitude, vous pouvez parcourir la page ou larborescence de chiers l an de d enir un lien vers des pages, des e ements de contenu ou des chiers contenus dans le syst` eme. Vous pouvez sp ecier dans le menu de s election, ou manuellement dans le champ tre ouvert dans sa propre fen Cible si le lien doit e etre (_self), dans le haut du cadre (_top) ` des URL externes, assurezou dans une nouvelle fen etre (_blank). Lorsque vous renvoyez a vous que vous inscrivez ladresse compl` ete, avec le protocole ([Link] En ce qui concerne les tre ins emails, ladresse du destinataire doit e er ee.

Figure 3.49: Insertion de liens avec le Rich Text Editor

Ins erer une image


R ef erence

033547

tre ins ` laide du RTE. Si la fonction Les images peuvent aussi e er ees directement dans le texte a Ins erer une image est appel ee dans la barre d edition, le navigateur d el ements afchera trois modes : Nouvelle Magic image, Nouvelle plain image et Glisser-d eposer. Le mode Nouvelle Magic image supporte tous les formats et toutes les tailles dimage. Limage est automatiquement convertie vers un format graphique adapt e au Web. Vous aurez plus tard la possibilit e den modier la taille an doptimiser le format et la qualit e dafchage. Le mode Nouvelle plain image naccepte que les formats graphiques Web (JPG, GIF, et PNG), avec une r esolution maximale de 640480 pixels. Ce mode est pr evu pour travailler avec des images d ej` a conc ues pour le Web. Dans le mode Glisser-d eposer, les images peuvent tre ins ` partir du navigateur d e er ees directement dans le texte a el ements. Si une image d ej` a dit ins er ee a besoin d etre r ee ee, vous devez la s electionner et rappeler la fonction Ins erer une ` gauche/` image. Les attributs tels que la hauteur, la largeur, la bordure, la marge a a droite, tre sp la marge en haut/en bas ou le titre, peuvent e eci es dans le mode Image courante. Il l est toutefois recommand e dutiliser les e ements de contenu Image et Texte & image pour linsertion dimages dans une page.

122

3.10 Travailler efcacement avec TYPO3

Figure 3.50: Insertion dimages dans le Rich Text ` laide du Editor a navigateur d el ements

Ins erer un tableau Un assistant simple dutilisation permet dins erer des tableaux dans le RTE. Son fonctionnement est plut ot rudimentaire : il permet de sp ecier le nombre de lignes et de colonnes, ainsi que lespacement inter- et intra- cellules, la couleur et la largeur des bordures, ou m eme une image darri` ere-fond pour tout le tableau. Toutefois, pour ins erer un tableau, il est recom` cet effet plut mand e dutiliser l el ement de contenu pr evu a ot que le RTE.
Figure 3.51: ` la Assistant a cr eation dun tableau dans le Rich Text Editor

3.10 Travailler efcacement avec TYPO3


Jusquici, nous vous avons pr esent e l edition dans le backend et dans le frontend, ainsi que l ` laide dun exemple les e ements de contenu standards. Dans cette section, nous abordons a pratique la mani` ere de travailler efcacement avec TYPO3. Nous vous pr esentons les fonctions et les m ethodes de travail qui simplieront et acc el ereront votre travail au quotidien. 123

3 TYPO3 pour les r edacteurs

3.10.1 Sc enario
Notre exemple est bas e sur un sc enario de gestion de contenu dans lequel nous devons fournir ` trois groupes cibles diff de linformation a erents dune installation TYPO3 : 1. Business to Consumer (B2C) Site Web public destin e aux consommateurs ; cette partie de larborescence contiendra de linformation pr evue pour un large public. Notre soci et e ctive d esire une page ` sa gamme de produits, une section dactualit r eserv ee a es sur la page daccueil, une v l page e enements , la liste de ses revendeurs et des e ements de contenu standards tels quun menu contact, le logo de la soci et e, et un plan du site, repris dans la section Fonctions du site. Business to Business (B2B) Section r eserv ee aux partenaires et fournisseurs et prot eg ee par un mot de passe ; cette page contient de linformation plus d etaill ee sur les produits ainsi que du mat eriel de promotion pour les revendeurs. Business to Employee (B2E) ` lusage interne contient de linforIntranet r eserv e aux employ es ; ce forum destin ea mation pour les employ es.

2.

3.

` diff Un tel sc enario est id eal pour la r eutilisation du m eme contenu a erents endroits. Malheureusement, il en est rarement ainsi dans la pratique. Pour des raisons de s ecurit e, les serveurs intranet et Internet sont toujours s epar es, de sorte que la situation d ecrite plus haut nest pos s sur le serveur intranet et que les sites B2B et B2C sont sible que si tous les sites Web sont cr ee aliment es en contenu par un autre serveur Web situ e sur Internet. Le chapitre 2.6 donne plus dinformations sur une architecture pouvant servir de solution, en particulier sur la s eparation entre le serveur en ligne et le serveur de production.

3.10.2 Cr eer larborescence des pages


R ef erence

189036

Nous commenc ons dabord par cr eer les trois sites Web dans le syst` eme.

Figure 3.52: Arborescence du site

Nous cr eons dabord un Portail , et une page B2C Accueil au niveau inf erieur. Une m ethode plus rapide est appliqu ee pour cr eer les sous-pages. Dans le module Web Fonctions, un Assistant pr esente un formulaire permettant de cr eer jusqu` a neuf pages simultan ement. Lassistant place ces pages apr` es la page s electionn ee dans larborescence, ou en tant que sous-pages de celle-ci. Dans notre exemple, vous commencez par cr eer la page B2C Accueil manuellement, puis vous lappelez dans le module Web Fonctions. Vous 124

3.10 Travailler efcacement avec TYPO3

s electionnez ensuite lassistant dans le menu d eroulant dans le coin sup erieur droit de la vue d etaill ee, et la fonction Cr eer plusieurs pages multiples. Saisissez les titres des pages que vous souhaitez cr eer. Vous ne remplissez pas les champs dont vous navez pas besoin. Les nou es en tant que sous-pages, a ` moins que vous ne sp velles pages seront cr ee eciiez le contraire en cochant la case Placer les nouvelles pages a ` la suite. Loption Masquer les nouvelles es ne seront pas visibles dans le frontend, ce pages indique que les pages nouvellement cr ee tre le cas lorsquon ajoute des pages aux sites Web d qui devrait toujours e ej` a existants. La fonction Trier les pages vous permet de trier les pages dun m eme niveau en fonction du titre, du sous-titre, de la date de modication ou de la date de cr eation, ou encore den inverser lordre actuel.
Figure 3.53: Assistant du module Web Fonctions pour faciliter la cr eation et le tri de pages

An de cr eer larborescence B2B, congurez loption Copie r ecursive du module Utilisateur Conguration an de copier au moins un niveau lorsque vous enregistrez une page dans la m emoire tampon. Vous pouvez ensuite ins erer la page copi ee apr` es la page B2C Accueil en cliquant sur lic one d B2C Accueil et en y ajoutant la page copi ee avec loption Coller apr` es.
Figure 3.54: Copier-coller dune page

125

3 TYPO3 pour les r edacteurs

3.10.3 Presse-papiers
R ef erence

965454

l Il est souvent n ecessaire d editer plusieurs pages ou e ements de contenu au cours dune ses l sion de travail ; on utilise alors le Presse-papiers, qui afche les e ements que contient la m emoire tampon et propose une s erie doptions d edition. On lactive en cochant la case Afcher le presse-papiers dans le bas de la vue d etaill ee. Vous devez aussi cocher la case Vue e tendue si elle nest pas d ej` a activ ee. Alors que la m emoire l ` la fois, les Presse-papiers 1-3 [2] tampon Normal [1] ne peut contenir quun e ement a l peuvent contenir plusieurs pages ou e ements de contenu. Si le presse-papiers est activ e, une ic one suppl ementaire appara t dans la vue d etaill ee du mode Liste (repris ci-apr` es sous le nom afchage liste ). D` es quun des Presse-papiers ` cocher apparaissent derri` l 1-3 est activ e, des cases a ere chaque e ement list e, rendant possible l la s election de plusieurs e ements [3]. Lic one information dans la barre de menu (cf. vue tendue) afche toute linformation essentielle a ` propos de lenregistrement en question. e

Figure 3.55: Utilisation du presse-papiers : le presse-papier n 1 est actif et contient deux l e ements

Dans le presse-papiers, lic one appareil photo permet dafcher les vignettes des images copi ees dans le presse-papiers, et lic one copier permet de choisir entre le mode co l pier (ic one orange) ou d eplacer (ic one grise) pour tous les e ements contenus dans l tre ins ` laide le presse-papiers [4]. Lendroit o` u les e ements doivent e er es est d etermin ee a de lic one correspondante dans la vue d etaill ee (Coller dans ; Coller apr` es) [7]. Mais il est diter ou les supaussi possible douvrir les enregistrements dans le presse-papiers pour les e ` laide du menu d l primer d enitivement a eroulant [5]. Si plusieurs e ements se trouvent dans 126

3.10 Travailler efcacement avec TYPO3

` la suite de la m emoire tampon, ils seront afch es en tant que formulaires d edition, lun a lautre. Si vous souhaitez simplement effacer les enregistrements de la m emoire tampon, cli` droite de chaque e l quez sur lic one marqu ee dune croix a ement, ou sur le bouton dans le menu d edition du presse-papiers [6].

Exemple Dans notre exemple, la premi` ere copie de larborescence de B2C est renomm ee en B2B Accueil et on y ajoute deux nouvelles pages : T el echargements (apr` es Revendeurs ) et un dossier syst` eme, FEUtilisateur (apr` es Fonctions ). Une fois le presse-papiers activ e, s electionnez toutes les sous-pages de B2B Accueil dans l afchage liste et choisissez loption Editer la s election.
Figure 3.56: Options de s election et d edition dans l afchage liste quand le presse-papiers est activ e

Dans les champs Titre dans la liste de formulaires, vous pouvez maintenant modier les pages an dobtenir larborescence suivante.

Figure 3.57: Arborescence de la section B2B Accueil apr` es dition et ajout de e deux nouvelles pages

` partir de la page Commerc t e. A ants , une page Revendeurs a maintenant e e cr ee tre cr e ; nous proc Larborescence B2E doit encore e ee ederons en utilisant les options de traitement par lots dans lafchage liste.

3.10.4 Editer des champs s electionn es


Lafchage liste offre la meilleure vue densemble, ainsi que le meilleur acc` es aux enregis` une page. Mais elle offre dautres fonctionnalit trements li es a es qui ne sont pas visibles au premier coup dil. Nous vous recommandons de commencer par activer la Vue e tendue et le l Presse-papiers. Pour tous les types de donn ees (tels que les pages, les e ements de contenu, etc.), on peut s electionner les tables correspondantes, an de les visualiser ou de les param etrer ` laide de lic individuellement, a one + situ ee dans len-t ete [1].
R ef erence

729118

127

3 TYPO3 pour les r edacteurs

Figure 3.58: Dans le module Liste, les champs Type correspondants sont ouverts pour leur dition via la table e Page et la s election de deux enregistrements

largi gr ` un menu de s En cons equence, l afchage liste est e ace a election o` u les champs tre s individuels peuvent e electionn es, an d etre ensuite afch es dans la table [2]. Dans cette gure, on a s electionn e les champs Type et Lancement [3]. En cliquant sur le titre des champs, vous pouvez trier les enregistrements de cette s election par ordre croissant ou d ecroissant. l Vous pouvez ainsi trier rapidement les nouveaux e ements par ordre alphab etique, ou par date tre e dit de cr eation, par exemple. Tous les champs afch es dans une colonne peuvent e es gr ace ` lic a one crayon [4]. En combinant cette fonction avec un presse-papiers et en marquant les enregistrements individuellement, vous pouvez restreindre la s election de donn ees pour dition. An douvrir le formulaire d leur e edition pour tous les champs des colonnes et des enregistrements list es (ou s electionn es), cliquez sur lic one crayon situ ee au-dessus des options d edition individuelle [6]. Cette m ethode facilite grandement l edition de la m eta-information (r esum es, mots-cl es et es a ` un m descriptions) dans larborescence pour toutes les pages d ej` a cr ee eme niveau. Lafchage des champs est aussi conserv e et restitu e d` es que lutilisateur clique sur lic one Menu tre e dit (le symbole - ) an dafcher toutes les tables. Toutefois, elles ne peuvent e ees individuellement dans ce mode. ` exporter des e l Une seconde option consiste a ements comme un chier CSV, qui appara t si vous avez s electionn e une table en afchage exclusif dans le module Liste. Elle permet de t el echarger le contenu des champs s electionn es plus t ot en tant que chier CSV (Comma Separated Values)8
8 NdT

: valeurs s epar ees par des virgules.

128

3.10 Travailler efcacement avec TYPO3

Exemple An de compl eter notre arborescence, nous copions maintenant larborescence B2B Accueil et ins erons la copie apr` es loriginal. Cette nouvelle page est renomm ee B2E Accueil . ` lic Les fonctions additionnelles sont maintenant visibles dans l afchage liste gr ace a one + dans len-t ete de la table. S electionnez Type, Titre de la page et Raccourci vers page. Si vous cliquez sur lic one crayon adjacente au titre de colonne correspondant, tous les l e ements de cette colonne seront afch es dans un formulaire d edition. Maintenant renommez les pages, modiez les types de pages et corrigez le raccourci de la page ` produire larborescence suivante. Accueil de fac on a
Figure 3.59: tendu Liste en mode e dition apr` es e

3.10.5 Raccourcis
diter cerApr` es avoir travaill e un certain temps avec TYPO3, vous r ealiserez que vous devez e taines pages par exemple les pages dactualit es particuli` erement souvent. Plusieurs rac` ces pages apr` courcis sont disponibles an de vous permettre dacc eder directement a es vous tre identi e e. Utilisateur Centre de t aches : Pages r ecentes t dit tre ouverte directement dans le module Si la page souhait ee a e ee ee r ecemment, elle peut e tes Utilisateur Centre de t aches sous la rubrique Pages r ecentes, apr` es que vous vous e identi e. Utilisateur Centre de T aches : ` la liste les pages ayant besoin d dit Ladministrateur peut ajouter a etre souvent e ees, et y donner un droit dacc` es dans le module Utilisateur Centre de t aches. Raccourcis en bas de page Une autre possibilit e est de cr eer vos propres raccourcis vers les pages correspondantes. Ladministrateur a d ej` a cette possibilit e dans la conguration de base du prol utilisateur. Pour les
R ef erence

585979

129

3 TYPO3 pour les r edacteurs

r edacteurs, ladministrateur doit accorder les droits via TSCong, an que la barre de raccourcis soit afch ee au bas de la page. Voir la r ef erence ci-contre.
[Link]=1

R ef erence

348238

Le r edacteur a maintenant la permission de cr eer des liens vers la page voulue via lic one de raccourci [1] dans la vue d etaill ee. Ils apparaissent en bas de page du backend [2] et peuvent tre organis e es en groupes [3]. Pour y parvenir, activez loption Editer , cliquez sur le lien, ` un groupe et nommez-le. Le titre permet dacc assignez-le a eder au lien directement via le menu de s election [5]. ` un champ [6] qui permet dappeler les pages de larborescence De plus, le r edacteur a acc` es a t directement en entrant leur ID, par exemple, si des erreurs dafchage ont e e constat ees dans le frontend.

Figure 3.60: Barre de raccourcis dans le bas de page du backend

3.10.6 Aide au niveau du contenu


Recherche et remplacement de texte avec lextension Text tools M eme si les pages et la quantit e de donn ees grandissent rapidement au sein dune application, ` conserver une vue densemble : les enregistrements et e l TYPO3 peut vous aider a ements de tre retrouv ` laide du champ de recherche situ contenu sp eciques peuvent e es facilement a e au bas de la vue d etaill ee. La recherche peut s etendre jusqu` a trois niveaux dans larborescence.
Figure 3.61: Options de recherche dans la vue d etaill ee
R ef erence

325093

l diter ou de les remUne fac on encore plus efcace de trouver des e ements de texte et de les e placer imm ediatement est dutiliser lextension Text tools (cc_textfunc) du module Web tre install ` la section 5.7 pour appara Fonctions. Lextension doit dabord e ee comme d ecrit a tre comme fonction dans le module Web Fonctions. Vous pouvez maintenant parcourir des l tables, des pages, des e ements de contenu ou des gabarits jusqu` a quatre niveaux. Via la fonction Search and replace, tous les enregistrements trouv es sont list es avec leur contenu existant et modi e. De plus, vous pouvez aussi sp ecier quels sont les enregistrements o` u les modications seront apport ees.

130

3.10 Travailler efcacement avec TYPO3

Figure 3.62: Lextension Text Tools permet facilement lop eration rechercher/remplacer

Int egrer des documents Ofce ` des chiers bas Lorsquil g en` ere du contenu, le r edacteur est souvent confront ea es sur des tre utilis documents de la suite Ofce. Si des sections du document doivent e ees en tant qu el ement de contenu, il est n ecessaire de d ecider si les d etails de mise en forme doivent tre repris ou non dans TYPO3. En th tre repris e eorie, les d etails de mise en forme peuvent e en l etat par le Rich Text Editor, en fonction du processus de transformation congur e par le d eveloppeur. Si vous souhaitez ne pas tenir compte de la mise en forme des documents Ofce diteur ASCII, ou et sp ecier vos propres balises, il est conseill e denregistrer les textes dans un e de d esactiver le Rich Text Editor avant dins erer le texte. On peut ensuite r eactiver le RTE pour diter le texte. e Si vous voulez inclure non seulement des extraits de texte, mais aussi des documents Ofce dans leur ensemble, nous recommandons alors dutiliser lextension General Ofce Displayer (bient ot renomm ee Document Suite). Cette extension propose une int egration transparente de documents Word 2003, Excel 2003 et OpenOfce Writer. Alors que les deux premiers for tre enregistr mats doivent e es explicitement en tant que documents XML, le format SXW est support e pour les documents OpenOfce. Deux m ethodes dint egration sont maintenant disponibles pour le r edacteur.
R ef erence

138944

131

3 TYPO3 pour les r edacteurs

Dans le premier cas, le document est import e vers le Rich Text Editor : s electionnez la page de tre ins larborescence o` u le contenu doit e er e, activez le menu contextuel et cliquez sur le menu Import Ofce en choisissant le format appropri e. Le contenu est alors enregistr e en tant que tre e dit type de contenu Texte, et peut ensuite e e par le RTE.
Figure 3.63: Import Ofce via le menu contextuel

` laide dun plugin. Au cours de ce proLa seconde m ethode int` egre le document souhait ea l cessus, le document est extrait de son propre format et transform e en un e ement de contenu tre e dit sous une mise en forme pr ed enie. Le texte ne peut toutefois plus e e. Le document l ` laide de lextension est int egr e avec un e ement de contenu de type Ins erer un plugin [1] a tre ajout General Ofce Displayer [2]. Le chier Ofce peut maintenant e e via le syst` eme de ` partir du r chiers ou a eseau local [3]. `e voluer sous le nom DocuLe General Ofce Displayer, publi e par Robert Lemke, continue a largie, et un certain nombre ment Suite. La gamme de fonctionnalit es sera consid erablement e doptions de manipulation seront ajout ees.
Figure 3.64: Import dun document Ofce via un plugin

3.10.7 Restaurer/ editer lhistorique


R ef erence

763322

t Un historique (simple) du contenu a e e introduit dans la version 3.3 de TYPO3. Par d efaut, le contenu de toutes les tables est enregistr e pendant sept jours (604 800 secondes), avec un maximum de dix versions pour chaque enregistrement.

132

3.10 Travailler efcacement avec TYPO3

Ladministrateur peut param etrer ce processus plus pr ecis ement pour les tables prises s epar ement via TCEMAIN_tables. ` la derni` Le r edacteur peut retourner a ere version en un seul clic. Si vous placez la souris sur lic one annuler ou r etablir , la date de la derni` ere modication appara t.

R ef erence

729572

Figure 3.65: ` Bouton r etablir a droite de la barre d edition

Le r edacteur peut visualiser lhistorique des changements dans les modules Web Page ` cet effet. Edition rapide et Web Liste en cliquant sur lic one pr evue a
Figure 3.66: pour Icone lhistorique des changements dans le module Liste

` lenregistrement en question. Tous Lhistorique donne un aperc u des modications apport ees a les changements sont indiqu es en vert ; les valeurs existant depuis longtemps ou celles ayant t e e effac ees sont indiqu ees en rouge.
Figure 3.67: Afchage des historiques des changements

133

3 TYPO3 pour les r edacteurs

Tous les changements jusqu` a la version actuelle sont restaur es avec lic one crayon alors quavec lic one information , une version de tous les changements jusqu` a la version actuelle est afch ee.

3.10.8 Multilinguisme
Il est possible de travailler avec plusieurs langues dans une seule et m eme arborescence avec TYPO3. Si les gabarits de page sont pr epar es en cons equence, plusieurs versions dune page tre e dit pourront e ees en fonction de la langue s electionn ee. ` lintention du r Une option de traduction appara t alors a edacteur dans le module Web Page sous loption Langues.
Figure 3.68: Cr eation dune traduction

Apr` es avoir s electionn e la langue pour la page en question, vous devez remplir les champs de la section Titre de la page. Vous pouvez alors Cr eer du contenu de page ou Copier les e l ements de contenu par d efaut.
Figure 3.69: Afchage du contenu dans chaque langue

134

3.10 Travailler efcacement avec TYPO3

l ` Cette derni` ere possibilit e offre lavantage de pouvoir envoyer au r edacteur les e ements a traduire, selon les permissions quil a dans les diff erentes langues. La mention Translate to ` traduire. langue appara t alors au d ebut du texte a
Figure 3.70: ement de contenu a ` El traduire

Si vous ouvrez le formulaire d edition de la traduction de la page, vous constaterez que les ` celles de la version originale (via les zones valeurs des champs sont reprises [1] et compar ees a vertes) [2].
Figure 3.71: Vue densemble de lenregistrement

135

3 TYPO3 pour les r edacteurs

Vous pouvez aussi d emarrer ce workow de traduction directement dans le module Web Liste ou activer la Vue de localisation. Pour les traductions manquantes, un message appara t.
Figure 3.72: Traductions manquantes ou incompl` etes

Le module Web Info Localisation donne la meilleure vue densemble sur des sections enti` eres de larborescence ainsi que sur l etat des traductions. On ajoute des titres aux traductions des pages en cochant les cases des pages respectives, puis en cliquant sur lic one Cr eer un nouvel en-t ete denregistrement [1]. Il est possible d editer les en-t etes de pages ainsi ` la traduction telles que Cacher la traduction que le contenu. Les autres options relatives a par d efaut (vert) [2] ou Cacher la page si elle nest pas traduite (rouge) [3] sont mises en vidence par une couleur diff e erente.
Figure 3.73: Aperc u de l etat des traductions

136

TYPO3 pour les administrateurs

TYPO3 pour les administrateurs


4.1 T aches et objectifs de ladministration
Par administration, on entend toutes les t aches nimpliquant ni le travail dinstallation et de programmation pour la mise en uvre dune part, ni la production de contenu dautre part. Ladministration comprend la maintenance technique du syst` eme, sa conguration, sa surveillance, ainsi que le contr ole et ladaptation des r esultats de la production de contenu. Jus t qu` a pr esent, les occasions de sexercer au r ole de gestionnaire de contenu ont e e rares, et ` y entrer, tout au la plupart des personnes uvrant dans cette branche nont pas cherch ea contraire : le secteur les a trouv es. Cest toutefois une t ache critique pour lentreprise, car il ne sagit pas seulement de maintenir une bonne image de la soci et e, mais aussi dint egrer loutil de gestion de contenu Web dans le champ plus large de la gestion. 1
1 People need to realize that the Web is no longer the thing about the thing ; it is the thing itself. The site represents your organization. Content management is, indeed, managing the business. Suzanna PhelpsFredette dans une transcription dune conf erence ( Content Management How Can We Stop the Train ` San Francisco en 2000, Wreck ? ) dans le cadre de la conf erence IQPC Web Site Content Management tenue a [Link]

Chapitre
139

4 TYPO3 pour les administrateurs

Vue de cette fac on, la gestion de contenu [...] sint` egre compl` etement dans la gestion dinformation interne dans une soci et e et dans la gestion des connaissances. Elle combine des aspects organisationnels, des proc ed es dentreprise et des technologies. 2 Mais la technique nest quun moyen : alors quelle simplie la cr eation, lenregistrement et la diffusion de contenu, fondamentalement, ce sont les proc ed es dentreprise et les workows qui permettent lutilisation efcace et protable de la technique. 3 Ladministrateur joue le r ole dun architecte pr esent en permanence, qui rend linformation ` lext visible a erieur en organisant les ressources en cons equence. Que ce soit ladministrateur les processus de travail, ladministrateur doit e tre lui-m eme ou un consultant qui ait cr ee compl` etement familiaris e avec la terminologie et les m ethodes du CMS utilis e, an de pouvoir inuencer la conception, l evaluation et loptimisation de linformation publi ee. Malheureusement, lors de lintroduction dun CMS, on oublie souvent que leffort principal ` limr eside dans la production continue de contenu. Alors que la technique est n ecessaire a plantation dun CMS, cet investissement est la partie la plus simple dune strat egie CMS. 4 t Ce fait a e e largement document e et se v erie dans pratiquement tous les projets CMS. De plus, lintroduction dun CMS entra ne toujours des changements tels que de nouvelles t aches ` large et de nouveaux proc ed es. M eme lorsque le contenu est pr eexistant, des changements a chelle sont probables : lors de lintroduction du CMS, les processus existants doivent aussi e tre am e elior es, avec pour cons equences leur replanication et leur optimisation. Ladministrateur se trouve donc au cur des op erations dintroduction et dex ecution ; il ou tre fait directement sur le elle est responsable des processus concern es. Le travail qui doit e CMS n ecessite lanalyse des besoins pour le processus de r edaction, et leur confrontation avec les outils propos es dans le syst` eme. Les gestionnaires de contenu ayant le r ole dadministrateurs contr olant le syst` eme sont souvent des employ es moins vers es dans les technologies, et qui sont plut ot responsables de limage externe de la soci et e, du marketing et des relations publiques, ou de la communication avec les clients (B2C), les partenaires daffaires (B2B), et les employ es (B2E). Des assistants (wizards) les accompagnent dans la plupart de leurs t aches dans TYPO3. Ces utilitaires offrent une galement grande vari et e doptions de conguration pour linterface utilisateur, et permettent e daccorder certains droits aux groupes et aux utilisateurs. M eme quand les param` etres du syst` eme sont impliqu es, notamment avec le syst` eme TSCong, un assistant guide ceux qui sy connaissent moins bien en informatique. ` partir des proLadministrateur a aussi la responsabilit e de garantir la cr eation de valeurs a ` la fois en tant quenvironnement de production et cessus CMS. Dans ce cas, le syst` eme agit a en tant quoutil danalyse. Dans ce domaine, TYPO3 offre plusieurs modules internes permet` la publication de contenu, tant lanalyse des statistiques. En plus des param` etres propres a ` laide de laquelle vous pouvez d il existe une puissante interface de base de donn ees a enir tre enregistr par vous-m eme des requ etes sp eciques, qui peuvent ensuite e ees pour un usage ult erieur.
2 Florian Stahl : D amme gegen die Informationsut : Content Management ist mehr als ein St uck Software , Neue Zurcher Zeitung, 23.05.03, [Link] 3 M eme source 4 Geoff Choo : CMS strategy : Dont put the cart before the horse , TechRepublic Ins, 11 d ecembre 2001, ZDNet Australie : [Link]

140

4.2 Planier et installer lenvironnement de gestion de contenu

Dans ce cadre, le chapitre qui suit vous pr esente les probl` emes principaux rencontr es lorsquon met en place un environnement de gestion de contenu, et illustre par le biais dexemples la d enition des droits, diverses options de conguration pour le backend, ainsi que des outils de contr ole et de validation du contenu.

4.2 Planier et installer lenvironnement de gestion de contenu


` Cest une t ache ardue que danalyser lintroduction dune application de gestion de contenu a travers des processus nouveaux ou existants. Pareil travail implique la d enition des sources, des fr equences et des formats de contenu. De plus, il faut aborder la planication et la mise tapes de travail an de r en place des e epondre aux besoins r edactionnels du projet. Le Business Process Redesign (BPR) est un outil r epandu pour lanalyse, le d eveloppement et la construction de tels processus de travail et leur mise en uvre dans un environnement de ` un Rapid Application Development (RAD) produit des gestion de contenu. Le BPR combin ea workows efcaces et des processus dentreprise support es par une infrastructure informatique. Nous expliquerons bri` evement ces deux approches. Nous vous donnerons par la m eme ` partir de laquelle vous apprendrez a ` mieux conna occasion une base a tre ces proc edures. Dans ce cadre, il suft de comprendre que, dans le contexte du BPR, chaque processus den tre diss treprise peut e equ e de fac on analytique en une cha ne d el ements. Cette analyse met vidence le d en e eroulement dune t ache sp ecique, avec toutes les conditions, les transformations, les r esultats et les d ecisions qui sy rattachent. Cela permet didentier les potentiels tre support doptimisation, qui souvent peuvent e es de fac on pratique par lutilisation ou la modication de la technologie de CMS. 5 Le choix dun syst` eme de gestion de contenu r esulte souvent dune telle approche analytique, qui peut ici faire ofce dexemple doptimisation fondamentale du processus de gestion de contenu : sans CMS, la cr eation et la maintenance de sites Web demeurent r eserv ees aux experts ayant des connaissances techniques. Le chemin allant de la cr eation dinformation au sein de la soci et e jusqu` a sa communication avec la client` ele, ses employ es ou des partenaires dentreprise est devenu beaucoup plus efcace et rapide gr ace au CMS. En effet, les employ es ayant la connaissance du contenu n ecessaire sont maintenant en mesure de la publier sans expertise technique : le processus de publication dinformation sen trouve simpli e et acc el er e. Comme second exemple, un CMS pourrait dupliquer automatiquement toute donn ee produite par une source utilisable universellement, et afcher les annotations faites par les r edacteurs, puis les publier sur des sites Web, par le biais de pages statiques, ou via des services Web. La ` l maintenance de donn ees a etat pur serait optimis ee par la centralisation et la disponibilit e de donn ees enrichies en une sorte de noyau dinformation multi-usage. Un exemple de ce genre tre trouv ` la r peut e ea ef erence ci-contre.
5 Vous pouvez consulter une repr esentation th eorique exhaustive accompagn ee dexemples pratiques dans Workow Management : Models, Methods and Systems de Wil van der Aalst et Kess van Hee, The MIT Press, Cambridge Massachusetts, 2002.

R ef erence

253617

141

4 TYPO3 pour les administrateurs

tre r ` utiliser et pragmatiques. Aussi Les proc edures dentreprise devraient e ealistes, faciles a tre group souvent que possible, la cr eation et le traitement de linformation doivent e es, les activit es parall` eles fusionn ees, les m ecanismes de contr ole mis en uvre, et linformation re` la source. 6 cueillie a ` bien des e gards, e tre adopt Ces mots dordre peuvent, a es dans une situation de gestion de ` l contenu, que ce soit par la centralisation des donn ees a echelle de lentreprise dans une source unique, ou par lassignation intelligente des droits dutilisateur, en congurant linterface de ` effectuer, par des proc r edaction en fonction des t aches a edures transparentes et simples, ou encore par des contr oles de qualit e permanents. tre support Avec TYPO3, les proc ed es plani es de cette fac on peuvent e es et afch es concr` etement par le syst` eme de droits dacc` es, par la conguration optimis ee de linterface r edacteur, et par des workows et des commandes pr ed enis. De plus, on peut d evelopper et ajouter des extensions sp ecialis ees an dam eliorer ce processus. ` la description d Cette analyse m ethodique et cette conception du processus conduisent a etaill ee de la solution envisag ee : Le site est structur e par sujets tudes de cas, produits, feuilles de donn Le contenu, les sources et les formats (actualit es, e ees, etc.) Les utilisateurs sont regroup es par r oles l Les processus de travail des utilisateurs sont en relation avec les e ements de contenu/for l mats ainsi quavec le ux des informations dans ce quon appelle le cycle de vie des e ements de contenu (cf. section 1.2.2)

4.3 Principes dorganisation des droits dacc` es dans TYPO3


tre directement inject Alors que lorganisation de contenu peut e ee dans la structure du site, ` accorder a ` chaque utilisateur nest pas men lanalyse des droits a ee de fac on aussi intuitive ; il faut conna tre le mode de fonctionnement dattribution des droits dans le syst` eme. On distingue principalement les trois points suivants : Utilisateurs et groupes tre assign Des param` etres globaux peuvent leur e es an de contr oler les options d edition. Pages Pour chaque page, on d enit les permissions pour le propri etaire , le groupe et tous (tous les autres).

de linterface d Controle edition tre param Linterface utilisateur peut e etr ee en fonction des pages ou en fonction des utilisateurs/groupes dutilisateurs.
6 M. Hammer : Reengineering Work : Dont Automate, Obliterate, Harvard Business Review, July-August 1990, pp.104-112

142

4.3 Principes dorganisation des droits dacc` es dans TYPO3

Dans la pratique, la structure du contenu existant d etermine la structure future des pages dans ` cette structure de pages en une arborescence. Les droits des employ es concern es sont li es a fonction des processus de travail. En se basant sur les types de t aches, on peut mener une analyse des fonctionnalit es n ecessaires ` chaque prol dutilisateur et envisager les modications a ` apporter a ` linterface pour simplia er son utilisation, ainsi que pour diminuer les co uts de formation. tre pr ` deux dimensions dont les Le r esultat peut e esent e formellement dans un diagramme a axes sont repr esent es respectivement par les utilisateurs et les droits. Tr` es souvent, il suft de convertir directement ce diagramme dans les param` etres correspondants de TYPO3. Le module Outils Administration des utilisateurs vous donne une vue densemble sur les droits des utilisateurs. Cette mani` ere de proc eder est logique et rapide. Elle convient particuli` erement bien au contexte de lapproche RAD d ecrite plus bas. Cette approche est bas ee sur le principe selon lequel le succ` es du projet d epend du degr e dimplication des utilisateurs dans le processus de d enition, et de leur niveau de connaissance. t Lors du d eveloppement de logiciels, la m ethode RAD (Rapid Application Development ) a e e ` cette n, ce qui implique la validation de lapproche conceptuelle dun projet d evelopp ee a informatique en d eveloppant des prototypes de lapplication d` es les tout premiers stades. Par la suite, les utilisateurs sont aussi sollicit es pour tester et am eliorer lapplication.7 troitement li Cette approche garantit que la planication et la mise en uvre demeurent e ees, et quil ny aura aucun choc d esagr eable lors de la mise en application de la th eorie dans des situations quotidiennes. TYPO3 est id eal pour la cr eation rapide de prototypes, an par exemple de tester en pratique la distribution des t aches et des droits chez les utilisateurs. Un autre point positif est que les utilisateurs se familiarisent d ej` a avec les options et les principes fonctionnels, se pr eparant de la sorte au travail qui les attend. ` la possibilit Gr ace a e quoffre TYPO3 dajouter du contenu et de cr eer des structures de pages, ` vous entra m eme sans que linterface soit compl` etement nie, vous pouvez commencer a ner imm ediatement apr` es linstallation et la conguration. De cette fac on, vous comprendrez plus rapidement les concepts dutilisateur et de structure du contenu, et la connaissance que vous tre utilis en aurez pourra e ee de fac on appropri ee an de concevoir linterface, et de produire des applications.

4.3.1 Exemple pratique


Les exemples pratiques repris dans ce chapitre sont bas es sur le sc enario d ecrit ci-dessous. Si tapes individuelles d vous d esirez suivre les e ecrites dans les exemples, il est important que vous connaissiez leur objectif principal, et essentiel que vous param etriez les pages et les conditions comme il est indiqu e dans lexemple repris ici. Notre exemple se focalise sur une situation dans laquelle la plate-forme de gestion de contenu doit fournir trois sites Web. Vu de lext erieur, les trois sites ont un nom de domaine diff erent. Le graphisme repose sur une base commune avec de petites touches qui les particularisent.
7 James Martin : Rapid Application Development , Macmillan Publishing Co., Inc., Indianapolis, USA 1991 ; Wilhelm Hasselbring : Programming languages and systems for prototyping concurrent applications , ACM Comput. Surv. 32(1), 2000, pp. 43-79.

143

4 TYPO3 pour les administrateurs

Portail l Le portail pr esente des e ements de contenu qui ne sont produits, maintenus et archiv es que par les r edacteurs comp etents. De plus, le portail reprend automatiquement linformation des autres sites pr esents dans le syst` eme. Sites Web dit Le syst` eme comporte aussi une s erie de sites Web e es par dautres r edacteurs. Les sites ` diff de notre exemple sont destin es a erents groupes cibles et sont nomm es B2C (Business to Customer), B2B (Business to Business), et B2E (Business to Employee). Chaque r edacteur na acc` es qu` a son interface de travail propre, ainsi qu` a une liste de contenus (voir plus bas) an de r ediger des actualit es au sein dun workow pr ed eni. Produits dans les sites Web En tant quunit es organisationnelles en dessous du niveau du site Web, nous supposons ` la pr quil existe des zones r eserv ees a esentation dun produit particulier. Chaque zone ` ce niveau est supervis a ee par des utilisateurs diff erents (gestionnaires de produits) . Listes de contenus/liste de m edias l tre utilis Les e ements de contenu pouvant e es par des r edacteurs de diff erents sites Web sont enregistr es dans une aire priv ee ; les r edacteurs peuvent aussi y enregistrer ` un usage g ` e tre retravaill l des donn ees destin ees a en eral et/ou a ees. Les e ements de tre ins ` partir de ce dossier a ` laide de l contenu peuvent e er es directement a el ement de tre copi tre r dit contenu Ins erer enregistrements, ou e es, selon quils doivent e ee es ou non. Ceci signie quil est n ecessaire davoir au moins un groupe pour l edition du portail, et un groupe pour l edition de chacun des sites Web. Lassignation de droits au moyen de workows et dactions permet de contr oler le ux des modications apport ees par les r edacteurs de chaque site sur les actualit es et permet une r epartition claire des responsabilit es de production et de publication.

4.3.2 Etapes de mise en uvre


tapes suivantes, dans lordre sp ` la mise en place du syst` Les e eci e, sont n ecessaires a eme : 1. 2. 3. 4. ` partir de laquelle les droits peuvent e tre accord Cr eer une arborescence de base a es Cr eer des groupes qui rassembleront certains utilisateurs Cr eer des comptes utilisateurs qui seront repris dans un groupe particulier Cr eer des workows et des commandes dans lordre que vous d esirez

` celle pr La structure de larborescence de notre exemple correspond a esent ee au chapitre 3.10. tape, nous cr Dans la prochaine e eerons les groupes dutilisateurs ainsi que la base pour les syst` emes de droits dacc` es.

4.4 Administration des utilisateurs backend


Les r edacteurs et les auteurs travaillent le contenu dans les coulisses du site public (frontend). tre Leur espace de travail est ce quon appelle le backend, dont plusieurs param` etres peuvent e 144

4.4 Administration des utilisateurs backend

ajust es en fonction des t aches de chaque participant on peut m eme faire en sorte que lespace de travail soit le frontend.

4.4.1 Cr eer des groupes dutilisateurs


Les droits partag es par plusieurs utilisateurs sont d enis dans les groupes auxquels ils appartiennent. Les groupes ayant moins de droits deviennent des sous-groupes. On obtient alors une hi erarchie, illustr ee par lexemple suivant : Groupe A : Sous-groupe A.1 : Point de montage a/ Point de montage a/1/

Le groupe A.1 h erite de tous les droits du groupe A, en plus de ses propres droits. Si le groupe est membre de plusieurs autres groupes et que certains droits sont contradictoires, il h erite de lensemble des droits positifs. Par exemple, si le groupe A na pas de droit d edition pour une certaine page mais que le groupe B la, un utilisateur appartenant aux deux groupes aura le droit d edition. Lavantage de cr eer une hi erarchie de groupes r eside dans la possibilit e de maintenir tous les param` etres utilisateur de base dans un nombre restreint de groupes (en loccurrence un tre faits que pour un groupe dans seul), de sorte que les r eglages sp eciques ne doivent e lenregistrement correspondant. tre cr s comme suit : Les groupes dutilisateurs de notre exemple devraient e ee Groupe Global ` tous les groupes ; de plus, on lui attribue Contient les param` etres devant sappliquer a des droits de lecture et d ecriture pour toute larborescence chiers, et les droits dacc` es ` une section de larborescence des pages via les points de montage. Ces points de a montage sont d enis par les enregistrements DBmounts. Dans notre cas, le groupe Global contient le point de montage Contenus . Groupe Portail l G` ere la page portail et est responsable de la publication des nouveaux e ements provenant de tous les niveaux du workow. Groupe pour chaque site Web Ils ne contiennent que le point de montage (DB mount) pour acc eder aux sections de larborescence du site ( B2C , B2B et B2E ) ainsi quun point de montage (File Mounts) pour enregistrer leurs propres chiers. Groupe Produit ` une partie de larborescence de chacun des sites et poss` Ce groupe a acc` es a ede son propre point de montage. An de cr eer un groupe dutilisateurs, passez au module Liste et cliquez sur le nom de votre ` c ` la t installation a ot e de lic one repr esentant un globe terrestre situ ea ete de votre arborescence. Vous atteindrez ainsi ce quon appelle le niveau racine , qui contient les enregis` laide de la trements syst` eme . Vous pouvez alors ajouter un nouvel utilisateur backend a fonction Cr eer un nouvel enregistrement. 145

4 TYPO3 pour les administrateurs

Le formulaire est divis e en plusieurs sections : Data Access Entrez le nom du groupe ici. Vous pouvez aussi congurer le groupe dutilisateurs en sp eciant un domaine dans le champ Lock to domain, les utilisateurs ne pourront alors sidentier dans le syst` eme que par le biais dune adresse sp ecique (par exemple [Link]/typo3). Cette pr ecaution est utile si diff erents domaines sont ` votre congur es sur votre serveur Web ou si vous souhaitez restreindre lacc` es TYPO3 a intranet. Access Lists La section Access List contient toutes les options pour la conguration de linter` chaque champ de saisie et section de donn face backend et pour lacc` es a ees pour les groupes. En cochant la case Include Access Lists le formulaire est recharg e. Cest pourquoi il faut enregistrer toutes les donn ees avant de la s electionner. Un message davertissement safche d` es que vous activez loption. LAccess List contient un menu de s election qui liste tous les champs de saisie existants ; vous pouvez les s electionner individuellement en cliquant sur leur nom. Pour s electionner plusieurs champs, cliquez sur les noms tout en maintenant la touche ctrl de votre clavier enfonc ee. Les champs de s election sont les suivants : Modules l Les e ements list es dans le menu de la colonne de gauche de linterface backend sont appel es les modules . Un r edacteur devrait normalement avoir acc` es au moins aux menus Web Page, Web Liste, Fichier et Fichier Fichiers. Il ` lutilisateur la possibilit est utile de laisser a e de param etrer son interface backend, ainsi que la possibilit e de modier son mot de passe via le module Utilisateur Conguration.
Figure 4.1: Apr` es avoir s electionn e Include Access Lists, la section Modules appara t apr` es que le t formulaire a e e recharg e

. Tables (listing) ` partir de cette liste, vous pouvez s A electionner les tables de donn ees qui seront visibles pour lutilisateur. Le nombre de tables pr esentes varie avec le nombre dextensions install ees, certaines comportant elles-m emes des tables. Cest pourquoi, lors dune nouvelle installation, vous devriez v erier les droits dacc` es dans ce champ et le champ suivant. 146

4.4 Administration des utilisateurs backend

Figure 4.2: S election des tables qui seront visibles pour lutilisateur

Tables (modify) Vous s electionnez ici les tables de la base de donn ees qui seront susceptibles d etre modi ees par lutilisateur. Page types tre modi Vous pouvez ici sp ecier quels types de pages pourront e es par les membres de ce groupe dutilisateurs.
Figure 4.3: S election des types de tre pages pouvant e dit e es par lutilisateur

Allowed excludeelds ` laide des champs Excludeelds, vous pouvez d A enir plus pr ecis ement que dans le menu Tables quels champs d edition seront visibles pour un groupe dutilisateurs. t Si un champ a e e d eni en tant qu excludeeld , et nest pas s electionn e explicitement dans cette liste, il demeurera invisible pour lutilisateur membre de ce groupe.
Figure 4.4: S election des champs d edition qui seront visibles pour lutilisateur

147

4 TYPO3 pour les administrateurs

Explicitly allow/deny eld values t ` la version 3.7.0 en r Cette option tant attendue a e e ajout ee a eponse au probl` eme de d esactivation des types de contenu pour les groupes. Jusqualors, on ne pouvait les rendre invisibles que par le biais des options TSCong. La s election dun type de contenu d esactive ce dernier pour le groupe concern e. Pour des raisons de l s ecurit e, la d esactivation des e ements de contenu Script et HTML est consid er ee comme un minimum.
Figure 4.5: D esactivation de types de contenu pour un groupe

Limit to Languages ` certaines langues du site. Ici, on peut limiter lacc` es des groupes a Custom Module Options Les options sp eciques aux modules dextension backend peuvent sins erer dans cette section. DB Mounts ` lutiliUn point de montage de type Database (DB) Mounts permet dassigner a sateur un point dentr ee dans larborescence des pages. Si lutilisateur appartient ` plusieurs groupes diff a erents, et quun point dentr ee est d eni plusieurs fois, il appara tra le m eme nombre de fois dans le backend de lutilisateur. Cest pourquoi ` ne pas cr vous devez veiller a eer de param` etres se r ep etant dans plusieurs groupes. Dans notre exemple, vous devriez congurer les groupes comme suit : 148

4.4 Administration des utilisateurs backend

Groupe Global Portail Produits B2C B2B B2E

Point de montage Contenus Portail Produits B2C Accueil B2B Accueil B2E Accueil

Tableau 4.1: Exemple de groupes dutilisateurs et leurs points de montage

Filemounts Ce champ fait r ef erence aux r epertoires du syst` eme de chiers qui sont assign es aux groupes dutilisateurs dans lesquels les utilisateurs peuvent enregistrer leurs chiers. Vous devez s electionner un point de montage de type chiers. En tant quenregistrements syst` eme , ces points de montage sont sauvegard es au niveau racine de linstallation TYPO3, tout comme les utilisateurs et les groupes. On ` cet endroit, soit y acc peut soit les cr eer a eder dans le formulaire d edition de groupe via les ic ones Edit lemount, Create lemount ou List lemount situ es ` droite du champ de s a election File Mounts. les sousAn de d enir un point de montage, ladministrateur doit avoir cr ee r epertoires correspondants dans le r epertoire leadmin, via le module Fichier Fichiers. Les noms des r epertoires dans le syst` eme de chiers et les noms des points de montage ne sont pas n ecessairement les m emes. Dans notre exemple, nous donnerons les noms suivants aux r epertoires d ej` a existants : Groupe Global Portail B2C B2B B2E Produit Nom de point de montage Media Tous les chiers Fichiers B2C Fichiers B2B Fichiers B2E Fichiers P Chemin Media/ chiers/ chiers/chiers_B2C/ chiers/chiers_B2B/ chiers/chiers_B2E/ chiers/chiers_p/
Tableau 4.2: Exemples de groupes, points de montage et chemins

Le nom qui sera visible pour les utilisateurs est entr e dans le champ Label. Dans ` partir du r le champ Path, sp eciez le chemin a epertoire leadmin situ e dans le r epertoire Web de votre serveur Web. Vous pouvez aussi sp ecier un chemin absolu. Dans les deux cas, le nom du chemin doit se terminer par une barre oblique. Hide in Lists ` supprimer lafchage du groupe dans le module Utilisateur Cette option sert a Centre de t aches ainsi que dans le module Web Acc` es. De cette fac on, on viter que les utilisateurs envoient des messages (dans le module Utilisateur peut e 149

4 TYPO3 pour les administrateurs

` des groupes globaux qui nont e t s qu` Centre de t aches) a e cr ee a des ns administratives. Subgroups Loption Subgroups permet dassigner le groupe en tant que sous-groupe dun autre groupe dont il h erite des droits et des param` etres. Dans notre exemple, nous d enirons le groupe Global comme ayant pour sous-groupes tous les autres groupes, an que ces derniers en rec oivent toute la conguration. TSConf Le dernier champ du formulaire permet dins erer du code TypoScript. Cette section ` la section 4.8. nomm ee TSConf est vue plus en d etail a ` laide du bouton correspondant. Vous pouvez maintenant enregistrer et fermer le formulaire a Si vous avez utilis e loption Include Access Lists lors de la cr eation dun groupe, ce dernier sera afch e avec une ic one rouge dans lafchage liste (module Liste). Les groupes dutilisateurs t dit ` laide de cette derni` nayant pas e ee es a ere option rec oivent une ic one bleue.

4.4.2 Cr eer des comptes utilisateurs


des groupes, cest au tour des utilisateurs, qui peuvent e tre assign ` ces Apr` es avoir cr ee es a groupes. Le formulaire de cr eation des comptes utilisateurs ne diff` ere de celui de la cr eation de groupes que par les options pour la conguration des acc` es aux chiers dans le module Fichier. tre Les utilisateurs devraient toujours avoir leur propre compte utilisateur car celui-ci peut e ` des ns administratives ou de utilis e non seulement pour lattribution de droits, mais aussi a travail collaboratif. tre trac Les actions des utilisateurs peuvent e ees avec une fonction log Les utilisateurs peuvent communiquer via le module Utilisateur Centre de t aches en utilisant de simples fonctions de travail collaboratif (Actualit es, T aches, Notes). Les utilisateurs peuvent r egler eux-m emes lafchage et le mode de fonctionnement du backend, ou bien recevoir un environnement de travail personnalis e par ladministrateur. tape, nous ajouterons un utilisateur a ` chaque groupe, an de pouvoir Dans la prochaine e ensuite tester la conguration. De retour au niveau racine du syst` eme, s electionnez Cr eer un nouvel enregistrement et Utilisateur backend. Voici les diff erentes sections du formulaire : Donn ees dacc` es La premi` ere section du formulaire contient les champs pour lintroduction dun nom ` un groupe, et loption pour lier un dutilisateur, dun mot de passe, dune affectation a ` un nom de domaine. utilisateur a Les noms dutilisateurs ne doivent contenir que des lettres minuscules, les espaces ne sont pas admis. Lorsque vous entrez un mot de passe, il demeure visible jusqu` a ce que vous layiez sauvegard e pour la premi` ere fois ; il est ensuite enregistr e sous un format de hachage MD5 dans la base de donn ees et est transf er e dans le backend sous cette forme lors de lidentication via le serveur Web. Ceci a pour cons equence que le mot de tre relu : il doit alors e tre r passe oubli e ne peut e eassign e. 150

4.4 Administration des utilisateurs backend

Groupes dutilisateur ` un ou plusieurs groupes via le champ de s On peut aflier lutilisateur a election. Les ` droite du champ permettent de cr options situ ees a eer, d editer ou de lister des groupes dutilisateurs. Lordre dans lequel les groupes sont mentionn es est important lors de es par lutilisateur appartiennent la d enition des droits. Les pages nouvellement cr ee toujours au premier groupe apparaissant dans la liste. On peut modier ce param` etre ` laide de TSCong, tout comme les droits des utilisateurs, des groupes et de tous les a ` la section 4.8. Loption Lock to Domain garantit, dans des autres. Ceci est illustr ea syst` emes comportant plusieurs domaines Internet, que les utilisateurs ne sidentient que dans leur propre domaine. Admin ` lutilisateur La seconde section du formulaire contient loption Admin, qui donne a tre un acc` es illimit e au syst` eme. Autant que possible, cette conguration ne devrait e tre utilis appliqu ee que pour un seul utilisateur dans le syst` eme, ou du moins e ee le moins souvent possible. A quelques exceptions pr` es, un utilisateur ayant les droits dun administrateur est en mesure de d etruire irr em ediablement la conguration et tous les l e ements de contenu. Donn ees utilisateurs ` la saisie de donn La section suivante sert a ees sur lutilisateur ; lutilisateur peut les modier via le module Utilisateur Conguration, bien quil nait pas compl` etement ` lenregistrement. acc` es a DB Mounts et Filemounts t ` la section 4.4.1. Lorsque les Le syst` eme de lemounts et DB mounts a d ej` ae e d ecrit a options DB Mounts et File Mounts sont d esactiv ees dans la section Mount from groups, lutilisateur nh erite plus des param` etres du groupe auquel il appartient en ce qui concerne le point de montage. De plus, cette action peut inuencer les droits disponibles pour lutilisateur en termes de chiers dans son propre point de montage. TSConf ` Les possibilit es de conguration de lutilisateur via TypoScript sont vues plus en d etail a la section 4.8. . Si vous quitVous pouvez maintenant enregistrer et fermer le formulaire : lutilisateur est cr ee tez le syst` eme et que vous vous identiez maintenant en tant quun des nouveaux utilisateurs, vous pourrez v erier votre conguration. Exemple Cr eez les utilisateurs suivants pour les groupes Portail , B2C , B2B et B2E : Utilisateur Portail-redacteur b2c-redacteur-1 b2c-redacteur-2 b2b-redacteur b2e-redacteur Groupe Portail B2C B2C B2B B2E
Tableau 4.3: Exemple dutilisateurs

151

4 TYPO3 pour les administrateurs

La cr eation de comptes utilisateurs pour les gestionnaires de produits dont nous avions parl e ci-dessus sera vue plus tard, en m eme temps que la fonctionnalit e des commandes (cf. section 4.10).

` laide du module 4.5 Administration des utilisateurs a Outils Administration des utilisateurs
Le module Outils contient une interface dadministration et danalyse, dans le sous-module Administration des utilisateurs, qui joue un r ole primordial dans le travail quotidien de ` laide de plusieurs crit` ladministrateur. Cet outil permet dafcher l etat actuel des droits a eres, et deffectuer des modications si n ecessaire. La conguration dun utilisateur ou dun groupe (si vous avez pr ealablement s electionn e lafchage de groupes) safche individuellement lorsque vous cliquez sur le nom dutilisateur ou de groupe. On peut entre autres y voir la liste des pages auxquelles lutilisateur en question na pas acc` es. Les autres param` etres sont expliqu es dans le tableau ci-dessous. Les options pour diter les enregistrements fonctionnent de la m e eme fac on que celles du module Liste. Loption SU de la liste dutilisateurs offre une option particuli` ere. En cliquant sur cette ic one ` la commande UNIX du m (SU pour Switch User comparable a eme nom), ladministrateur passe dans le compte utilisateur s electionn e. Cette option est tr` es utile pour v erier les con` linterface administrateur est gurations. Dans ce cas toutefois, la seule fac on de retourner a ` nouveau en tant quadministrateur. Ladministrateur de sortir de TYPO3 et de sidentier a peut ainsi se glisser dans nimporte quel prol dutilisateur, peu importe le cas, m eme sil nen conna t pas le mot de passe. tre param Lafchage des utilisateurs et des groupes dans laperc u danalyse peut e etr e par les tre utilis options suivantes, pouvant e ees seules ou combin ees :
Tableau 4.4: Afchage dutilisateurs et de groupes

Option Filemounts Webmounts Default upload path Main user group Member of groups Page types access Select Tables Modify Tables

Signication Comparaison des utilisateurs en fonction des r epertoires auxquels ils ont acc` es Comparaison des utilisateurs en fonction des pages de larborescence auxquelles ils ont acc` es ` partir Chemin pour les t el echargements de chiers a d el ements de page Premier groupe dont lutilisateur est membre Autres groupes dont lutilisateur est membre Types de page que les utilisateurs peuvent cr eer Tables de la base de donn ees que lutilisateur peut visualiser Tables de la base de donn ees que lutilisateur peut modier

152

4.6 Droits dacc` es au niveau de la page


suite

Option Non-exclude elds Explicit Allow/Deny Limit to languages

Signication diter Champs que lutilisateur peut e ements de contenu que lutilisateur nest pas autoris El e ` ins a erer Langues dans lesquelles les membres dun groupe diter des e l peuvent ou ne peuvent pas e ements de contenu Conguration de droits ajout es par un module dextension backend Modules backend auxquels lutilisateur a acc` es Param` etres TSCong pour cet utilisateur Param` etres TSCong pour cet utilisateur en mode tendu e

Custom Module Options Modules TSCong TSCong HL

Si vous avez saisi les valeurs mentionn ees dans les sections pr ec edentes, lutilisateur admin appara t comme suit, apr` es que vous avez coch e les cases Main User Group et Member of Groups :
Figure 4.6: Afchage de tous les groupes dont lutilisateur est membre (droite) et du premier groupe dont il est membre (centre)

` cette distinction entre les utilisateurs, il est facile de maintenir des param` Gr ace a etres via des groupes de base communs ( Global ), tout en assignant aux utilisateurs individuels des environnements de travail compl` etement diff erents ainsi que des sections de larborescence s epar ees. An de v erier la conguration de chacun des groupes dutilisateurs et de les peau` SU et v ner, vous pouvez aussi passer dans chacun des comptes utilisateurs gr ace a erier la gamme de fonctions disponibles pour lutilisateur en question. ATTENTION : pour quun utilisateur soit en mesure d editer des pages, ces derni` eres doivent tre rendues accessibles a ` laide du module d e ecrit ci-dessous.

4.6 Droits dacc` es au niveau de la page


Comme dans le syst` eme de chier sous Linux, le module dacc` es vous permet daccorder des ` tous les autres . Au d droits aux utilisateurs , aux groupes et a epart, ces droits sont 153

4 TYPO3 pour les administrateurs

x es automatiquement lors de la cr eation dune page, peu importe le cr eateur de cette page. Le cr eateur en devient automatiquement propri etaire, et le premier groupe auquel il appartient obtient les droits dacc` es. Ces valeurs, ainsi que les permissions accord ees automatiquement, tre modi peuvent e ees et ajust ees de fac on individuelle via TSConf (cf. section 4.8). ` la page s Lors de son ouverture, le module Web Acc` es se r ef` ere toujours a electionn ee, afch ee dans le coin sup erieur gauche de la vue d etaill ee. Le mode Utilisateur (vue densemble) est alors activ e. Ce mode dafchage montre les pages en une arborescence qui re tre congur prend le nombre de niveaux pouvant e es. Le mode Permissions afche les pages ` tous les autres. avec les droits accord es au propri etaire, au groupe et a Une fois que vous avez s electionn e une page, un formulaire safche. En cliquant sue lic one crayon , vous pouvez attribuer les droits de cette page au propri etaire et aux groupes. Vous pouvez ensuite d eterminer jusqu` a quel niveau de sous-pages ces param` etres sont valables.

Exemple Passez au module Acc` es et s electionnez la page Contenus dans larborescence. Ouvrez ensuite le formulaire d edition en cliquant sur lic one crayon. Assignez cette page ainsi que ses sous-pages au groupe utilisateur Global et accordez les permissions dacc` es comme tes ramen ` illustr e dans la capture d ecran 4.7. Lorsque vous enregistrez vos entr ees, vous e ea ditez laperc u utilisateur. A pr esent, ouvrez de nouveau le formulaire d edition de la page et r ee ` celui de les droits dacc` es seulement pour cette page, en ramenant le nombre de niveaux a une situation dans laquelle les utilisateurs dun groupe la page actuelle. Vous avez ainsi cr ee diter toutes les sous-pages, mais pas la page racine, sans que ladministrateur ne peuvent e doive intervenir pour modier la conguration de chacune des pages. ` ceci : Le r esultat nal devrait maintenant ressembler a
Figure 4.7: Afchage des droits dacc` es dans le module Web acc` es

An de rendre toutes les sections de larborescence disponibles pour tous les utilisateurs, il est plus simple daccorder tous les droits correspondant au groupe Global , except e pour les tre modi pages d Accueil et toutes les pages ne devant pas e ees. Notez que les acc` es sont d ej` a restreints dans larborescence par les points de montage d enis pour chacun des groupes. 154

4.7 Edition frontend pour utilisateurs backend

4.7 Edition frontend pour utilisateurs backend


Nous navons pas encore mentionn e lun des plus grands avantages de TYPO3 : il est possible pour les utilisateurs de travailler directement sur le site, sans avoir recours au backend, ou ` ce dernier. TYPO3 supporte par d l comme alternative a efaut la possibilit e d editer les e ements ` laide dune de contenu apr` es lafchage dune page, ainsi que dajouter de nouvelles pages. A tre redirig simple extension, les utilisateurs concern es peuvent en outre e es directement dans le site Web (d enomm e le frontend ), voire travailler uniquement en tant quutilisateurs frontend ( frontend-only ). ` guider le r ` Une troisi` eme possibilit e consiste a edacteur via un hyperlien dune autre page a ` ce lien qui le ram` la page didentication vers le backend, et dajouter un param` etre a enera, apr` es son identication, dans le site Web avec options d edition, plut ot que dans le backend. Le backend demeure ainsi accessible pour le r edacteur si n ecessaire. ` la page daccueil du site apr` ` ceci : Un lien ramenant lutilisateur a es lidentication, ressemble a
<a href="typo3/[Link]?redirect_url=../">Identification au backend avec redirection vers le frontend</a>
R ef erence

884598

Le Panneau dadministration sert doutil dadministration du module d edition frontend. Il offre les fonctionnalit es d edition requises par une interface utilisateur simpli ee. Bien s ur, le tre personnalis panneau dadministration et ses options peuvent e es pour chaque utilisateur. ` utiliser le dition frontend. An den Les administrateurs sont automatiquement autoris es a ` un utilisateur, la conguration suivante est n donner aussi la possibilit ea ecessaire : 1. tre conLafchage du panneau dadministration dans le frontend du site Web doit e gur e. Entrez la commande suivante dans le champ Setup du gabarit de votre page :
[Link] = 1

2.

An de donner maintenant des acc` es de groupe aux options d edition frontend ainsi ` des utilisateurs individuels, la conguration Typoquun panneau dadministration a tre ajout Script suivante doit e ee dans le champ TSConf du groupe de lutilisateur. Pour y parvenir, entrez la commande suivante directement dans le champ TSConf ou utilisez lassistant :
admPanel { [Link] = 1 }

tre r Mais les options peuvent e egl ees de fac on encore plus pr ecise. En ce qui concerne des r edacteurs particuliers, on peut utiliser la conguration suivante, qui afche automatiquement toutes les options d edition mais garde le panneau dadministration invisible :
admPanel { [Link] = 1 [Link] = 1 [Link] = 1 hide = 1 }

155

4 TYPO3 pour les administrateurs

` chaque section du panneau dadministration. Par exemple, On peut acc eder individuellement a tre afch ` laide de la commande : m eme les options du cache peuvent e ees pour un r edacteur a
[Link] = 1

Le panneau dadministration se compose des sections suivantes, accompagn ees de leurs cl es TypoScript :
Tableau 4.5: Sections du panneau dadministration et les cl es TypoScript

Nom Pr evisualiser Cache Publier Editer TypoScript Info

Cl e TS preview cache publish edit tsdebug info

Fonction Options de pr evisualisation Vider le cache et options du cache Options pour lexport statique de pages HTML Options d edition Diff erentes fonctions pour le d eveloppement de gabarits, surtout pour le d ebogage Informations sur la page

tre activ Chaque partie du panneau dadministration peut e ee s epar ement, mais vous pouvez aussi lafcher enti` erement :
[Link] = 1

plut ot que de devoir activer chaque section s epar ement. l L edition frontend ne se limite pas quaux pages et aux e ements de contenu. En principe, tre congur ` nimporte quelle table de la base de donn ees peut e ee pour l edition frontend a laide des entr ees correspondantes dans le gabarit de la page. De cette fac on, l edition frontend tre utilis l peut aussi e ee si des e ements de contenu tels que des enregistrements de produits, tre e dit dactualit es, ou dautres contenus assign es aux pages doivent e es. Voici un exemple TypoScript qui congure l edition de nouvelles entr ees de la table de base de donn ees tt_news :
[Link] = COA [Link] { 10 = EDITPANEL 10 { newRecordFromTable = tt_news allow = toolbar,edit,move,hide,delete,new label = page:<B>%s</B><br>&nbsp;cr eer une actualit e [Link] = 1 line = 4 } }

Si vous ins erez cet objet avec lexpression


page.20 < [Link]

156

4.8 TScong options et interface

tre dans le gabarit dune page, les options d edition gr ace auxquelles les actualit es peuvent e dit e ees sur cette page safchent.

4.8 TScong options et interface


`e crire des gabarits. Avec la m TypoScript ne sert pas seulement a eme syntaxe except e pour les param` etres du type Constants et Conditions qui nexistent pas dans ce cas-ci les valeurs tre d ` la base de registre de Windows (Windows Registry). peuvent e enies de fac on similaire a On peut agir sur deux plans : TSCong utilisateur tre utilis Par utilisateur et par groupe, TSCong peut e e pour inuencer globalement lafchage du backend, ou seulement les modules individuels du backend. TSCong page tre utilis Au niveau de la page, TSCong peut e e an de congurer diff erentes sections du site Web. tre utilis Un param` etre TSCong utilisateur peut e e en remplacement dune option sp ecique ` un administrateur davoir un afchage dune arborescence, an de permettre par exemple a diff erent de celui dun utilisateur dont lespace de travail est plus restreint. ` toutes Des propri et es TSCong page entr ees dans len-t ete dune page s etendront toujours a ses sous-pages. An de permettre aux administrateurs de travailler rapidement avec ce syst` eme, t un outil a e e d evelopp e, appel e TypoScript Property Lookup Wizard.

4.8.1 Assistant TSCong : consulter les propri et es TypoScript


` droite du champ de saisie dans le formulaire Lorsque vous cliquez sur lic one TS situ ee a d edition de len-t ete dune page, dun utilisateur ou dun groupe, une aide en ligne souvre et afche toutes les options TSCong disponibles. Cette r ef erence en ligne est disponible pour toutes les installations TYPO3, et lassistant TSCong vous permet de transf erer des valeurs TSCong directement dans le champ de saisie TSCong du formulaire. Lassistant est tr` es simple : un clic sur une valeur transf` ere directement cette derni` ere dans la fen etre TSCong du formulaire d edition, tout en fermant lassistant. Si vous cliquez sur + au lieu de cliquer sur le nom, les param` etres sont transf er es dans le champ de saisie de l editeur. Loption Entourer place le param` etre entre crochets. Indenter et ` indenter les lignes, an dapporter plus de clart D esindenter servent a e.

4.8.2 TSCong utilisateur


` laide de Pour chaque groupe dutilisateurs, TypoScript offre une s erie de congurations a ` partir du formulaire d TSCong. Vous obtenez un aperc u si vous ouvrez lassistant a edition dun compte utilisateur ou dun groupe. Tout comme larborescence dobjets au niveau des gabarits, nous appelons cet aperc u larborescence TSCong utilisateur ou TSCong page. Les diff erentes sections de larborescence TSCong utilisateur correspondent aux options de conguration suivantes : 157
R ef erence

198531

4 TYPO3 pour les administrateurs

admPanel Conguration du panneau dadministration du frontend options Conguration g en erale du backend setup Contient les branches default et override ; les options de conguration dans le mo tre contr dule Utilisateur Conguration peuvent aussi e ol ees ici avec TypoScript. Ces deux branches contiennent les m emes param` etres, mais ont un effet diff erent. Avec default, vous pouvez, tout comme ladministrateur, inuencer les r eglages par d efaut que lutilisateur retrouve dans le module. Si lutilisateur choisit pour ce module de restaurer la conguration par d efaut, le syst` eme retourne aux param` etres congur es par default. Le param` etre override permet de pr ed enir pour les utilisateurs les param` etres tre modi qui ne peuvent e es dans le module Utilisateur Conguration. Ceci peut sav erer utile du point de vue de ladministrateur, an d eviter, par exemple, que des ventuellement effac pages ne soient e ees r ecursivement. Mod La section Mod fait r ef erence aux sous-modules du module Web. Une s erie de param` etres sont disponibles an de congurer ces sous-modules.

ATTENTION : les options de conguration pour le module Info ne sont actuellement pas actives ! Exemple ` la conTout dabord, xons diff erentes options de visualisation pour tous les groupes, gr ace a guration du groupe Global . Parce que la mise en page nutilise que les colonnes normal et droite, lafchage des colonnes gauche et bordure dans le backend est inutile. On s electionne donc les colonnes avec lentr ee suivante :
mod { SHARED.colPos_list = 0,2 }

Les colonnes sont r epertori ees comme suit : gauche=1, normal=0, droite=2, bordure=3. An dobtenir un afchage uniforme pour tous les utilisateurs de ce groupe, vous devez, par exemple, d esactiver lafchage de vignettes dans le backend, et faire en sorte que lutilisateur soit redirig e vers le module Utilisateur Centre de t aches apr` es identication, plut ot que vers la page daide :
[Link] { thumbnailsByDefault = 0 startInTaskCenter = 1 }

tre visualis Les param` etres pour les utilisateurs peuvent e es et compar es dans le module Outils Administration des utilisateurs avec les options TSCong et TSCong HL. TSCong 158

4.8 TScong options et interface

afche le m eme contenu que le navigateur Conguration TS de la page du module Info. vidence, par lemploi de couleurs, les valeurs et la syntaxe. TSCong HL met en e

4.8.3 TSCong page


` celles du TSCong utilisateur au niveau de la page. Les options Dautres options sajoutent a tre assign suivantes peuvent aussi e ees aux utilisateurs et aux groupes dans leurs champs TS tre entr Cong. Inversement, les options TSCong utilisateur ne peuvent pas e ees dans les pages. Au niveau de la page, les sections suivantes sont disponibles : TSFE mod Contient une option permettant de transf erer une session utilisateur. Contr ole les menus des modules backend.
R ef erence

168197

TCEMAIN tre congur Concerne les options qui peuvent e ees pour chaque table de syst` eme, telles que celles reprenant le nombre dentr ees et les limites de temps pour lhistorique d edition ; cette option permet aussi daccorder des droits pour une arborescence sans tenir compte de la conguration des utilisateurs et des groupes pour la cr eation de pages. TCEFORM ` la conguration dans les formulaires du backend et des champs que Fait r ef erence a ceux-ci contiennent. RTE tre param Le Rich Text Editor peut aussi e etr e dans TSCong. Cependant, on nutilise g en eralement pas toutes les possibilit es car plusieurs options ne sont plus compatibles avec les standards actuels du Web.

Exemples TCEMAIN TCEMAIN permet de congurer les droits des utilisateurs ou des groupes pour la cr eation de nouvelles pages. Lentr ee suivante dans la page daccueil dune arborescence,
[Link] = 1

es dans cette arborescence appartiendront automatiquesp ecie que de nouvelles pages cr ee ment au groupe Global plut ot quau groupe utilisateur principal. Le groupe est identi e par son UID ( 1 dans notre exemple) dans la base de donn ees. LUID est aussi afch e par le module Web Liste du backend, si vous cliquez sur lic one dinformation dans lafchage tendu ou si vous placez le curseur sur lic liste en mode e one du groupe dans lafchage liste). La m eme entr ee dans le groupe Global , dont tous les autres groupes font partie, permet ` ces derniers d a editer toutes les pages, pour autant quils y aient acc` es. De cette mani` ere, les utilisateurs dun groupe (ou ladministrateur) peuvent cr eer des pages et ne doivent plus sp ecier les permissions pour que les utilisateurs dun autre groupe puissent y acc eder. l ` un groupe, les droits de ce Apr` es avoir assign e de nouveaux e ements de fac on permanente a tre congur groupe sur les pages peuvent e es. On utilise alors la cl e [Link] : 159

4 TYPO3 pour les administrateurs


[Link] = show, editcontent

Les valeurs disponibles sont Show (afcher dans le backend), Editcontent, Edit ( editer lent ete de la page) , New (cr eer de nouvelles pages), et Delete. l Lorsque vous copiez ces e ements dans le backend de TYPO3, des sufxes sont automatique t ment ajout es aux noms. Page1 devient alors Page1 (copy) une fois quelle a e e copi ee tre d et ins er ee quelque part. Cette fonction peut e esactiv ee en entrant :
[Link] = 0
R ef erence R ef erence

036769 176791

` la r La liste exhaustive des options TCEMAIN se trouve a ef erence ci-contre. ` la r Vous pouvez trouver une liste des cl es TypoScript pour param etrer les tables a ef erence ci-contre. Exemples TCEFORM On peut param etrer tous les formulaires dentr ee en ce qui concerne lafchage et le nom des ` TCEFORM. On utilise alors la notation suivante : options gr ace a
TCEFORM.[nom table].[nom champ].[cl e TSConf] = valeur.

R ef erence

538296

` la r Les cl es TSConf ainsi que les valeurs sont d enies a ef erence ci-contre. ` certains types de contenu Tout dabord, pour des raisons de s ecurit e, nous retirons lacc` es a pour notre groupe dutilisateurs Global :
[Link] [Link] = search, login, div, script, html

l tre supprim Les e ements script et HTML devraient toujours e es dans chaque installation, parce quils repr esentent un risque important au niveau de la s ecurit e entre les mains de pirates ` acc informatiques exp eriment es ayant r eussi a eder au backend. Ils demeurent toutefois disponibles dans lassistant, qui safche automatiquement si vous s electionnez loption Cr eer du contenu de page. Nous supprimerons donc lafchage de cet assistant pour le groupe ` laide de lentr Global a ee suivante :
[Link] [Link] = 1

tend tt_content), les e l Dans la conguration par d efaut, (sans extensions, qui e ements suivants tre s ` laide de lexpression contenue dans la colonne peuvent e electionn es, et sont ajout es a cl e TS :
Tableau 4.6: ements des El formulaires dentr ee

Franc ais En-t ete Texte Texte & Image Image

Anglais Header Text Text w/image Image

cl e TS header text textpic image

160

4.8 TScong options et interface


suite

Franc ais ` puces Liste a Tableau Lien vers chier Multim edia Formulaire Recherche Identiant Textbox Menu/Plan du site Ins erer enregistrements Ins erer un plugin Script S eparation HTML

Anglais Bullet list Table Filelinks Multimedia Form Search Login Textbox Menu/Sitemap Insert record Insert plugin Script Divider HTML

cl e TS bullets table uploads multimedia mailform search login splash menu shortcut list script div html

l Vous pouvez aussi sp ecier un autre nom pour chacun des e ements. Vous devez alors conna tre le nom de la table et du champ tels quils sont entr es dans la base de donn ees. Les noms des champs sont repris dans la structure de base de donn ees, que vous pouvez afcher via le module Outils Conguration. Le tableau $TCA, dans le sous-item tt_content, contient tous les champs de la table de base de donn ees dans lesquels on peut enregistrer du contenu de page. tre remplac ` laide de la notation suivante : Les en-t etes peuvent e es par vos propres noms a
TCEFORM.[nom table].[champ table].[position] = valeur

La ligne TypoScript suivante renomme donc len-t ete standard Normal du champ header type en centr e/en haut :
TCEFORM.tt_content.header_layout.altLabels.0 = centr e/en haut

Figure 4.8: Options personnalis ees dans le menu den-t ete

Loption removeItems permet dexclure compl` etement certaines valeurs des listes de s election :
TCEFORM.tt_content.menu_type.removeItems = 3,4,5

161

4 TYPO3 pour les administrateurs

Le nombre entier d esigne la position dans le menu de s election. La ligne ci-dessus cache donc les entr ees plac ees en troisi` eme, quatri` eme et cinqui` eme position de l el ement de contenu Menu/Sitemap .

4.8.4 Ajustement du Rich Text Editor


Le Rich Text editor (RTE) est l editeur WYSIWYG du syst` eme TYPO3, qui fournit aux utilisateurs diff erentes options de mise en forme et plusieurs assistants, bas es sur la technologie dInternet Explorer. En principe, toutes les options offertes par Internet Explorer sont incluses, m eme si la plupart de ces options sont en pratique incompatibles avec les principes de conception standards de mise en page HTML. En r` egle g en erale, la gamme de fonctions du RTE est fortement tre ajust ` vos propres sp restreinte et peut e ee a ecications de mise en forme, gr ace aux options de conguration du RTE. Le Rich Text Editor propose essentiellement les interfaces de conguration suivantes : 1. 2. 3. 4. tre disponible ; le RTE Conguration des champs dentr ee pour lesquels le RTE devrait e peut avoir une conguration diff erente pour chaque champ. Possibilit e dactiver ou de d esactiver les options d edition dans la barre de menu. Conguration des options pour la mise en forme des paragraphes et des caract` eres. Param` etres de transformation pour les entr ees dans le RTE lors de la sauvegarde ainsi ` partir de la base de donn que pour la publication a ees.

Conguration RTE restrictive ` une variante tr` voqu Notre premier exemple se limite a es simple, pour les raisons d ej` ae ees. Dapr` es notre exp erience, cette conguration convient dans la plupart des cas. tre activ Le RTE peut e e ou d esactiv e pour certaines sections de larborescence via le champ correspondant du TSCong page. Dans un premier temps, nous congurons le RTE pour quil ne soit disponible que pour les l e ements de contenu Texte et Texte & image, m eme si des extensions utilisant le RTE sont install ees :
[Link] = 1 [Link].tt_content.[Link] { [Link] = 0 [Link] = 0 }

Ensuite, nous sp ecions que toutes les options, en-t etes et autres mises en formes existantes tre incluses dans le champ texte m ne doivent plus e eme, mais que seules les mises en forme standards (an de faciliter la restauration pour les r edacteurs) et la mise en forme pour les tre disponibles. La suppression des en-t citations doivent e etes dans les champs du RTE est ` d particuli` erement utile, parce quelle force les r edacteurs a enir le texte en plusieurs sections l ` dans des e ements de contenu s epar es, ce qui am eliore la clart e de la r edaction et permet a dautres options, telles que des menus de section, dentrer en jeu. 162

4.8 TScong options et interface


[Link] { highlight { name = surbrillance value = font:bold; color:navy; } citation { name = citation value = font:italic 15px; margin-left:20px; } } [Link] = highlight, citation

Dans TSCong utilisateur, vous pouvez seulement congurer lafchage des menus du RTE pour chacun des groupes ou des utilisateurs. Les options congur ees ici sont disponibles pour ` tous les utilisateurs du syst` tous les membres du groupe Global , ce qui correspond a eme, ` laide de lentr a ee suivante dans le champ TSconf du groupe :
[Link] = class, bold, italic, link

Les r edacteurs voient alors la barre de menu suivante safcher (gure 4.7).
Figure 4.9: Barre de menu r eduite avec mise en forme personnalis ee

Comme vous pouvez le constater, les options pour ins erer des tableaux ou des images via le t l ` cet menu ont aussi e e supprim ees. Pour y pallier, il existe des e ements de contenu pr evus a ` contr effet, plus simples a oler pour obtenir une apparence uniforme, et pr ef erables pour des questions de clart e. tendue Conguration e Le Rich Text Editor poss` ede plusieurs options qui ne sont pas encore visibles dans lafchage tre ajout par d efaut, et doivent e ees. Elles comprennent un objet utilisateur avec lequel vous pouvez ajouter vos propres d enitions. ` laide de lentr A ee suivante par exemple dans le champ TSConf de ladministrateur syst` eme l nous pouvons activer tous les e ements disponibles du RTE :
[Link] = cut, copy, paste, formatblock, class, fontstyle, fontsize, textcolor, bold, italic, underline, left, center, right, orderedlist, unorderedlist, outdent, indent, link, table, bgcolor, image, emoticon, line, user, chMode

Ci-dessous se trouve un exemple de conguration de classes : 163

4 TYPO3 pour les administrateurs


[Link] { colors = color1, color2, noColor [Link] = left, right [Link] = IMG mainStyle_font = Verdana, sans-serif mainStyle_size = 12px mainStyle_color = #313031 mainStyleOverride_add.P = font-family : Verdana, sans-serif; font-size : 12px; mainStyleOverride_add.H1 = font-family : Verdana, sans-serif; font-size : 18px; mainStyleOverride_add.H2 = font-family : Verdana, sans-serif; font-size : 12px; [Link] = margin: 5px; hidePStyleItems = H3, H4, H5, H6, pre classesImage = middle, withoutmargin classesCharacter = red, middle, small, large, gray, left classesParagraph = left } [Link] { [Link] = Normal, without margin [Link] = margin: 0; [Link] = red [Link] = color: red; [Link] = middle [Link] = display: block; text-align: center; [Link] = small [Link] = font-size : 10px; [Link] = large [Link] = font-size : 14px; [Link] = gray [Link] = color: #636563; [Link] = alignleft [Link] = float:left; display: block; }

tre congur La s election des couleurs peut aussi e ee :


[Link] { entreprise { name = BT3-Rouge value = #BB0000 } variation { name = variation Burgundy value = #6F0311 } } [Link] = entreprise, variation

164

4.8 TScong options et interface

Figure 4.10: Couleurs personnalis ees dans le RTE

` celles que vous avez vous-m An de restreindre la s election de couleurs a eme d enies, vous pouvez d esactiver la palette par d efaut comme suit :
[Link]=1

Voici un exemple dobjet d eni par lutilisateur avec quelques caract` eres utiles qui ne se trouvent pas sur un clavier :
[Link] { 10 = Signes Juridiques 10 { 1 = R [Link] = Marque d epos ee [Link] = &reg; 2 = c [Link] = Copyright [Link] = &copy; 3 = [Link] = Paragraphe [Link] = &sect; } 20 = Devises 20 { 1 = [Link] = Yen [Link] = &yen; 2 = [Link] = GBP [Link] = &pound; 3 = [Link] = Cent [Link] = &cent; } 30 = Symboles math ematiques 30 { 1 = Puissance [Link] = exposant [Link] = wrap

165

4 TYPO3 pour les administrateurs


[Link] = <sup>|</sup> 2 = Indice [Link] = Indice [Link] = wrap [Link] = <sub>|</sub> 3 = Symbole degr e [Link] = symbole degr e [Link] = &deg; }
}

l Si vous navez pas activ e tous les e ements dans la barre de menu, noubliez pas de rendre l el ement suivant disponible :
[Link] = user

Lillustration suivante montre le r esultat :


Figure 4.11: Extensions personnalis ees via lobjet utilisateur du RTE

R ef erence

261237 297748

R ef erence

` la r Vous trouverez tous les d etails a ef erence ci-contre, ainsi que plusieurs autres exemples de conguration du RTE. tre ins ` laide Pour les d eveloppeurs, les param` etres des transformations peuvent aussi e er es a de TypoScript gr ace aux options de la cl e PROC. Alternatives ` Internet Explorer a ` partir de la version 5 a entra La restriction du RTE a n e beaucoup dutili` envisager dautres alternatives. Plusieurs essais diff sateurs a erents ont eu lieu simultan ement ` la perforan dint egrer htmlArea, un autre projet Open Source au sein de TYPO3. Suite a mance clairement sup erieure dun de ces prototypes, les autres essais sont devenus obsol` etes et marqu es comme tels dans le r epertoire dextensions du site TYPO3 dont ils doivent (esp erons t le) dispara tre bient ot. Lextension htmlArea d enitive a e e conc ue par Stanislas Rolland.

166

4.9 Cr eer des Workows simples

` ce sujet : [Link] suivante pr esente une documentation compl` ete a mentation/document-library/rtehtmlarea/.

4.8.5 Le module Web Info Conguration TS de la page


Maintenant que vos entr ees pages sont cach ees dans les formulaires den-t ete de certaines t ` quels endroits. pages, il nest pas si simple de retrouver quelles valeurs ont e e entr ees et a
Figure 4.12: Conguration TSCong valables pour une page prise au hasard dans larborescence

Le sous-module Info r esout ce probl` eme gr ace au mode Conguration TS de la page : il afche la conguration active de la page s electionn ee. Vous pouvez choisir dafcher toutes les entr ees TSCong ou seulement certaines sections.

4.9 Cr eer des Workows simples


Dans la vue appel ee niveau racine , qui safche dans le module Liste lorsque vous cliquez ` lic sur le nom correspondant a one en forme de globe terrestre tout en haut de votre arborescence de pages, vous pouvez cr eer des enregistrements de toute sorte. Si lextension workow est install ee, vous pouvez maintenant cr eer un nouveau workow dans la table Workows en bas de lafchage liste. Si cette extension ainsi que celles qui en d ependent ne sont pas encore install ees, passez dabord au gestionnaire dextensions. Le chapitre 6 donne linformation ` linstallation dextensions. n ecessaire a 167

4 TYPO3 pour les administrateurs

4.9.1 Conguration dun workow


La conguration dun workow implique la pr esence dune arborescence de pages et dau moins deux groupes dutilisateurs backend, avec leurs membres respectifs. Ce module, simpli e pour linstant, propose trois prols dacteurs : le gestionnaire de t aches, qui peut assigner des l t aches aux utilisateurs, lauteur, qui cr ee de nouveaux e ements de contenu, et le r edacteur, qui r evise ce contenu et le publie. Il y a ici diff erentes fac ons de publier : l Par d efaut, les nouvelles pages et les nouveaux e ements de contenu sont invisibles, et demeurent cach es jusqu` a ce quils soient publi es par le r edacteur. l s dans une partie priv De nouvelles pages et de nouveaux e ements de contenu sont cr ee ee du site puis, apr` es validation, le r edacteur les d eplace vers une partie du site pr ed enie dans le workow. Cette fac on de proc eder facilite la mise en pratique du principe de double r evision dans tre simul les proc edures de r edaction. Des workows plus complexes peuvent e es en combi` d nant deux workows, mais ces options laissent encore a esirer si on consid` ere que le r ole de TYPO3 est d etre au centre des proc edures dentreprise avec les retours dinformation que cela implique. t diteur et Cest pourquoi un projet a e e lanc e, impliquant lint egration de TYPO3 avec un e un moteur de workows respectant les standards WfMC. Lors quil sera introduit, toutes les options dafchage seront revues pour cr eer des workows plus sophistiqu es.

4.9.2 Exemple : workow dActualit es


tre en mesure dassigner des t Les utilisateurs du groupe Portail devraient e aches aux utilisateurs du groupe B2C , en appelant un workow pr ed eni dans le module Utilisateur Centre de t aches. An de pouvoir cr eer un workow, la page cible, le groupe dutilisateurs tre disponibles. cible ainsi que les extensions n ecessaires doivent e Pr eparation : pour notre exemple, cr eez une page Actualit es dans la page Contenus , et ajoutez-lui deux sous-pages. Nous nommerons En ligne la page sur laquelle les actua tre enregistr tre ensuite publi lit es doivent e ees pour e ees dans le portail et dans les sites, et es et e dit Brouillon la page sur laquelle elles sont cr ee ees en attendant leur publication via le workow. ` laide du module Web Acc` Ensuite, a es, accordez les droits suivants aux nouvelles pages : Actualit es : Administrateurs seulement En ligne : Administrateurs seulement dition du contenu Brouillon : Groupe Global , afchage de la page, e
Figure 4.13: Droits dacc` es pour les pages de cr eation dactualit es

168

4.9 Cr eer des Workows simples

Vous devez maintenant ajouter la page Brouillon comme point de montage (DB Mounts) diter la page. pour les groupes Portail et B2C an que les deux groupes puissent voir et e Si vous voulez que le groupe Portail soit en mesure d editer larticle apr` es sa publication, vous devez lui donner des droits dacc` es pour la page En ligne et lajouter en tant que DB Mount (point de montage).
Figure 4.14: Cr eation dun nouveau workow dans le niveau racine

Apr` es avoir install e les extensions n ecessaires, un nouvel enregistrement de type workow tre ajout peut e e dans le niveau racine du syst` eme (afchage liste du niveau sup erieur de larborescence cf. gure pr ec edente). Le workow comprend les sections suivantes : G en eral ` cocher pour activer/d Cette section comprend une case a esactiver le workow et le nom du workow, ainsi que le champ pour saisir le titre tel quil sera afch e pour les utilisateurs. La description saisie ici sera reprise dans la vue d etaill ee du workow.
Figure 4.15: Formulaire de cr eation du workow Actualit es

169

4 TYPO3 pour les administrateurs

Table

Le champ Table permet de d enir le format cible du workow. Dans sa conguration ` condition quune extension pour les actualit dorigine, a es soit install ee, les formats suivants sont disponibles : Nouvelles, Cat egorie de nouvelles, Page, Contenu de la page, Membre, Groupe de membre, Domaine, Langue alternative de la page et Note interne. Le champ Draft page ouvre le navigateur d el ements TYPO3, par lequel l dit vous pouvez s electionner la page dans laquelle les nouveaux e ements seront e es. S electionnez ici la page Brouillon . Les groupes sp eci es dans Groups allowed to assign workow ont la possibilit e de d emarrer le workow et de lassigner aux groupes repris dans le champ Target groups e dans la liste de t for workow. Une nouvelle entr ee est alors cr ee aches des utilisateurs du groupe auquel le workow est assign e. Review users liste les utilisateurs qui peuvent v erier et publier les r esultats. Il est important ici de s electionner des utilisateurs individuels. Vous choisissez ici si lactualit e est d eplac ee lors de sa publication (Move to page when ` non nalizing) par le Review user ou si lactualit e passe du statut cach e a cach e . ` des pages, dautres champs peuvent e tre remplis, en Si le workow fait r ef erence a cochant la case Set permissions when nalizing, an de sp ecier le propri etaire de lenregistrement ainsi que le groupe et les droits dacc` es pour le propri etaire, le groupe et tous les autres . Apr` es ce champ se trouve une option pour mettre le workow Actualit es en action, dans les T aches du module Utilisateur Centre de t aches. Il appara t alors comme ` faire dans le Centre de t une nouvelle t ache a aches de lutilisateur.

R oles

Misc

volue au fur et a ` mesure que le statut est modi Le workow e e. Dans ce processus, chaque tape est enregistr e ee dans le protocole de t aches et afch ee dans linterface des utilisateurs concern es. Chacun des utilisateurs peut donc faire des ajouts et enregistrer les t aches pour la tre faite que par un utilisateur qui en a publication. La publication en tant que telle ne peut e lautorisation. Par cons equent, dans notre exemple, lentr ee actualit es nest plus marqu ee en tant quobjet t t cach e, et a e e transf er ee vers la page En ligne . Apr` es que la t ache a e e remplie, lhistorique tapes ne demeure visible que pour lutilisateur qui a initi des e e cette t ache. t ` la section 3.4. Le workow a e e d ecrit en d etail du point de vue du r edacteur a

4.10 Proc edures et actions


Les actions sont moins connues, et repr esentent un concept qui est peu utilis e, mais disponible dans TYPO3 depuis la version 3.3.0. Cette approche met en uvre des proc edures pr ed enies, tre compl qui peuvent e et ees par vos propres actions. Les actions sont disponibles dans le module Utilisateur Centre de t aches (cf. gure suivante). 170

4.10 Proc edures et actions

Figure 4.16: Afchage des actions dans le module Utilisateur Centre de t aches

t Cette fonction a e e institu ee principalement an de permettre aux administrateurs de cr eer t es. des acc` es backend limit es. Cest pourquoi dautres types dactions standards ont e e cr ee

4.10.1 Types dactions


Les fonctions suivantes sont pr ed enies : Create Backend User Permet aux non-administrateurs de cr eer des comptes utilisateurs backend. Pour y par tre copi venir, on doit cr eer un utilisateur qui peut e e avec sa conguration ce quon appelle le gabarit utilisateur (Template user ). Cette fonction est tr` es importante dans des situations o` u on pr evoit un fort accroissement du nombre dutilisateurs backend sp ` cet effet ; ladministrateur e vite ainsi les dans un groupe utilisateur cr ee ecialement a erreurs et un travail fastidieux. SQL Query Permet de pr ed enir des requ etes SQL ; pour y parvenir, cr eez dabord une nouvelle ` un ou plusieurs groupes. La action dans le niveau racine. Nommez-la et assignez-la a e dans le module Outils d enition de la requ ete de base de donn ees est ensuite cr ee V erication BD dans le menu Full Search, avec loption Advanced Query. Apr` es une requ avoir cr ee ete, vous pouvez lassigner en cliquant sur le bouton Save, puis en s electionnant laction appropri ee (Save to Action) dans le menu de s election. Cette action est maintenant disponible pour tous les membres du groupe sp eci e. Rappelez` la table et a ` la page concern vous que les utilisateurs doivent avoir le droit dacc` es a ees.
Figure 4.17: SQL Query : exemple de requ ete pour afcher de linformation sur les utilisateurs frontend

171

4 TYPO3 pour les administrateurs

Record List ` s tre e dit Sert a electionner une liste denregistrements dans une page sp ecique pour e es tendu. Cette et afch es ; loption appara t ici comme dans lafchage liste en mode e option est tr` es utile pour permettre aux utilisateurs d editer directement des enregistrements, des produits, des actualit es, etc. apr` es s etre identi es.
Figure 4.18: Exemple dune action de type Record List

Edit Record Vous permet dafcher une liste denregistrements dispers es, quon peut ensuite appeler diter. Ainsi, un utilisateur n pour les e etant impliqu e que dans une tr` es petite quantit e denregistrements rarement modi es pourrait travailler efcacement sans utiliser le module Web.
Figure 4.19: Liste ` denregistrements a diter, appel e es par une action de type Edit Records

4.10.2 Exemple : action pour cr eer des utilisateurs


Ce type daction pr ed enie permet aux non-administrateurs de cr eer eux aussi des comptes quipes autonomes utilisateurs, fonction importante pour obtenir des d epartements et des e dans une grande soci et e qui, par exemple, soccuperait de production de contenu. 1. 2. tre install Tout dabord, lextension sys_action doit e ee via le gestionnaire dextensions. An de pouvoir d enir une action pour la cr eation automatique dutilisateurs, un en tre disponible en tant quutilisateur gabarit (Template registrement utilisateur doit e

172

4.10 Proc edures et actions

User ). Cet utilisateur est copi e par laction et rec oit des informations sp eciques telles quun nom dutilisateur, un mot de passe ainsi quun point de montage dans larborescence. Cr eez un utilisateur gabarit produits .

es dans le module Liste du niveau racine (les administrateurs peuvent Les actions sont cr ee ` -partir du centre de t aussi les appeler directement a aches). En cliquant sur Cr eer un nouvel enregistrement, le dialogue pour un nouvel enregistrement safche. S electionnez le type Action.
Figure 4.20: Cr eation dune nouvelle action dans le niveau racine

Dans le formulaire de cr eation, s electionnez loption Create Backend User et remplissez les autres champs (cf. gure suivante) :

Titre/Description Saisissez un titre et une description Assign Action to groups ` utiliser cette action via le centre de S electionnez les groupes qui seront autoris es a t aches. S electionnez ici le groupe Portail . User prex s Vous permet dentrer une expression qui pr ec edera le nom de tous les utilisateurs cr ee ` laide de cette action. Dans notre exemple, entrez pm pour product manager . a Ces utilisateurs sont ensuite regroup es dans la liste des utilisateurs backend et donc facilement reconnaissables. Template user ` cause de ses param` Choisissez lutilisateur du niveau racine qui, a etres de base (y compris les champs de type Allowed Exclude Fields), servira de gabarit et sera copi e. plus t ee ot. S electionnez lutilisateur gabarit produits cr 173

4 TYPO3 pour les administrateurs

Figure 4.21: Formulaire daction pour la cr eation dun gestionnaire produit

Groups which may be assigned through the action ` quel groupe ce nouvel utilisateur sera afli On peut aussi choisir a e dans la liste propos ee. Choisissez le groupe Global . Create User Home Directory Dans le champ All conguration de loutil dinstallation, vous pouvez entrer les deux valeurs suivantes :
$TYPO3_CONF_VARS["BE"]["userHomePath"] $TYPO3_CONF_VARS["BE"]["lockRootPath"]

On doit bien s ur avoir les droits d ecriture sur le r epertoire sp eci e. e lorsque vous lenregistrez. Les utilisateurs du groupe correspondant peuvent Laction est cr ee maintenant la trouver dans leur module Utilisateur Centre de t aches. En tant quadmi` partir de ce module pour v nistrateur, vous pouvez aussi appeler laction a erier les champs dentr ee visibles dune part et tester la fonction dautre part.
Figure 4.22: Formulaire de cr eation dutilisateur dans le module Utilisateur Centre de t aches

174

4.11 Administration des utilisateurs frontend

4.11 Administration des utilisateurs frontend


Les utilisateurs frontend ( FEUtilisateur ) sont des visiteurs dune page Internet qui obtiennent davantage de droits, en senregistrant ou en se faisant cr eer un compte par lad` des e l ministrateur, an dacc eder a ements de contenu prot eg es ou dutiliser des fonctions qui ne sont pas disponibles pour des utilisateurs non-enregistr es. tre repris dans des groupes qui se voient ensuite assigner Les utilisateurs frontend peuvent e l les dites permissions au niveau dune page, ou pour des e ements de contenu sp eciques. Le syst` eme dutilisation frontend fournit une base pour accorder les droits dacc` es et, si n ecessaire, les droits d edition aux visiteurs du site Web qui se sont identi es correctement. TYPO3 propose une s erie de plugins frontend an de rendre ce type d edition possible. Un livre dor ou une carte de vux virtuels sont des exemples simples dutilisation du frontend. La liste des ` jour dans le gestionnaire dextensions. Dans le backend, les extensions disponibles est tenue a s dans une page de type Dossier Systme. utilisateurs frontend et leur groupe sont cr ee

4.11.1 Cr eation de groupes dutilisateurs


Pour des besoins de clart e, les comptes utilisateurs et les groupes dutilisateurs sont enregistr es ` cet effet. S dans une section diff erente de larborescence. Cr eez une nouvelle page a electionnez le type de page Dossier Syst` eme et nommez-la FEUtilisateur . En s electionnant lextension Membres dans le menu Contient le plugin, vous assignez une ic one appropri ee au r epertoire.
Figure 4.23: Groupes et utilisateurs frontend

Retournez maintenant au module Page en cliquant sur Enregistrer et fermer le document. Vous pouvez ajouter un nouveau groupe dutilisateurs en cliquant sur Cr eer un nouveau contenu. Cr eez le groupe B2B et conrmez lenregistrement en cliquant sur Enregistrer et fermer le document. R ep etez le processus, cr eez un nouveau r epertoire dans la section de ` lint larborescence B2E et ensuite, a erieur de ce r epertoire, le groupe B2E . Vous pouvez maintenant voir tous les groupes et utilisateurs dans lafchage liste.

4.11.2 Cr eation de comptes utilisateurs


tape consiste a ` ajouter des utilisateurs individuels au groupe dutilisateurs. An La prochaine e de remplir les diff erentes t aches dans notre exemple, nous cr eerons un utilisateur entreepertoires respectifs. Compl etez un maxiprise 1 et employe 1 dans leurs groupes et r mum de champs lors de leur cr eation, an de d ecouvrir la validation automatique de certains types de champ, et de pouvoir par la suite tester linteraction avec dautres applications l telles que le syst` eme DMAIL avec ces e ements de contenu de la base de donn ees. 175

4 TYPO3 pour les administrateurs

4.11.3 Identication
Vous devez pr evoir quelque part dans votre site un endroit o` u les utilisateurs frontend pourront l sidentier. Ins erez un e ement de contenu de type Identiant dans une page. Compte tenu du fait que TYPO3 est capable de g erer plusieurs sites dans un m eme syst` eme, et que vous voudrez probablement garder les utilisateurs Internet des diff erents sites dans des sections s epar ees, ` quel enregistrement le formulaire didentication fait r le syst` eme doit savoir a ef erence. Cest pourquoi vous devez saisir lexpression suivante dans les constantes du gabarit de la page o` u se situe lidentiant :
[Link] = 50

` lUID du Dossier Syst` les utilisateurs 50 fait ici r ef erence a eme dans lequel vous avez cr ee et les groupes un peu plus t ot. Vous trouvez cet UID en cliquant sur lic one Info quon retrouve ` la derni` dans le module Liste. LUID de cet enregistrement appara t a ere ligne au bas de la fen etre dinformation.
Figure 4.24: Information dans le module Liste

Il est aussi possible (et plus rapide) dafcher lUID en d eplac ant votre curseur sur lic one du dossier dans larborescence.
Figure 4.25: Afchage de lUID en plac ant la souris sur licone

l 4.11.4 Assigner des pages et des e ements de contenu


` ce groupe, afcher le formulaire An dassigner du contenu dont vous voulez r eserver lacc` es a l den-t ete de la page d esir ee ou le formulaire d edition de nimporte quel e ement de contenu. Dans la derni` ere section du formulaire se trouve loption Acc` es. Vous pouvez s electionner un s pr des groupes dutilisateurs que vous avez cr ee ec edemment. Loption Cache a ` la connexion cache automatiquement le contenu de la page apr` es que lutilisateur sest identi e. Afcher a ` toutes les connexions afche le contenu lorsque lutilisateur sest identi e, peu importe tend la protection de lacc` ` son groupe dappartenance. Loption Inclure les sous-pages e es a ` la page, et lic toute la section de larborescence se rattachant a one de la page comporte alors deux petites ` eches. Exemple ` pr tapes suivantes de notre exemple : Nous ex ecutons a esent les deux e 176

4.12 Statistiques et logs

1. 2.

l Ins erez des e ements de contenu Identiant dans les pages Accueil B2B et Accueil B2E . Assignez les deux pages aux groupes dutilisateurs frontend correspondants et activez loption Inclure les sous-pages.
Figure 4.26: Assignation dun ` un enregistrement a groupe dutilisateurs frontend

3.

Ajoutez la ligne suivante dans la section Setup du gabarit des pages Accueil B2B et Accueil B2E :
[Link] = uid

tre remplac uid doit e e par les UID respectifs des pages FEUtilisateur dans lesquelles sont enregistr es les groupes dutilisateurs.

4.11.5 Perspectives
Des extensions ont r ecemment apport e plusieurs am eliorations au syst` eme des utilisateurs frontend. Il est d esormais possible et il sagit dun changement tr` es attendu dassigner l ` diff plusieurs pages et e ements de contenu a erents groupes dutilisateurs en m eme temps. Une extension correspondante du noyau de TYPO3 est aussi en cours de d eveloppement, ainsi que la possibilit e dafcher la hi erarchie des groupes dans la s election. Le syst` eme dutilisateurs frontend fournit principalement la base pour la personnalisation et l edition des fonctionnalit es de portail. Son d eveloppement se poursuit, pouss e par des attentes sans cesse grandissantes. Cest pourquoi il est recommand e, suivant les fonctionnalit es pr evues dans votre site, de v erier r eguli` erement quelles sont les nouvelles possibilit es offertes par les extensions.

4.12 Statistiques et logs


` une s Gr ace a erie de param` etres du syst` eme, TYPO3 peut afcher des statistiques dutilisation ` tous les niveaux : allant du travail des r du logiciel a edacteurs aux statistiques des visiteurs du site, en passant par le type de navigateur utilis e, jusqu` a supprimer linformation sur les enregistrements de donn ees dans TYPO3. ` propos des visiteurs telles que le nombre de visites par page, les Les notions des statistiques a tant g intervalles de temps entre les visites ou les donn ees syst` eme du visiteur e en eralement ` TYPO3. D` sufsamment famili` eres, nous nabordons ici que les donn ees propres a es que vous

R ef erence

471055

177

4 TYPO3 pour les administrateurs

tes confront ` lanalyse des performances de votre site Web, une s ` votre e ea erie doutils sont a disposition. Une liste de liens (vers des documents en anglais) propos es par le Centre for Information Quality Management sont disponibles (voir la r ef erence ci-contre).

4.12.1 Le module Web Info


Ce module comporte quelques options danalyse int eressantes : Arborescence (vue densemble) Trois options sont disponibles dans cette vue densemble : Param` etres de base, Cache et a ge, et Enregistrement (vue densemble). Tous les param` etres concernant les pages tre e dit de larborescence sy trouvent et peuvent e es directement. Localisation (vue densemble) La vue densemble de la localisation est relativement nouvelle et propose une fac on t simple et rapide de voir quelles pages ont e e r ecemment modi ees dans la langue par d efaut, et de v erier si leur traduction existe dans les autres langues. Log Afche la m eme information que le module Outils Fichier journal, mais seulement pour la partie de larborescence s electionn ee ; vous constaterez cette diff erence en lisant plus loin la description du module. ` la section 4.8, cette Conguration TS de la page Comme nous lavons d ej` a d ecrit a option afche les entr ees valides dans les champs TSCong de la page s electionn ee. Statistiques dafchage Dans un souci dexhaustivit e, nous devons mentionner ici que TYPO3 poss` ede dans le module Info une fonction rudimentaire qui afche les acc` es aux pages. Son d eveloppe t ment a e e frein e par larriv ee dun outil de statistiques externe, AWStats. Nous recommandons fortement lutilisation de ce dernier, qui demeure in egal e pour lanalyse des chiers log du serveur dans TYPO3.

4.12.2 Int egration dAWStats


Le module AWStats, d evelopp e par notre auteur Ren e Fritz, propose une analyse des statistiques dun site Web. tre install AWStats est une extension qui doit dabord e ee dans le syst` eme comme d ecrit dans crit le chapitre sur le gestionnaire dextensions. Puisque lextension int` egre le logiciel AWStats, e tre install en Perl, Perl doit e e sur le serveur. crire ses chiers log devant e tre anaDans le chier [Link], sp eciez o` u TYPO3 devra e ` cet effet le champ de lInstall Tool (dans le module Installation) lys es par AWStats. Utilisez a sous All Conguration : 178

4.12 Statistiques et logs

Figure 4.27: Sp ecication du chemin pour lenregistrement des chiers log an d etre

Vous pouvez sp ecier nimporte quel r epertoire, sans oublier que TYPO3 doit en avoir les droits crits en format Apache et peuvent aussi d ecriture. Les chiers log g en er es par TYPO3 sont e tre analys e es par dautres outils quAWStats. tre entr Le code TypoScript suivant doit maintenant e e dans le gabarit de base du site Internet, an dactiver la g en eration de chiers log :
[Link] = 1 config.stat_apache = 1 config.stat_apache_logfile = [Link]

analys es par AWStats

` nimporte quel endroit de larborescence avec Vous pouvez congurer un autre chier log a cong.stat_apache_logle, an de cr eer des statistiques ind ependantes pour des sections sp eciques. Il est logique de cr eer un chier log pour chaque site ou domaine au sein dune installation TYPO3. Lexpression :
config.stat_mysql = 0

permet de d esactiver loption de TYPO3 qui enregistre les donn ees log dans sa propre table tre cr dans le r de statistiques. Le chier [Link] doit maintenant e ee epertoire sp eci e. Si vous avez choisi le r epertoire leadmin/, comme nous le faisons dans lexemple, vous pouvez ` laide de la commande cr eer un chier correspondant dans le module Fichier Fichiers a Nouveau. Pour nir, vous devez ouvrir et congurer le module AWStats dans le backend. Apr` es avoir t cliqu e sur Editer la conguration vous verrez les chiers .txt et .log qui ont e e trouv es dans le r epertoire sp eci e. Entrez dans le champ correspondant les domaines auxquels ils doivent sappliquer. Si vous avez plusieurs domaines, s eparez-les par une virgule. Apr` es avoir enregistr e la conguration, vous devez cliquer sur le chier log pour afcher les statistiques. Ce module ne sactualise pas de lui-m eme : vous devez cliquer sur Mise a ` jour imm ediate an dobtenir les derni` eres statistiques. Apr` es avoir bien install e et congur e AWStats, ce dernier afchera une image claire de tous les param` etres importants danalyse du trac, tels que les impressions de pages et le nombre tre class de visiteurs diff erents, qui peuvent e es par domaine. La r ef erence ci-contre renvoie au site dAWStats o` u se trouve un glossaire des termes utilis es.
R ef erence

866808

4.12.3 Analyse des chiers journaux


Le module Fichier journal fournit une vaste gamme dinformations sur les op erations ef` fectu ees dans le backend. Avec les param` etres Users, Max, Time et Action, vous proc edez a 179

4 TYPO3 pour les administrateurs

diff erents types danalyse de la base de donn ees. Linformation la plus importante est fournie tre compl par lheure (Time) et le nom dutilisateur (Login), qui peuvent e et es par les op erations effectu ees par lutilisateur, si vous s electionnez All dans le menu Action. En plus du nom, de dit lheure, de ladresse IP et de lID de lenregistrement e e, vous pouvez aussi afcher lhisto` laide du lien His en caract` rique d edition a ere gras.
Figure 4.28: La fonction log par le module Web Info pour une section de larborescence

4.12.4 Logs frontend


Deux autres extensions sont disponibles, qui fournissent de linformation sur les visiteurs et les utilisateurs frontend du syst` eme : Le Visitor Tracking System de Carlos Chiari (cl e dextension : de_phpot) enregistre le chemin suivi par les visiteurs dans le site Web et afche soit le chemin suivi, soit des statistiques. Le Login User Tracking (cl e dextension : loginusertrack) de Kasper Sk arhj enregistre les donn ees relatives aux sessions des utilisateurs frontend. Vous trouverez de linformation sur ces deux extensions aux r ef erences mentionn ees ci-contre.

R ef erence

999758 779472

R ef erence

4.12.5 Le module V erication BD


La v erication de la base de donn ees effectue une analyse de coh erence, et peut devenir un outil important pour les syst` emes complexes supportant une lourde charge, en relevant les ` les r probl` emes et en les aidant a esoudre. Le module propose les fonctions suivantes : Record Statistics Cette option analyse toutes les entr ees dans les tables de la base de donn ees qui sont ` ladministrateur. Marked-deleted pages : la premi` utiles a ere section afche des donn ees de base sur le nombre de pages qui sont cach ees, qui ne le sont pas, ou qui sont supprim ees. Cette fonctionnalit e est particuli` erement utile parce que les pages supprim ees du backend ne sont pas effac ees de la base de donn ees ; le champ deleted de 180

4.12 Statistiques et logs

` la valeur 1 . Ainsi sil sav la table pages est simplement mis a erait n ecessaire en cas tre ramen ` 0 durgence de r ecup erer une page effac ee, cette valeur pourrait e ee a ` nouveau visible. via loutil de base de donn ees phpMyAdmin, an de rendre la page a Document Types afche la fr equence des diff erents types de page. La section Tables fournit de linformation sur le nombre dentr ees existantes, et afche le nom de la table du syst` eme dans la colonne du milieu. Total Page Tree Cette option est particuli` erement int eressante pour des installations de tr` es grandes ` ouvrir ou dimensions, an de visualiser larborescence dans son ensemble sans avoir a fermer plusieurs sections. Database Relations Cette section effectue une analyse de la base de donn ees selon des crit` eres sp eciques. Files with no references at all Le syst` eme effectue un balayage des chiers contenus dans le r epertoire Uploads dans lequel sont enregistr es tous les chiers charg es via le backend sur le serveur sans recevoir de destination sp ecique. Ces chiers sont ensuite analys es pour voir sils sont r ef erenc es par la base de donn ees. Si ce nest pas le cas, ces chiers tre effac peuvent, et devraient e es, puisquils ne sont plus utilis es et ne peuvent tre appel e es par les utilisateurs du backend. De plus, ils peuvent occuper un espace important sur le disque dur de grandes installations ; en effet, certains utilisateurs enregistrent des images de cette fac on sur le serveur. Files referenced from more than one record Les entr ees de la base de donn ees qui sont copi ees peuvent pr esenter plusieurs r ef erences vers un chier du r epertoire Uploads. Ces liens multiples sont analys es et afch es sous cette rubrique. Missing Files ` travers la base de donn Cette option recherche a ees des liens vers des chiers du r epertoire Uploads qui nexistent plus. Select Fields/Group Fields Cette fonction recherche, dans les enregistrements de la base de donn ees, des liens vers dautres enregistrements nexistant plus. Select elds et Group elds font ` diff r ef erence a erentes fac ons dafcher des affectations de ce genre dans TYPO3. ` partir dune s Select elds est utilis e pour des affectations a election provenant dune table dans la base de donn ees (ex. : groupes dans le formulaire de d enition ` dun utilisateur), et Group elds est utilis e pour des affectations qui se r ef` erent a du contenu provenant de diff erentes tables de la base de donn ees. Full Search ` passer par phpPermet deffectuer des recherches dans la base de donn ees sans avoir a MyAdmin. Raw Search in all elds En mode simple, vous pouvez effectuer des recherches dans toute la base de donn ees en entrant une expression et en la soumettant. Cette action nest pas 181

4 TYPO3 pour les administrateurs

recommand ee pour de tr` es grandes bases de donn ees ou des syst` emes travaillant sous de tr` es grandes charges. Advanced query tre modi Offre une s erie doptions int eressantes. Lafchage des r esultats peut e e ` laide des options suivantes : a tre e dit Select Records afche les r esultats en une liste pouvant e ee directement. Count results se contente dafcher le nombre doccurrences. Explain Query montre les param` etres plus avanc es de la requ ete. l CSV Export afche le r esultat en une liste dont les e ements sont s epar es par des virgules. Chaque ligne contient un enregistrement avec les valeurs afch ees entre guillemets. Ce format est particuli` erement utile si vous voulez traiter ces donn ees dans des tableurs, des programmes pour faire des statistiques, etc. Le r esultat appara t dans une fen etre au bas de la page, avec une option pour le t el echarger. XML Export afche le r esultat en format XML dans une fen etre, ici aussi avec une option pour le t el echarger. Make Query : apr` es avoir s electionn e la table de base de donn ees dans laquelle vous d esirez effectuer une recherche, vous pouvez sp ecier des champs qui seront ` la liste de champs devant e tre v ensuite ajout es a eri es. Vous pouvez sp ecier les ` clauses de condition de la recherche en dessous. Le nom de la table safche a ` droite. gauche, lop erateur au centre, et lexpression recherch ee a Les op erateurs possibles sont contains, starts with, ends with et equals. La case ` cocher a ` la droite du champ inverse les op a erateurs : does not contain, does not start with, does not end with, does not equal. Chaque ligne comporte les options Update, Remove condition et Add condition. Chaque nouvelle ligne offre aussi la possibilit e de changer lordre ou de modier les conditions. La ` eche vers la droite pour lindentation vous permet de d enir des conditions avec les op erateurs and/or . Sous les lignes pour la d enition des requ etes se trouvent trois fonctions pour grouper le r esultat. Group by permet dagr eger le r esultat en fonction dun champ de la table, Order by afche les lignes du r esultat class es selon un champ, et descending afche le r esultat en ordre d ecroissant. Limit permet de d eterminer le nombre maximum de lignes dans le r esultat. Find Filename Offre une option simple pour effectuer des recherches par nom dans tous les chiers du point de montage et de la source TYPO3.
R ef erence

592203

On peut effectuer une recherche avec des expressions r eguli` eres; la r ef erence ci-contre en donne une courte pr esentation, ainsi que des liens vers dautres ressources.

182

4.13 TYPO3 et le syst` eme de cache

Figure 4.29: R esultat de la recherche de chiers

4.13 TYPO3 et le syst` eme de cache


` partir En tant que CMS sappuyant sur une base de donn ees, TYPO3 g en` ere des pages HTML a de plusieurs sources diff erentes. Depuis des gabarits HTML, via TypoScript en provenance de la base de donn ees, ou de contenu de page provenant dapplications diff erentes. Les pages sont assembl ees lorsquelles sont appel ees et transf er ees vers le navigateur du visiteur. Parce que les fonctions des scripts PHP ainsi que les requ etes n ecessaires repr esentent une lourde t charge pour le serveur Web, TYPO3 enregistre le r esultat des pages qui ont e e assembl ees pour la premi` ere fois dans une m emoire tampon, quon appelle le cache. Ce cache diminue consid erablement la charge sur la base de donn ees et sur le serveur, surtout pour de grands ` un trac tr` lev sites Web, soumis a es e e. 183

4 TYPO3 pour les administrateurs

` jour. Plusieurs fonctions Lors de modications, le cache de la page en question nest plus a ` ladministrateur an deffacer ce cache manuellement. sont donc fournies a En dessous de la liste des modules, vous trouvez deux fonctions globales pour effacer, dune part le cache des pages, dautre part le cache des chiers de conguration. Le module Web Page propose plus doptions dans le bas de la vue d etaill ee. Le cache dune tre vid page peut y e e manuellement, ainsi que celui dun nombre d etermin e de sous-pages. Le mode Cache et a ge de laperc u Arborescence (vue densemble) dans le module Web Info sert doutil de contr ole. Vous pouvez y v erier non seulement les caches actuels des pages, mais vous pouvez aussi modier la dur ee de leur validit e en cliquant sur lic one crayon dans le haut de la colonne Cache.
Figure 4.30: R eglages du cache dune page via le module Web Info

4.14 Digital Asset Management


4.14.1 T aches et buts du DAM
Le Digital Asset Management System (DAM) est la r eponse de la communaut e TYPO3 au besoin de g erer les images, documents et autres chiers (ce quon appelle les ressources)8 et leurs m eta-donn ees an denrichir le site Web. Dans ce contexte, un syst` eme de gestion de ressources digitales est un sous-syst` eme nayant pas de fonction directement visible dans ` enregistrer, indexer et g le site Web ; il sert a erer les chiers. Toutefois, il fournit aussi une interface simple pour les extensions qui utilisent cette information pour ex ecuter certaines fonctions dans le backend ou le frontend. Une autre innovation importante est quil r esout un point faible de TYPO3, souvent critiqu e: ` partir d comment manipuler les chiers lorsquils sont r ef erenc es a el ements de contenu ? tre publi TYPO3 copie les chiers devant e es dans une partie s epar ee de larborescence de chiers du syst` eme an demp echer lutilisateur dacc eder aux originaux. Si un utilisateur efface ` partir du backend, la fonction de contenu afchant ces chiers deun chier du syst` eme a meure inchang ee, et est prot eg ee contre des erreurs de la part de lutilisateur. Dans plusieurs tre souhaitable davoir un acc` cas toutefois, il peut e es direct an, par exemple, de remplacer un chier qui est utilis e en plusieurs endroits du site. Mais la fonction de protection emp eche ce type daction.
8 NdT.

: appel es assets en anglais

184

4.14 Digital Asset Management

Le DAM propose une fac on de congurer au cas par cas la manipulation de chiers, an que tre copi vous puissiez sp ecier par chier, par groupe ou par cat egorie si le chier doit e e vers tre utilis ` partir un des r epertoires temporaires ou sil doit rester l` a o` u il est et e e directement a de sa source. Un exemple simple dapplication du DAM serait une galerie reprenant des images, ind epen t damment de lendroit o` u elles ont e e enregistr ees, mais sur base des m eta-donn ees telles e a ` cet effet, ou un mot-cl quune cat egorie sp eciale cr ee e, ou encore un type de chier. On pourrait aussi lutiliser pour lanalyse statistique de lutilisation dimages provenant dune ` la carte, et fournir une interface qui en indiquerait les r r eserve de mat eriel a esultats dans le backend.

4.14.2 Int egration dans TYPO3


Dans le backend, le DAM prend la forme dun nouveau module principal et est aussi int egr e dans larborescence des pages. Lic one DAM ouvre toujours une vue de toutes les cat egories ainsi quune liste des types de chiers. Le sous-module Media List montre tous les chiers sous forme de liste. En pratique les modules Media List et Media File devraient remplacer le module standard Fichier Fichiers. En fonction de la conguration, le module DAM ` lint est soit afch e avec toutes ces vues dans le backend r edacteur, soit se limite a egration DAM dans le navigateur d el ements TYPO3. Dans ce cas, la gestion des donn ees image est ` ladministrateur. r eserv ee a
Figure 4.31: Le navigateur d el ements TYPO3 lorsque le DAM est install e

185

4 TYPO3 pour les administrateurs

Le module Media List La liste vous permet de travailler avec et sur les m eta-donn ees de chiers d ej` a contenus dans le DAM, et ses fonctions sont compatibles avec le module standard Fichier Liste. Les r edacteurs peuvent lutiliser pour modier des m eta-donn ees, faire des s elections et les enregistrer. Un syst` eme simple dindexation permet d editer massivement les m eta-donn ees de ressources d ej` a existantes.
Figure 4.32: Arborescence symbolique du DAM avec trois sections physiques : la structure physique du r epertoire, les cat egories et les types de m edias

Comme on peut le voir dans la gure pr ec edente, il existe trois arborescences diff erentes dans laire de navigation. La premi` ere reprend les chiers du point de montage, la seconde montre ` partir du la hi erarchie des cat egories de contenu. La derni` ere est automatiquement g en er ee a syst` eme dindexation. Les objets multim edias y sont list es et regroup es par type de chier. En cliquant sur le nom dune section de larborescence, une liste des m edias index es pour ce diter les r epertoire, cat egorie ou type de chier safche dans la vue d etaill ee. Vous pouvez y e ` lobjet en question. donn ees des objets m edias en cliquant sur lic one crayon adjacent a Hormis lafchage liste, il existe trois autres modes proposant leurs propres fonctions apr` es que vous avez s electionn e un r epertoire, une cat egorie ou un type de m edia : Vignettes Les images, sil y en a, sont afch ees sous forme de vignettes. 186

4.14 Digital Asset Management

S election On peut y modier la s election, par exemple en retirant certains chiers de la s election. De plus, il est possible denregistrer la s election et de l echanger entre r edacteurs. Process On peut y traiter les chiers en modiant ou en ajoutant des m eta-donn ees.
Figure 4.33: Afchage liste dans le DAM

Le module Indexing Le module Indexing sert dinterface dimportation an de fournir de la m eta-information aux nouveaux chiers et de les ajouter au syst` eme. Le module DAM cr ee un objet m edia pour chaque chier ins er e dans la base de donn ees, qui contient la m eta-information correspondante. Pendant lindexation, le module, en fonction du type de chier, lit automatiquement diff erentes informations par d efaut contenues dans la base de donn ees (ex. : dimensions de limage, taille du chier, etc.). La routine dindexation est pr evue pour permettre lajout de ce ventuellement lire de la m ` partir quon appelle des services, qui pourraient e eta-information a de chiers PDF ou Ofce par exemple. tapes suivantes : Lindexation de m eta-donn ees requiert les e 1. T el echargez les chiers vers un sous-r epertoire de leadmin via le module Fichier Liste (ou via FTP). tre index 2. Importez via Media Indexing en s electionnant le r epertoire qui doit e e dans larborescence leadmin. 3. Suivez les instructions de lassistant dindexation, comme le montrent les illustrations suivantes :

187

4 TYPO3 pour les administrateurs

Figure 4.34: Etape 1 : s electionnez le r epertoire dont vous voulez ins erer le contenu dans le DAM

Figure 4.35: Etape 2 : s electionnez des options de la liste

188

4.14 Digital Asset Management

Figure 4.36: Etape 3 : entrez linformation que vous voulez assigner aux chiers en vue dun traitement en masse

Figure 4.37: Etape 4 : r esum e de vos entr ees ; elles tre peuvent e enregistr ees en tant que mod` eles pour dautres indexations

189

4 TYPO3 pour les administrateurs

Figure 4.38: Etape 5 : afchage des chiers trait es

Cat egories DAM Le module DAM cr ee une page sp ecique dans larborescence de pages qui sert de r epertoire o` u il place ses propres enregistrements (objets m edias et cat egories). Les cat egories peuvent tre cr es, e dit e ee ees et effac ees via le module Web Liste. Tous les objets m edias DAM se dit retrouvent aussi dans ce r epertoire, mais sont e es de fac on plus efcace dans le module Media List.

4.14.3 Perspectives
Le DAM comble un manque en ce qui concerne la manipulation dinformations et de ressources bas ees sur des chiers plut ot que sur des enregistrements de la base de donn ees, et deviendra ` lam un outil important, parall` element a elioration de la gestion et de la s ecurit e, surtout l` a o` u de tr` es grandes quantit es de donn ees ainsi que de linformation de tr` es haute importance sont impliqu ees. Le DAM introduit plusieurs innovations dans TYPO3 nayant pas de lien direct avec sa fonction principale. Lintroduction des services, ainsi que de nouvelles possibilit es dafchage dans le backend en constituent des exemples typiques. En termes de fonctions, le DAM constitue la base pour le d eveloppement dextensions proposant des fonctions de gestion de documents. En particulier, une passerelle entre le DAM et Ope` plusieurs d nOfce pour lafchage et l edition de documents pourrait mener a eveloppements augmentant lutilisation de TYPO3 pour la gestion de contenu en entreprise. Le DAM a aussi 190

4.15 Administration : lavenir

augment e les chances dintroduire une manipulation uniforme des m eta-donn ees pour les l chiers (ressources (Assets)) et pour les e ements de contenu dans TYPO3. Cette fonction est particuli` erement n ecessaire pour r epondre aux exigences du Semantic Web.9

4.15 Administration : lavenir


` ladministration telle On peut d ej` a pr evoir que TYPO3 apportera plusieurs d eveloppements a quelle est d ecrite au d ebut du chapitre (en plus de la gamme de fonctions d ej` a existantes). tape importante Larriv ee dun syst` eme complet de gestion des versions dans TYPO3 est une e ` moyen que nous gardons en r eserve. Le module de workows sera am elior e sur cette base. A terme, il deviendra important davoir un projet workow denvergure, dont le but sera de ` long terme, le syst` sinterfacer avec des moteurs de workow externes. A eme dadministration des utilisateurs et dautorisation des droits dacc` es sera fortement inuenc e par les exigences dun portail dentreprise, dans la mesure o` u des travailleurs-cl es peuvent sengager dans ce tre apport d eveloppement, et o` u une contribution peut e ee par des sponsors. ` ladministration ont beaucoup dinuence sur le futur Cest pourquoi les aspects relatifs a du noyau de TYPO3 ; ils repr esentent un tournant majeur qui transformera un WCMS en un syst` eme de gestion de contenu professionnel plus large et fondamentalement plus fonctionnel.
R ef erence

323622

9 [Link]

191

TYPO3 pour les d eveloppeurs

5
du d 5.1 Le role eveloppeur
5.1.1 Le processus de mise en uvre
1 [Link]

TypoScript

. M eme si une plate-forme de communication bas ee sur TYPO3 demande beaucoup de temps et tapes dimpl defforts, ce sont les e ementation qui, au nal, concr etisent lobjectif initial. Il est rare que ce processus ne connaisse quune solution. En effet, d evelopper des interfaces et des ` la cr galement aux erreurs. fonctionnalit es pour des utilisateurs laisse place a eativit e, mais e ` un planning La programmation nest pas soumise uniquement aux lois du syst` eme ; gr ace a ` long terme, elle doit aussi servir de point de d ` la maintenance, a ` lextension et a ` la a epart a correction du code.

I think developers already know but are a little afraid to admit that writing software is a creative activity that requires a lot of interaction with the people who are going to use it. Richard Gabriel1

Chapitre
195

5 TypoScript

troitement li ` Deux points faibles e es au r ole du programmeur conduisent fr equemment a l echec du d eveloppement dune application : t Si le but de lapplication na pas e e clairement expliqu e aux personnes impliqu ees dans le projet, les descriptions de t aches seront ax ees sur les aspects techniques du logiciel. Aussi sophistiqu ees que soient les solutions, le succ` es dune application d epend habituellement t de questions simples : est-ce que les objectifs ont e e clairement d enis puis mis en pra t tique ? Le logiciel a-t-il e e test e par des utilisateurs naux pour v erier sa simplicit e et son ergonomie ? Finalement, toute application vit du contenu que les r edacteurs ajoutent ` rapidement et quils ou elles g` erent. En dautres mots : est-ce que le d eveloppeur a pens ea lutilisateur ? M eme la t ache de mise en uvre est fr equemment sous-estim ee. Lorsque les exigences sur ` un sous-traitant qui ferait limpl ementation augmentent, il faut envisager de faire appel a gagner du temps et donc de largent, sur base de son savoir-faire en la mati` ere. En r esum e: seule une personne connaissant bien les conditions et les possibilit es du syst` eme conc oit des solutions p erennes qui, apr` es quelles ont mu eveloppements ri, peuvent servir de base aux d ult erieurs. tre Ceci ne signie pas que les outils pour cr eer de nouvelles applications TYPO3 ne peuvent e appris par nimporte qui apr` es tout, cest pr ecis ement le but de ce livre.

5.1.2 Pr erequis et vue densemble


laborer des applications complexes avec TYPO3, une connaissance approfondie Si vous voulez e ` lemploi avec lesquels de TypoScript est un pr erequis. TYPO3 fournit diff erents gabarits pr ets a m eme un d ebutant peut cr eer rapidement un site Web. Ces gabarits sont facilement install es tre modi ` laide dassistants. Mais et leur apparence (couleurs, espacement et logos) peut e ee a si vous d esirez faire des modications ou impl ementer certaines fonctionnalit es en r eponse aux exigences du projet, vous devez conna tre TypoScript. Ce chapitre traite des principes de base du langage de conguration interne de TYPO3, TypoScript, et de son fonctionnement. Une certaine connaissance de lHTML et du fonctionnement du World Wide Web est bien s ur n ecessaire. Une connaissance approfondie de PHP et de lAPI de TYPO3 est, elle, requise uniquement si vous avez besoin de fonctionnalit es qui d epassent le cadre de base et des nombreuses extensions disponibles gratuitement. Cet aspect est discut e en d etail au chapitre 7. Cette section du livre, TYPO3 pour les d eveloppeurs couvre les sujets suivants. ` TypoScript. Les enregistrements de gabarit et la possibilit La section 5.2 est une introduction a e de les mettre en cascade sont discut es, la syntaxe est expliqu ee, les principes de fonctionnement et dembo tement dobjets sont illustr es. Les objets TypoScript, les fonctions, les types de donn ees et le concept denveloppe (wrap) sont ` la section 5.3. trait es plus en profondeur a ` la section 5.4. De nombreux outils de d eveloppement et daide sont introduits a Dans son installation de base, TYPO3 contient d ej` a une s erie de gabarits standards. La section 5.5 vous en donne une vue densemble et d ecrit leur champ dapplication. 196

5.2 TypoScript Principes de base

` 5.9 soccupent de mettre en place une maquette de base. Plusieurs concepts Les sections 5.6 a ` titre illustratif dans un sc ` de gabarits sont compar es et impl ement es a enario. Une alternative a ` laide de type/typeNum lutilisation classique des gabarits ainsi que le changement de gabarit a sont aussi pass es en revue. Le concept de navigation en TYPO3 implique diff erents types de menus bas es sur du texte, des images, des couches, une image cliquable ou des menus de s election. Leur conguration est ` la section 5.10 a ` laide dexemples sp expliqu ee a eciques. ` certaines fonctions importantes telles que La section 5.11 sint eresse plus particuli` erement a stdWrap, optionSplit et le GIFBUILDER qui jouent un r ole central dans TypoScript. En utilisant les propri et es et les conditions de stdWrap, vous pouvez ins erer des structures de contr ole dans TypoScript. Le GIFBUILDER offre un large choix en termes de manipulation dimages. Les sections 5.12 et 5.13 traitent de la conception dun site avec des cadres et permettent dentrevoir le futur avec des sujets tels que XHTML, laccessibilit e et TemplaVoil` a.

5.2 TypoScript Principes de base


5.2.1 Quest-ce que TypoScript ?
Un syst` eme de gestion de contenu doit pouvoir g en erer diff erents types de contenu et, gr ace au principe de s eparation entre le contenu et la forme, le mettre sous la forme voulue par chaque application. Une proc edure largement utilis ee est dins erer des balises sp eciales (<tagname>) dans un gabarit HTML statique pour contr oler le r esultat. De cette mani` ere, le contenu sp ecique, les fonctions, les listes ou les vues d etaill ees sont int egr es ou transform es vers le gabarit qui sera afch e. Avec lintroduction de TypoScript (TS), TYPO3 fait un pas suppl ementaire puisque avec TypoScript vous pouvez cr eer le gabarit HTML dynamique vous-m eme, permettant un contr ole du format de sortie et de la disposition nettement plus avanc e que cela nest possible avec des gabarits HTML statiques. tre Avec linformation d enie dans TypoScript, le contenu dynamique peut non seulement e ins er e dans un gabarit, mais il est en plus possible dinuencer lapparence (frontend ) dans les moindres d etails. La maquette graphique de base est g en er ee compl` etement avec TypoScript ` partir dun chier HTML. Pour naviguer, vous utilisez un menu compos ou est d enie a e de textes, dimages, de combinaisons dimages, danimation Flash ou dune simple liste d eroulante. Les menus sont g en er es dynamiquement et leur apparence est contr ol ee individuellement. ` la vol ` partir de textes et dimages ou d Vous pouvez cr eer a ee les graphiques a eterminer une fois pour toute leur disposition et leur contenu. De plus, TypoScript contr ole les options du backend an de les personnaliser en fonction des utilisateurs ou des groupes dutilisateurs. Comme nous lavions mentionn e au chapitre 4.1, vous sp eciez par exemple quelles sont les fonctions d edition dont dispose le r edacteur dans le Rich Text Editor. TypoScript joue le r ole de m ediateur entre linformation et les fonctions qui sont d evelopp ees en PHP dans le c ur de TYPO3, ou qui sont ajout ees par les extensions. De ce fait, TypoScript tre vu comme une couche interm peut e ediaire de transmission dinformation aux fonctions du syst` eme. 197
R ef erence

387605

5 TypoScript

viter tout malentendu, nous allons pr Pour e eciser ce que TypoScript nest pas avant de d enir ce quil est. La section 5.2.3 contient plus de d etails techniques sur le sujet. TypoScript nest ni un langage de programmation ni un langage de scripting, et nest donc pas ` Java, PHP ou JavaScript. Par exemple, il nest pas possible dutiliser de boucles comparable a (for, while,. . .). TypoScript sert en fait de vecteur dinformation . Vous ne devez pas apprendre un langage nouveau, et surtout pas un nouveau langage sp ecique. TypoScript lui` nimporte quel moment. m eme nest pas ex ecut ea
Figure 5.1: Diagramme hi erarchique des objets et de leurs valeurs structur ees par l editeur de registre Windows

Si TypoScript nest pas un langage de script, alors quest-ce ? Une description que vous devriez ` lesprit lorsque vous testez les limites de TypoScript est la suivante : garder a TypoScript poss` ede une syntaxe permettant de d enir de linformation de mani` ere hi erarchique ` laide de texte ASCII. De cette fac dans une structure arborescente simplement a on, des pa` TypoScript, qui agit alors en tant quinterface. ram` etres sont pass es vers le syst` eme gr ace a Seuls les objets et les propri et es non d enis dans le syst` eme ninuencent pas le fonctionne` votre version de ment du frontend et du backend. La documentation (TSref) correspondant a ` votre disposition. TYPO3 d ecrit lensemble des objets et des propri et es a
Figure 5.2: TypoScript Object Browser afche la structure des objets et des valeurs

198

5.2 TypoScript Principes de base

Les utilisateurs du syst` eme dexploitation Windows se sont peut- etre d ej` a familiaris es avec lorganisation hi erarchique des donn ees dans le Registry, qui structure logiquement des valeurs ` laide dobjets. a De mani` ere similaire, les objets congur es par TypoScript sont organis es en une structure arborescente. Loutil de gabarit TypoScript Object Browser (le module Web Gabarit) repr esente cette hi erarchie via une interface utilisateur graphique.

5.2.2 TSref
` pr Nous voudrions a esent vous rappeler bri` evement ce quest la r ef erence TSref de TypoScript ; il sagit dune sorte de bible pour ceux qui travaillent quotidiennement avec TypoScript, puisque vous y trouvez des descriptions pr ecises de tous les objets, propri et es et fonctions disponibles. ` port Ayez toujours la r ef erence a ee de main lorsque vous travaillez avec TypoScript ! TSref est disponible en ligne sur [Link] et est disponible en format OpenOfce ou PDF. Si vous ne poss edez pas encore TSref, le moment est venu de le t el echarger !
R ef erence

342678

5.2.3 Digression : TypoScript et PHP


An dacqu erir une meilleure compr ehension des aspects techniques, la section suivante traite ` la section 5.2.4 si vous le pr de la relation entre TypoScript et PHP. Passez directement a ef erez. M eme si, en th eorie, vous pouvez cr eer une sortie sous nimporte quelle forme en utilisant ` TYPO3 est utilis PHP, le TypoScript Frontend Engine (TSFE) propre a e par d efaut lorsquun site Web est appel e via le chier [Link] (tslib/index_ts.php). Il analyse linformation dans lenregistrement de gabarit de larborescence des pages du site Web2 . PHP traite ici les objets et les valeurs des enregistrements de gabarit qui sont structur es par linterm ediaire de TypoScript. ` laide Linformation est plac ee par le syst` eme dans un tableau PHP multidimensionnel a de t3lib_TSparser (t3lib/class.t3lib_tsparser.php). Ce tableau est disponible dans certaines applications et fonctions de TYPO3. Si de linformation qui nest pas utilis ee par les fonctions des classes TYPO3 est plac ee dans le tableau PHP, elle se comporte comme une variable inutilis ee d eclar ee en PHP : elle est ` la sortie. ignor ee et ninduit pas derreurs a Un exemple permet de clarier cette notion : dans le code TypoScript abstrait suivant, linformation analys ee par PHP est plac ee dans un tableau multidimensionnel.
monObjet.propriete1 = valeur_x monObjet.propriete2 = valeur_y monObjet.propriete2.propriete3 = valeur_z

, comme suit : En PHP, le tableau serait directement cr ee


$TS[monObjet.][propriete1] = valeur_x; $TS[monObjet.][propriete2] = valeur_y; $TS[monObjet.][propriete2.][propriete3] = valeur_z;
2 Le

processus d etaill e de restitution du frontend est d ecrit aux sections 5.7 et 7.5

199

5 TypoScript

ou alternativement :
$TS = array( monObjet. => array( propriete1 => valeur_x, propriete2 => valeur_y, propriete2. => array ( propriete3 => valeur_z ) ) )

` TYPO3 peut aussi afcher un tableau avec le r La fonction debug() propre a esultat suivant :
Figure 5.3: Afchage par la fonction TYPO3 debug() de la syntaxe Typo3

diter TypoScript, appel TYPO3 fournit un outil pour afcher et e e TypoScript Object Browser. Il afche le code dexemple de la mani` ere suivante :
Figure 5.4: Afchage du code TS par le TypoScript Object Browser

Exemple : HRULER
R ef erence

762761

Les effets combin es de TypoScript et de PHP sont illustr es par lobjet de contenu (cObject) HRULER qui trace une ligne horizontale. Consid erons le gabarit TypoScript suivant :
page = PAGE [Link] = 0 page.20 = HRULER page.20 { lineThickness = 10 lineColor = #e6e6e6 spaceLeft = 100 spaceRight = 100 }

200

5.2 TypoScript Principes de base

` la troisi` A eme ligne, un objet TypoScript du type HRULER est d eni ; des param` etres de conguration sont ajout es dans les lignes suivantes. Les valeurs TypoScript des propri et es lineThickness, lineColor, spaceLeft et spaceRight sont plac ees par PHP dans un tableau. La fonction PHP HRULER (tslib/class.tslib_content.php) est alors disponible pour le traitement. Voici la fonction PHP3 :
function HRULER ($conf) { $lineThickness = t3lib_div::intInRange($this->stdWrap($conf[lineThickne ss],$conf[lineThickness.]),1,50); $lineColor = $conf[lineColor] ? $conf[lineColor] : black; $spaceBefore = intval($conf[spaceLeft]); $spaceAfter = intval($conf[spaceRight]); $content = ; $content.= <table border="0" cellspacing="0" cellpadding="0" width="99% "><tr>; if ($spaceBefore) { $content.=<td width="1"><img src= .$GLOBALS[TSFE]->absRefPrefix. [Link]" width= .$spaceBefore." height="1" alt="" /></td>; } $content.= <td bgcolor= .$lineColor."><img src= .$GLOBALS[TSFE]->a [Link]" width="1" height= .$lineThickness." alt="" />< /td>; if ($spaceAfter) { $content.=<td width="1"><img src= .$GLOBALS[TSFE]->absRefPrefix. [Link]" width= .$spaceAfter." height="1" alt="" /></td>; } $content.= </tr></table>; $content = $this->stdWrap($content, $conf[stdWrap.]); return $content; }

paisseur de 10 pixels et de couleur #e6e6e6. De part Ceci produit une ligne horizontale dune e et dautre de la ligne, un espace dune largeur de 100 pixels est ins er e. galement ses limites. TyCet exemple illustre clairement les possibilit es de TypoScript, mais e poScript offre aux d eveloppeurs une interface s ure pour congurer des fonctionnalit es exis vitant les erreurs de manipulation de PHP et garantissant du code HTML correct a ` la tantes, e sortie. En m eme temps, la fonction pr ec edente montre que le d eveloppeur na pas demprise sur le fait quune table (au sens HTML) est utilis ee lors de lafchage de HRULER, car cette caract eristique ne fait pas partie de la param etrisation de cet objet. ` tout objet TypoScript : sa param ` Ce paradigme sapplique en principe a etrisation sexplique a ` des fonctions PHP. partir des param` etres qui sont pass es comme arguments a

5.2.4 Gabarits TypoScript


Les gabarits TypoScript d eterminent la mani` ere dont le TypoScript Frontend Engine restitue
contr ol ees via CSS dans les navigateurs plus anciens.
3 Pour afcher une ligne horizontale, TYPO3 utilise une table, parce que les balises <HR> ne sont pas sufsamment

R ef erence

917652

201

5 TypoScript

le contenu, cest-` a-dire quils d eterminent quel contenu est lu dans la base de donn ees, estce quun gabarit HTML est utilis e, o` u le contenu est ins er e, etc. En outre, la transformation avant sa mise en forme dans le frontend est contr ol ee par un gabarit TypoScript. En g en eral, cela signie que le gabarit d ecide quelles familles de fontes, quelles tailles de fontes, quelles couleurs et quels espacements sont utilis es dans le site Web.
Figure 5.5: Une vue densemble du processus de restitution du frontend

Les gabarits TypoScript contr olent les aspects suivants dans le processus de restitution du contenu : Le cache Le chier journal (log)/les statistiques Les d etails de len-t ete HTML Les types de page (par exemple pour limpression) Lagencement graphique de base (layout) l Les e ements de contenu (apparence et fonction) La cr eation de liens Lint egration dextensions et de scripts PHP TYPO3 fournit des gabarits pr ed enis en fonction du domaine abord e, de sorte que les d eveloppeurs ne doivent pas sp ecier pour chaque site Web toutes les d enitions requises pour l edition du contenu comme la cr eation de liens, par exemple. ` Avant dexpliquer ces concepts, voici quelques exercices utilisant TypoScript, pour vous aider a vous familiariser avec ses bases. 202

5.2 TypoScript Principes de base

5.2.5 Hello World ! Le premier gabarit TypoScript


Pour que TYPO3 puisse restituer le contenu, un gabarit TypoScript est n ecessaire. Sil manque, le message derreur No template found ! safche lorsque la page est appel ee dans le frontend.
Figure 5.6: Gabarit TypoScript manquant

Les gabarits TypoScript sont enregistr es dans larborescence des pages. Il y a deux types de gabarits : les gabarits racines (root templates) et les gabarits dextension (extension tem` la racine plate). Alors que les gabarits racines ont la case Rootlevel activ ee et se situent a dun site Web, les gabarits dextension se trouvent partout dans larborescence des pages et tendent ou modient les gabarits racines. Les enregistrements de gabarit peuvent donc e tre e mis en cascade via larborescence des pages, ce qui signie que TypoScript peut fusionner ou remplacer des gabarits. Il y a deux mani` eres de cr eer un nouveau gabarit : en cliquant sur lic one dune page dans larborescence des pages, vous cr eez un enregistrement du type Gabarit via loption Nouveau ` la page s du menu contextuel. Lenregistrement est imm ediatement assign ea electionn ee et il tre e dit peut e e comme les autres enregistrements. La seconde mani` ere est dutiliser le module Gabarit Info/Modify. Choisissez la page que vous voulez comme page racine dun site Web (par exemple Accueil ) dans larborescence ` la page, on vous lindiquera et vous pourrez des pages. Si aucun gabarit nest encore assign ea en cr eer un en lins erant dans le champ du formulaire Create new website avec le bouton Create template for a new site. En option, vous pouvez int egrer un gabarit Standard template pour lutilisation du site Web via le menu de s election. Nous en reparlerons plus tard.
Figure 5.7: Un nouveau gabarit TypoScript avec le module Gabarit Info/Modify

votre premier gabarit racine avec Create template for a new En supposant que vous ayez cr ee un enregistrement de gabarit avec comme titre NEW SITE . Six lignes site, TYPO3 aura cr ee de code TypoScript sont d ej` a contenues dans le champ Setup. Cette conguration TypoScript d enit la sortie dans le frontend de la page contenant le texte HELLO WORLD ! . 203

5 TypoScript

Figure 5.8: Gabarit afch e dans le module Gabarit Info/Modify

Il est possible d editer lenregistrement complet via le lien en bas de page ou douvrir une s election des champs les plus importants avec les ic ones correspondantes. Le champ Setup contient les d etails suivants :
# Default PAGE object: page = PAGE [Link] = 0 page.10 = TEXT [Link] = HELLO WORLD!

ditez des champs individuellement, le cache de lenregistrement est supprim Si vous e e lorsque vous sauvegardez, et les derni` eres modications sont prises en compte lors de la restitution ditez tout lenregistrement, la mise a ` jour se fait par le bouton Clear de la page. Si vous e all cache au bas de laire du module Gabarit, ou dans le frontend via lAdmin Panel. Si les d etails ne safchent pas imm ediatement lorsque vous d eveloppez un site, cela ne veut pas n ecessairement dire quil y a des erreurs de donn ees. Dans ces cas-l` a, effacez dabord le contenu du cache. Si lenregistrement de gabarit est ouvert via le bouton Click here to edit whole template record, vous aurez une vue densemble de toute linformation contenue dans chaque champ t ` laction Create du formulaire. Notez que Rootlevel a e e introduit dans le gabarit suite a template for a new site et sert de point de d epart du site Web. De plus, les d etails de Clear t Constants et Clear Setup qui ont e e plac es jusqu` a pr esent dans larborescence des pages et dans les gabarits TypoScript sont ignor es. Ces trois param` etres permettent de d enir de ` partir de nimporte quel endroit de larborescence des pages. nouveaux sites Web a
Figure 5.9: Vue partielle de lenregistrement de gabarit

204

5.2 TypoScript Principes de base

Si la page est appel ee dans le frontend, vous verrez le r esultat suivant :


Figure 5.10: Afchage dans le frontend

` Pour mettre en forme le texte, ajoutez une ligne contenant les balises <strong> </strong> a la conguration TypoScript, comme ci-dessous :
# Default PAGE object: page = PAGE [Link] = 0 page.10 = TEXT [Link] = HELLO WORLD! [Link] = <strong>|</strong>

La sortie du frontend montre d esormais HELLO WORLD ! en gras :


Figure 5.11: La sortie du frontend avec la conguration modi ee

` ce petit exemple. Mais illustrons Les possibilit es de TypoScript ne se limitent bien s ur pas a dabord les fonctionnalit es des gabarits.

5.2.6 Cascade de gabarits


Dans lexemple suivant, nous cr eons un second gabarit, mon contenu , qui vient sajouter au gabarit NEW SITE . Pour ce faire, utilisez par exemple loption Create an extension template du module Gabarit Info/Modify. ` cocher Rootlevel, Clear Constants et Clear Setup ne Dans un gabarit dextension, les cases a tre plac sont pas actives par d efaut. Un tel gabarit peut e e o` u vous le d esirez dans larbores` certaines arborescences de cence des pages. Cela permet dune part dassocier du TypoScript a pages sp eciques, puisque le gabarit sactive automatiquement sur la page et ses sous-pages. Dautre part, vous pouvez placer les gabarits dans un Dossier Syst` eme pour les garder comme ` dautres enregistrements de gabarits. De cette mani` biblioth` eque et pour les int egrer a ere, les gabarits sont mieux structur es, les fonctionnalit es pr ecises restent s epar ees et disponibles en tant que composants ; de plus, le code est r eutilisable. Dans les deux cas, vous embo tez des enregistrements de gabarit. Cette proc edure sappelle aussi la mise en cascade. Lint egration du gabarit mon contenu au gabarit NEW SITE se fait via le champ Include basis template de lenregistrement de gabarit. Vous devez ouvrir lenregistrement de gabarit 205

5 TypoScript

complet NEW SITE pour l editer. Pour s electionner et int egrer le gabarit mon contenu , utilisez le navigateur d el ements.
Figure 5.12: Int egration dun gabarit de base dans NEW SITE

Le contr ole de la hi erarchie des gabarits se fait dans le Template Analyzer. Si vous s electionnez le gabarit principal, ses d ependances seront montr ees dans une structure arborescente. Lordre, ` lordre dans lequel les gabarits sont trait de haut en bas, correspond a es par le TypoScript Frontend Engine.
Figure 5.13: Le Template Analyzer du module Web Gabarit

Par exemple, lobjet [Link] est d eni dans le gabarit mon contenu .
[Link] = TEXT [Link] = exemple de texte

tre r ` la Cet objet est donc disponible dans le gabarit NEW SITE et peut y e eutilis e, gr ace a cascade de gabarits.
page.20 < [Link]

5.2.7 Enregistrements de gabarits


R ef erence

917198

Comme nous lavons illustr e dans la section pr ec edente, un enregistrement de gabarit est ` la restitution du contenu dans le frontend. Un gabarit donn absolument essentiel a e peut contenir linformation suivante : Template title Dans le champ Template title, le nom du gabarit est celui qui est afch e dans la vue densemble du backend. Choisissez le nom que vous d esirez. Toutefois, le nom devrait rendre compte des fonctions d enies dans le gabarit puisque plusieurs gaba` cocher Deactivated, Start et Stop, rits diff erents sont souvent utilis es. Les cases a permettent de d esactiver le gabarit de mani` ere soit permanente, soit pour une dur ee d etermin ee, comme pour dautres types denregistrements de TYPO3. Website title Sp eciez le titre du site Web dans le champ Website title. Dans la conguration par d efaut, il sins` ere dans len-t ete HTML du frontend, avant le titre de la page, et dans la barre de titre de la fen etre de votre navigateur :

206

5.2 TypoScript Principes de base


<title>B2C: Produit</title> <title>[Titre du site web]: [Titre de la page]</title>

Constants Entrez dans le champ Constants les valeurs qui remplacent les constantes auxquelles le code ins er e dans le champ Setup fait r ef erence. Les constantes repr esentent des tre faciles a ` changer pour valeurs d enies pour lensemble du site Web qui devraient e modier en une fois des param` etres tels que la taille des fontes, les fontes, les couleurs de larri` ere-plan, . . .Ne les confondez pas avec les variables telles quelles sont d enies dans les langages de programmation. Les constantes sont remplac ees par leurs valeurs dans lordre dans lequel elles sont entr ees, et peuvent donc se remplacer lune lautre. Setup Ce champ contient le code de conguration TypoScript, qui d enit lapparence et le comportement de lapplication. Les constantes (valeurs globales ou propri et es variables) apparaissant dans ce champ sont remplac ees par les valeurs correspondantes d enies dans le champ Constants.

Ressources Ce champ contient des ressources c.-` a-d. des images, des masques, des fontes Truetype, des feuilles de style, de lHTML et des documents texte. Pour faire une r ef erence ` ce champ avec TypoScript, utilisez le type de donn a ees resource. Lorsque vous copiez galement copi un gabarit, les ressources du champ Resources sont e ees et num erot ees s equentiellement. Par exemple, [Link] devient logo_01.gif. Il est donc judicieux de ` laide du symbole (logo*.gif). faire r ef erence aux ressources a Clear et Rootlevel ` cocher Clear Constants, Clear Setup et Rootlevel forment un groupe Les cases a fonctionnel qui intervient dans le contexte des gabarits en cascade. Rootlevel Rootlevel d enit lendroit dans la structure de la page qui est pris comme point de d epart (racine) dune nouvelle application (un site Web). Toutes les sous-pages (pages-enfants) dans larborescence des pages h eritent des propri et es de chaque ` certaines pages, leur code Typogabarit. Si de nouveaux gabarits sont associ es a ` un niveau sup Script est fusionn e au code des gabarits des pages d enies a erieur ` un niveau plus bas (pages-parents). De cette mani` ere, vous pouvez surcharger a t des valeurs qui ont e e d enies dans les gabarits-parents. ` toutes les congurations dune appliLe gabarit racine sert de point de d epart a cation en TypoScript jusqu` a ce quun gabarit d enisse un nouveau Rootlevel. Un gabarit racine est indiqu e avec une ` eche bleue sur son ic one. Clear Constants et Clear Setup ` ces cases a ` cocher, arr Vous pouvez, gr ace a eter la mise en cascade des constants ou du setup de larborescence des pages. Un gabarit d eni de cette fac on nh erite ` des pages dun daucune propri et e constants ou setup des gabarits associ es a niveau sup erieur.

207

5 TypoScript

Include static Une s erie de gabarits standards (static templates) est fournie par TYPO3 dans sa conguration de base. Ceux-ci comprennent non seulement toute la conguration Typo l Script pour repr esenter des e ements de contenu, mais aussi, des maquettes graphiques ` lemploi. Les diff de mise en page pr etes a erents types de gabarits standards sont intro` la section 5.5. duits a
Figure 5.14: Choix de gabarits standards

Si vous avez inclus plusieurs gabarits standards, vous d eterminez lordre de traitement ` double ` ` laide de lic en cliquant sur lic one a eche. Vous les supprimez a one corbeille . ` cocher Include static AFTER basedOn inverse lordre de traitement des gaLa case a barits de base (voir plus loin : Include basis template) et des gabarits standards par le TypoScript Engine. Dans la conguration par d efaut, les gabarits de base sont trait es apr` es les gabarits standards. Cest le comportement classique puisque, de cette mani` ere, crasez des valeurs dans les gabarits standards par vos propres valeurs. vous e Dans lexemple, un gabarit de base et le gabarit standard content (default) sont int egr es au gabarit racine. Les congurations TypoScript qui contiennent des extensions (default TypoScript from Extensions) se comportent comme des gabarits standards. Le Template Analyzer indique lordre dans lequel les gabarits sont trait es, de haut en bas, et leur structure.
Figure 5.15: Template Analyzer montre leffet de Include static AFTER basedOn

208

5.2 TypoScript Principes de base

Include static (from extensions) Les extensions contiennent aussi parfois des gabarits standards. Ces derniers sont int egr es dans la zone Include static (from extensions) du formulaire. Les congurations de TypoScript contenant lextension de ext_typoscript_*.txt (default TypoScript from Extensions) sont automatiquement charg ees pendant linstallation. General Ofce Displayer et CSS Styled Content sont des exemples dextensions qui contiennent des gabarits standards.
Figure 5.16: Int egration des gabarits standards dune extension en un clic de souris

Include basis template Les gabarits de base repr esentent les biblioth` eques personnelles gr ace auxquelles le d eveloppeur organise son code TypoScript de mani` ere modulaire. Les gabarits de base permettent de g erer TypoScript de mani` ere plus claire et permettent aussi dencapsuler le code selon les fonctionnalit es utilis ees dans de futurs projets. Ils repr esentent leur propre enregistrement de gabarits pour lesquels les options Clear Constants, Clear t ` Setup et Rootlevel nont pas e e s electionn ees. Des gabarits de base peuvent inclure a leur tour leurs propres gabarits de base, formant ainsi une structure en cascade. Leurs ic ones contiennent le signe plus vert. Dans lexemple ci-dessous, un gabarit nomm e Basis Template est int egr e au gabarit Root Template.
Figure 5.17: Int egration dun gabarit de base

Static template les from T3 Extensions ` des extensions (Default TypoScript Lorsque le Typoscript contient du code associ ea ` from extensions), lordre dint egration est aussi important. Combin e avec la case a cocher Include static AFTER basedOn, le champ de s election Static template les from T3 extensions offre de nombreuses possibilit es de mise en cascade des gabarits. Default (Include before if Root-ag is set) Cette option a pour effet dins erer les gabarits standards dextension avant le gabarit racine. Cela est utile pour remplacer les valeurs des gabarits dextension par le gabarit racine. La diff erence entre cette conguration et la suivante est que les gabarits dextension sont uniquement int egr es avant si Rootlevel est activ e. Always include before this template record Lorsque vous optez pour ce choix, les gabarits standards de lextension sont trait es 209

5 TypoScript

juste avant les gabarits correspondants. Notez que cest la seule mani` ere de modier le gabarit des extensions. Never include before this template record Cette option emp eche les gabarits standards de lextension d etre lus directement avant le gabarit consid er e. Ceci signie que bien que le gabarit de lextension soit tre modi actif, il ne peut e e par une autre conguration TypoScript. Dans lexemple qui suit, un gabarit de base (basic st Green) est int egr e au gabarit racine (main template). Un gabarit standard (template; GREEN) est ensuite lui-m eme int egr e au gabarit de base. Lextension News (tt_news) , qui comprend son propre code tre standard TypoScript, est install ee. Lordre judicieux dans lequel les gabarits devraient e lus est le suivant : dabord les gabarits standards, ensuite le gabarit pour les extensions, puisque ce dernier peut remplacer des valeurs des gabarits standards, suivi du gabarit de base pour remplacer certaines valeurs de ses pr ed ecesseurs, et enn le gabarit racine. Dans le premier cas, le r eglage de base Default (Include before if Root-ag is set) est laiss e tel quel pour le gabarit racine et pour le gabarit de base qui y est int egr e. Le code TypoScript de lextension tt_news est lu apr` es basic st Green et avant main template.
Figure 5.18: Static template les from T3 Extensions Exemple 1

Si le r eglage Always include before this template record est activ e et que le r eglage par d efaut est conserv e pour le gabarit racine, le code TypoScript de lextension tt_news est lu deux fois ce qui na pas beaucoup de sens.
Figure 5.19: Static template les from T3 Extensions Exemple 2

Dans le dernier exemple pr esent e ci-dessus, le r eglage Never include before this template record pour le gabarit racine emp eche le code TypoScript des extensions d etre lu juste avant main template. Dautre part, le gabarit de base force la lecture de ces donn ees du TypoScript des extensions juste avant basic st Green. 210

5.2 TypoScript Principes de base

Figure 5.20: Static template les from T3 Extensions Exemple 3

Template on next level Ce champ de s election fournit un moyen simple dint egrer un gabarit valide pour toutes les pages du niveau suivant. Ainsi, vous ne devez pas assigner un enregistrement de ` chaque page du niveau suivant. Des changements de mise en forme pour des gabarit a parties de larborescence sont donc rapidement ins er es. Description ` vous D ecrire un gabarit et ses fonctionnalit es vous aide (vous ou une tierce personne) a retrouver par la suite dans le projet. Backend Editor Conguration ` l Ce champ permet de faire passer des styles pr ed enis a editeur CSS. Cette option nest que rarement utilis ee et sa maintenance nest plus assur ee.
R ef erence

626488

5.2.8 Constants et Setup


Les deux champs les plus importants dun enregistrement de gabarit sont les champs Setup et Constants. Setup contient la conguration TypoScript, cest-` a-dire le code TypoScript contr olant lapparence et le param etrage du site Web. Ce code est trait e lors du processus de restitution du contenu. De son c ot e, le champ Constants fait passer dans le champ Setup des constantes, c.-` a-d. des valeurs facilement manipulables ou des valeurs globales. De cette fac on, vous avez une vue densemble lorsque vous modiez des valeurs pour des pages en particulier. Par exemple, vous ` partir dun point pouvez changer la valeur dune couleur utilis ee dans diff erents gabarits a central, au lieu de devoir la rechercher dans tous les gabarits utilis es. ` la syntaxe TypoScript normale : dans le champ Setup, les constantes La notation correspond a sont entour ees de {$ et }. Dans lexemple suivant, Hello TYPOS ! ! safche dans le frontend. Constants :
[Link] = Hello TYPOS!!

Setup :
page = PAGE page { typeNum = 0 10 = TEXT

211

5 TypoScript
[Link] = {$[Link]}
}

` celle appel Sil ny a pas de constante d enie dans le champ Constants correspondant a ee dans Setup, alors $[Link] safche dans le frontend. La hi erarchie des objets des donn ees reprises dans les champs Setup et Constants est repr esent ee clairement dans le TypoScript Object Browser (module Web Gabarit). Pour ce faire, s electionnez dans larborescence des pages celle dont vous voulez afcher le contenu du champ Setup et s electionnez le mode avec Browse : Constants ou Setup.
Figure 5.21: Afchage des constantes dans lObject Browser

Faire passer du contenu par des constantes nest bien entendu pas tr` es sens e pour les pages dynamiques. Il est plus int eressant dutiliser les constantes pour des valeurs telles que les formats et les couleurs de texte, les propri et es des images, etc., cest-` a-dire pour des valeurs qui tre faciles a ` modier. sont utilis ees de mani` ere r ep et ee dans les applications et qui devraient e

ements et concepts 5.2.9 El


a ` laide du module Gabarit Info/Modify contient les lignes de Le gabarit NEW SITE cr ee code suivantes qui afchent dans le frontend une page HTML avec le texte HELLO WORLD ! :
# Default PAGE object: page = PAGE [Link] = 0 page.10 = TEXT [Link] = HELLO WORLD!

Les d etails sont traduits de mani` ere g en erique par :


# Commentaire monObjet = TYPE_OBJET [Link] = valeur_1 [Link] = TYPE_OBJET [Link] = valeur_2

Pour vous pr esenter les diff erentes notions, les termes et leur appellation sont repris dans un exemple avant d etre d enis plus en d etail.
# Default PAGE object:

La premi` ere ligne est un commentaire et est donc ignor ee par TYPO3. Dans la ligne suivante, page est d eni par lop erateur = comme un objet de type PAGE. 212

5.2 TypoScript Principes de base


page = PAGE

tre choisi librement. Toutefois, par convention, certains noms Le nom page peut, en principe, e ` des objets de base pr ` contenu sont r eserv es a ecis. Alors que page est utilis e pour les pages a normal, le nom plugin est r eserv e aux plugins (extensions).
[Link] = 0

` ces propri Un objet a des propri et es, et des valeurs sont assign ees a et es. typeNum est une ` laquelle est assign propri et e du type dobjet PAGE a ee ici la valeur 0. La s equence de caract` eres [Link] d enit le chemin de la propri et e. Les lignes suivantes d enissent page.10 comme un objet de type TEXT. En TypoScript, des listes num eriques (tableaux ) sont souvent utilis ees. Dans ce cas-ci, la liste num erique est une ` son tour propri et e du type dobjet PAGE. Pour les objets de type PAGE, cette liste peut a contenir dautres objets. Ici, 10 est d eni comme un objet de type TEXT. page.10 est le chemin ` cet objet. menant a
page.10 = TEXT

` lesprit que de telles listes ne peuvent pas toujours faire r ` dautres obGardez a ef erence a jets ; cela d epend du type de donn ees auquel appartient la liste. Vous trouverez dans TSref, la ` ce r ef erence TypoScript, et dans les extensions correspondantes de linformation pertinente a sujet.
[Link] = HELLO WORLD!

La propri et e value de lobjet page.10 prend la valeur HELLO WORLD!. Dans la suite, nous reprenons en d etail les concepts : Types dobjets TYPO3 vous fournit toute une s erie de types dobjets pr ed enis que vous pouvez utiliser dans vos gabarits TypoScript, par exemple les types PAGE, TEXT et IMAGE. La plupart ` la restitution du contenu dans le frontend ; ils sont appel des types dobjets servent a es ` des ns de cObjects ou objets de contenu. Les autres types dobjets sont utilis es a conguration g en erale. Objets t Lobjet page a e e d eni comme un objet de type PAGE. Puisque page est au sommet de la hi erarchie, on lappelle aussi un objet racine (toplevel object). Ces objets peuvent porter presque nimporte quel nom. Les noms r eserv es tels que lib, cong, constants, styles ou temp sont document es dans TSref (voir la r ef erence ci-contre). tre appel ` Lobjet page pourrait aussi e e monday, mais utiliser un nom descriptif aide a clarier le code. Si vous voulez d enir une page contenant des cadres (frame), le nom frameset serait par exemple un bon choix. Propri et es Un type dobjet, et par cons equent un objet de ce type, a des propri et es d enies pr ecis ement et d ecrites dans le document TSref. Seules ces propri et es sont prises en compte par les objets. D` es lors, la ligne suivante na de toute fac on aucun effet, puisque lobjet PAGE na pas de propri et e appel ee value.

R ef erence

110843

R ef erence

839954

213

5 TypoScript
[Link] = Hello World!

e puisque TypoScript nest jamais ex Aucune erreur nest toutefois cr ee ecut e. Les propri et es dun objet ont elles-m emes un type de donn ees sp ecique. Par exemple, [Link] est du type int, ce qui signie que les seules valeurs valides sont des nombres entiers. Les types et leurs param` etres valides se trouvent dans TSref. Op erateurs Les op erateurs sont introduits un peu plus tard. Par exemple, un de ceux-ci est lop erateur dassignation = . Chemin et chemin dobjet On fait r ef erence aux objets et aux propri et es par leur chemin. Le chemin est constitu e des objets et propri et es d ej` a d enis, s epar es par un point. ` lobjet correspondant ; page.10 est le chemin dobjet menant a ` la propri [Link] est le chemin menant a et e value de cet objet.

5.2.10 La syntaxe
` lexpression suivante : Pour simplier, la notation se r esume a
[Chemin dobjet].[Propri et e] [Op erateur ] [Valeur ]

` TypoScript : Les r` egles syntaxiques suivantes sappliquent a Les objets et les propri et es sont s epar es par un point qui traduit en m eme temps la d ependance hi erarchique. ` la casse. TypoScript est sensible a Les constantes ont la forme {$nom} et sont remplac ees par une valeur avant que le contenu du champ Setup de TypoScript soit trait e. Pour les noms dobjets et leurs propri et es, seuls les caract` eres A-Z, a-z, 0-9 ainsi que les caract` eres - et sont utilis es. ` lobjet Le texte compris entre le d ebut de la ligne et lop erateur forme le chemin menant a ` la propri ou a et e. Il ne peut pas contenir despace. Lordre de traitement des propri et es dobjets est d eni par lobjet lui-m eme ; il nest donc pas d eni par lordre des lignes du setup TypoScript. Les listes num eriques (page.10, page.20) sont trait ees par ordre croissant.

214

5.2 TypoScript Principes de base

Constantes Les r` egles syntaxiques du setup sappliquent aussi aux constantes, avec les restrictions suivantes : Les constantes ne sont pas des objets et nont donc pas de propri et es ; d` es lors, aucune fonction du type stdWrap ou if nest disponible. Elles sont n eanmoins organis ees hi erarchiquement. Lop erateur de r ef erencement =< nest pas disponible. Pour les valeurs s etendant sur plusieurs lignes, vous ne pouvez utiliser lop erateur (), comme dans le setup.

Valeurs Pour les valeurs, les r` egles suivantes sont dapplication : Elles ne sont pas entour ees de guillemets. ` la n de la ligne. Elles d ebutent apr` es lop erateur et se terminent a tre group ` laide de lop Si elles s etendent sur plusieurs lignes, elles peuvent e ees a erateur (). Les espaces pr ec edant et suivant les valeurs sont supprim es lorsque celles-ci sont assign ees.

Commentaires et blocs de commentaires ` un document TypoScript. Si vous n Vous pouvez ajouter des commentaires a etes pas trop ` vos familiaris e avec les techniques de programmation, nous vous recommandons dinclure a projets sufsamment de commentaires pour pouvoir vous retrouver facilement dans votre code, m eme apr` es un long intervalle de temps. l Les commentaires dune ligne sont marqu es dun / ou dun # et pr ec` edent les e ements de contenu.
# Default PAGE object: / un autre commentaire

Les blocs de commentaires de plusieurs lignes commencent par /* et se terminent par */, plac e au d ebut de la derni` ere ligne de commentaire. Le signe terminant un commentaire est important puisque sans lui, le code suivant le commentaire sera trait e lui aussi comme un commentaire.
/* Ins erez ici un commentaire s etendant sur plusieurs lignes. */

215

5 TypoScript

Op erateurs {} `e crire du TypoScript plus clairement et de mani` Les op erateurs { } vous aident a ere plus compacte en vous permettant dembo ter plusieurs propri et es. Lexemple suivant produit exactement le m eme r esultat que le pr ec edent.
page = PAGE page { typeNum = 0 10 = TEXT 10 { value = HELLO WORLD! } }

Cet embo tement commence par une accolade ({). Tous les autres d etails suivant cet op erateur sur la m eme ligne sont ignor es lors de lanalyse syntaxique. La premi` ere ` la ligne suivante. Lespacement en d propri et e subordonn ee se trouve a ebut de ligne am eliore la lisibilit e. Lembo tement de propri et es se termine par lop erateur } qui doit tre le premier caract` e ere de la ligne, espaces vides non compris. () Les parenth` eses ( ) renferment des valeurs qui peuvent prendre plusieurs lignes de code. Ceci peut sav erer utile si vous reprenez du texte qui est d ej` a structur e ou si vous voulez indiquer des valeurs plus clairement, par souci de lisibilit e. t Lexemple a e e l eg` erement modi e ci-dessous an dillustrer cet usage. Lobjet 10 y est par exemple dans un d eni comme un objet de contenu HTML. Du code HTML, cr ee diteur HTML, est assign ` la propri e ea et e [Link].
page { typeNum = 0 10 = HTML [Link] ( <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="25%" align="left" bgcolor="#003366"> <span style="color:#FFFFFF">Petit exemple:</span></td> <td width="75%" align="center" bgcolor="#84A1E5"> <span style="color:#FFFFFF">Insertion dune valeur sur plusieurs lignes</span></td> </tr> </table> ) }

Est alors afch e dans le frontend :


Figure 5.22: Lop erateur ( )

216

5.2 TypoScript Principes de base

gal, =, sert a ` lassignation. Pour d ` un type dobjet. Le signe e enir un objet, on lassigne a ` une propri Une valeur est assign ee a et e. Toute la cha ne de caract` eres suivant lop erateur (et sur la m eme ligne de code que lui) est trait ee comme une valeur. Les espaces vides pr ec edant et suivant lop erateur sont supprim es.
[Link] = HELLO WORLD! # est identique a ` [Link]=HELLO WORLD!

< (Copier) ` lop Gr ace a erateur <, vous pouvez copier un chemin dans un autre. Des propri et es et tre copi des objets entiers peuvent e es. Lorsque vous utilisez cet op erateur, les propri et es et les valeurs de lobjet sont copi ees. Les objets, valeurs et propri et es qui existent d ej` a dans le chemin dans lequel vous les copiez sont remplac es. ` lexemple HELLO WORLD ! . Lobjet Nous assignons ci-apr` es deux nouveaux objets a ` la ligne est page.15 est d eni comme un objet de contenu HTML, et un saut a ` lint ` la valeur de sortie. Lobjet page.10 est copi assign ea e dans page.20. A erieur des accolades, vous acc edez aussi au chemin dobjet en utilisant la syntaxe 20 < .10.
page = PAGE page { typeNum = 0 10 = TEXT [Link] = HELLO World 15 = HTML [Link] = <br /> 20 < page.10 # ou alternativement : # 20 < .10 }

Puisque le m eme objet TEXT se retrouve dans page.10 et page.20, le texte est afch e deux fois :
Figure 5.23: Copie dun chemin dobjet par lop erateur <

Les objets et leur hi erarchie sont illustr es et contr ol es graphiquement dans le TypoScript Object Browser (Web Gabarit TypoScript Object Browser [nom du gabarit]). 217

5 TypoScript

Figure 5.24: TypoScript Object Browser : les propri et es de lobjet 10 sont copi ees dans lobjet 20

=< (R ef erencement) Conjointement avec lop erateur =, < ne copie pas le chemin dobjet mais y fait r ef erence. Le r ef erencement est possible uniquement avec les objets, pas avec les propri et es. Notez ` part, il est impossible de combiner deux op que ce cas-ci mis a erateurs en TypoScript. Lexemple suivant illustre les diff erences de fonctionnement de la copie et du r ef erencement :
# Lobjet objetXY objetXY = TEXT objetXY { value = Hello TYPOS?? [Link] = red } page = PAGE page { typeNum = 0 # Lobjet 10 fait r ef erence a ` lobjet objetXY. 10 = < objetXY [Link] = Hello TYPOS!! (r ef erence) 15 = HTML [Link] = <br /> # Lobjet objetXY est copi e. 20 < objetXY [Link] = Hello TYPOS!! (copie) } # Une propri et e de lobjet objectXY est chang ee plus tard [Link] = blue

Dans le frontend, le texte de la copie est indiqu e en rouge tandis que celui de la r ef erence est indiqu e en bleu (mais puisque lillustration est en noir et blanc ci-dessous, vous devez nous croire sur parole. . .) : 218

5.2 TypoScript Principes de base

Figure 5.25: Comparaison entre r ef erencement et copie

Avec lop erateur =<, lobjet page.10 pointe vers lobjet objetXY pr ec edemment d eni. ` Puisque lobjet page.10 est une r ef erence, le contenu de lobjet objetXY est repris a chaque fois que le TypoScript rencontre lobjet page.10 dans son traitement. De cette tre utilis ` diff mani` ere, lobjet peut e e plusieurs fois et a erents endroits de larborescence tant toujours a ` jour puisque les changements dans lobjet r des objets, tout en e ef erenc e sont pris en compte dans toutes les r ef erences. Dans le TypoScript Object Browser, vous pouvez v erier comment le setup TypoScript a t e e assembl e. Le texte Hello Typos ! ! (r ef erence) sera imprim e en bleu dans le fron t tend puisque la propri et e [Link] de lobjet objetXY a e e remplac ee. Il tre remplac est int eressant de remarquer que les propri et es de la r ef erence peuvent e ees localement, ici en modiant [Link]. La copie dans le chemin dobjet page.20 ne tient pas compte du changement dans la couleur du texte. En effet, les propri et es et valeurs de lobjet objetXY sont copi ees lorsque le code TypoScript correspondant est lu, t ce qui se produit avant que la couleur du texte ait e e chang ee en bleu. Cest pourquoi le texte Hello TYPOS ! ! (copie) appara t en rouge.

Figure 5.26: TypoScript Object Browser : lobjet 10 ` lobjet fait r ef erence a objetXY

>

Lop erateur > efface les objets et propri et es qui se trouvaient jusque-l` a dans le chemin donn e. Dans lexemple suivant, lobjet page.20 est supprim e.
page = PAGE page { typeNum = 0 10 = TEXT

219

5 TypoScript
[Link] = HELLO World 15 = HTML [Link] = <br /> 20 = TEXT [Link] = Hello TYPOS!! 20 >
}

Par cons equent, seule la premi` ere ligne de texte est afch ee.
Figure 5.27: Hello TYPOS ! ! est supprim e

Conditions
R ef erence

270225

Les conditions dans TypoScript s ecrivent sur une seule ligne, sont entour ees par des crochets tre plac ` lint ` laide ([ ]) et ne peuvent e ees a erieur dun embo tement de propri et es (r ealis ea tre v daccolades, { }). Pour que le code qui suit la condition soit lu, la condition doit e eri ee. ` certains navigateurs ou groupes Ceci permet par exemple de restreindre les instructions a dutilisateurs sp eciques. Si lanalyseur syntaxique remarque que la condition est v eri ee, il continue dinterpr eter le code TypoScript. Sinon, il ignorera le code jusquau marqueur de n de condition. ` la section 5.11. Nous nous int Nous traitons les conditions en d etail a eressons ici uniquement ` la syntaxe. Dans lexemple suivant, la condition [browser = netscape] signie que lobjet a page.10 est d eni uniquement si le navigateur du visiteur du site est reconnu par TYPO3 tant un navigateur de type Netscape. La commande [END] (ou encore : [GLOBAL]) comme e indique la n de la condition.
page = PAGE [Link] = 0 [browser = netscape] page { 10 = TEXT [Link] = HELLO World [Link] = |<br /> } [END] page { 20 = TEXT [Link] = Hello TYPOS!! }

tant Lorsque plusieurs conditions se trouvent sur la m eme ligne, elles sont consid er ees comme e s epar ees par lop erateur logique OR, cest-` a-dire que tant quau moins une des conditions 220

5.2 TypoScript Principes de base

est remplie, le code TypoScript suivant la condition sera lu. Lop erateur AND nest pas encore support e dans les conditions TypoScript. Dans lexemple qui suit, lobjet page.20 afche un texte diff erent si la requ ete provient dun navigateur Netscape ou si le syst` eme dexploitation est Linux.
[browser = netscape] [system = linux] [Link] = vous e tes un utilisateur Netscape ou Linux [END]

tant v La condition [ELSE] est consid er ee comme e eri ee si la condition la pr ec edant ne lest galement par [END] ou [GLOBAL]. pas. Cette condition se termine e
page = PAGE [Link] = 0 [browser = netscape] page { 10 = TEXT [Link] = r esultat pour le navigateur Netscape } [ELSE] page { 20 = TEXT [Link] = r esultat pour tous les autres navigateurs } [END] page { 30 = TEXT [Link] = r esultat pour tous les navigateurs [Link] = <br />| }

Par exemple, le navigateur Firefox est identi e comme un browser Netscape et produit donc le r esultat suivant :
Figure 5.28: La condition [browser = netscape] est v eri ee

Notez que vous ne pouvez pas embo ter des conditions. Ainsi, lexemple suivant ne fonctionne pas.
[browser = netscape] [Link] = vous e tes un utilisateur Netscape [system = linux] [Link] = vous e tes un utilisateur Linux et Netscape [END] [END]

Inclusions ` partir de chiers texte externes. LinstrucVous pouvez inclure des biblioth` eques TypoScript a ` linverse des conditions, se tion permettant ceci doit s ecrire sur une seule ligne mais peut, a 221

5 TypoScript

trouver dans un embo tement de propri et es. Linsertion et le traitement de la biblioth` eque se font avant lanalyse syntaxique. ` laide de linstruction Lexemple ci-apr` es vous montre comment int egrer un chier externe a <INCLUDE_TYPOSCRIPT>.
page = PAGE [Link] = 0 page { 10 = TEXT [Link] = r esultat 1 [Link] = |<br /> <INCLUDE_TYPOSCRIPT: source="FILE:fileadmin/typoscript/include_1.txt"> 30 = TEXT [Link] = r esultat 3 }

t Le chier externe include_1.txt, ayant e e enregistr e dans le syst` eme de chiers sous leadmin/typoscript/, contient le code suivant :
20 = TEXT [Link] = r esultat 2 (int egr e via INCLUDE) [Link] = |<br />

Le r esultat suivant est afch e dans le frontend :


Figure 5.29: Insertion de code TypoScript par chier

5.2.11 Ordre de traitement


Pour utiliser TypoScript, vous devez comprendre lordre dans lequel le code TypoScript est trait e. 1. 2. 3. 4. 5. Les instructions TypoScript dans le champ des constantes sont lues de haut en bas et les conditions sont prises en compte. Les constantes sont remplac ees dans le setup TypoScript dans lordre dans lequel elles t ont e e d enies. Les instructions TypoScript dans le champ setup sont lues de haut en bas. valu Les conditions sont e ees lorsquelles sont lues. Les copies dobjets et de propri et es utilisant lop erateur < se font lors de lanalyse syntaxique. Ceci signie bien entendu que seule la conguration de lobjet disponible au ` lobjet dans les moment de la copie sera copi ee. Si des changements sont apport es a ` la copie d e. lignes qui suivent, ils ne seront pas appliqu es a ej` a cr ee Le code TypoScript est trait e et les r ef erences sont int egr ees.

6. 222

5.2 TypoScript Principes de base

Comme vous le voyez, la s equence des instructions durant lanalyse syntaxique de TypoScript est importante puisque la surcharge des propri et es dans les copies et les objets de sortie na ` partir desquels ils ont e t pas deffet sur les objets a e copi es. Dautre part, lordre de traitement na pas dimportance. es dans le gabarit. Les propri et es ne sont pas trait ees dans lordre dans lequel elles sont cr ee valuera une propri Cest lobjet lui-m eme qui d enit quand il e et e. Les objets sont trait es dans lordre de la liste num erique dans laquelle ils sont d enis. vident que la premi` Ainsi, les exemples suivants donnent le m eme r esultat ; il est e ere version est bien plus claire. Exemple 1 :
page = PAGE [Link] = 0 page.10 = TEXT [Link] = Je suis un page.15 = HTML [Link] = <br /> page.20 = TEXT [Link] = texte exemple!

Exemple 2 :
page = PAGE [Link] = 0 page.143 = HTML [Link] = <br /> page.377 = TEXT [Link] = texte exemple! page.23 = TEXT [Link] = Je suis un

Figure 5.30: Afchage des exemples dans le frontend

5.2.12 Lembo tement dobjets


Un autre principe essentiel du TypoScript est lembo tement dobjets. Jusqu` a pr esent, vous avez vu comment les objets cr eaient du contenu et lafchaient dans lordre sp eci e par une liste num erique. Le code de setup suivant en donne une illustration :
page = PAGE [Link] = 0 page.10 = TEXT [Link] = je suis un [Link] = |<br />

223

5 TypoScript
page.20 = TEXT [Link] = petit [Link] = |<br /> page.30 = TEXT [Link] = texte exemple!

Ce code produit la sortie :


je suis un petit texte exemple!

` son tour se vide de son contenu de sorte que le Lhypoth` ese g en erale est que chaque objet a ` fait correct : les r esultat saccumule graduellement dans le frontend. En fait, ce nest pas tout a objets restituent leur contenu ou leur donn ees dans lobjet qui les int` egre. Dans lexemple ci l ` lobjet PAGE situ ` un niveau dessus, les objets HTML transf` erent leurs e ements de contenu a ea l s sont retourn sup erieur. Les e ements de contenu cr ee es, puis afch es, uniquement apr` es que t tous les objets de page ont e e trait es. tant donn Cet embo tement peut s etendre sur plusieurs niveaux, e e que beaucoup de types dobjets peuvent eux-m eme int egrer des objets. Le code setup suivant donne le m eme r esultat que lexemple pr ec edent :
page = PAGE [Link] = 0 page.10 = COA page.10 { 10 = COA 10 { 10 = COA 10 { 10 = TEXT [Link] = je suis un [Link] = |<br /> } 20 = TEXT [Link] = petit [Link] = |<br /> } 20 = TEXT [Link] = texte exemple! }

` ceci : Le m eme code nutilisant pas daccolades ressemble a


page = PAGE [Link] = 0 page.10 = COA page.10.10 = COA page.10.10.10 = COA page.[Link] = TEXT

224

5.3 Objets, fonctions et types de donn ees TS


page.[Link].value = je suis un page.[Link].wrap = |<br /> page.10.10.20 = TEXT [Link] = petit [Link] = |<br /> page.10.20 = TEXT [Link] = texte exemple!

Pour comprendre ce setup TypoScript, il faut savoir que le type dobjets COA, de m eme que le type dobjets PAGE peut int egrer des objets dans une liste num erique. La proc edure est la ` son tour, cet objet (via page.10.10) appelle suivante : un objet COA est appel e par page.10 ; a un objet COA, et ainsi de suite. Par apr` es, un premier objet de contenu (TEXT) est appel e par ` savoir je suis un . Tous les objets dans page.[Link], qui cr ee en r ealit e une sortie, a t ` partir COA page.10.10.10 ont maintenant e e trait es. Lobjet COA a rec u le contenu g en er ea ` pr ` son parent COA page.10.10. Ceci a pour effet de lobjet TEXT incorpor e et le passe a esent a de traiter sa liste dobjets en appelant lobjet TEXT suivant : page.10.10.20. Le contenu g en er e t est annex e au contenu que le COA a rec u de lenfant COA et, apr` es que la liste dobjet a e e l trait ee, lobjet PAGE rec oit les e ements de contenu, et ils sont afch es. Cet embo tement est illustr e en ajoutant le code suivant :
[Link] = upper

Ce qui a pour effet dafcher la sortie :


JE SUIS UN PETIT texte exemple!

Lobjet COA page.10.10 rec oit, avec .[Link]=upper, linstruction de convertir son contenu en majuscules. Lobjet lui-m eme ne cr ee pas de contenu mais, dans une hi erarchie embo t ee, incorpore le contenu des deux objets TEXT pour le convertir en majuscules. es en TypoScript, o` Donc, des arborescences dobjets sont cr ee u dune part les niveaux sont ` tour, et o` trait es tour a u, dautre part, lordre de traitement d epend simultan ement de la hi erarchie. De cette mani` ere vous disposez dun puissant outil pour congurer la restitution du contenu dans le frontend.

5.3 Objets, fonctions et types de donn ees TS


5.3.1 Types de donn ees
Les types de donn ees utilis es par TYPO3 sont tr` es vari es et ne sont pas comparables aux types galement des types de donn de donn ees des langages de programmation. Bien quil y ait e ees comme int, string et boolean, TypoScript utilise aussi degree et pixels. Comme int, ce sont galement des valeurs enti` ` ceci pr` e eres, a es que degree d enit un nombre de degr es et pix` d els un nombre de pixels. Comme vous le voyez, les types de donn ees nous aident a ecrire
R ef erence

253434

225

5 TypoScript

` une propri quelles sortes de donn ees sont assign ees a et e. Parfois, le type de donn ees clarie la ` la r fonctionnalit e de la propri et e. La liste compl` ete des types de donn ees se trouve a ef erence ci-contre. l Un e ement caract eristique des types de donn ees r eside dans le fait que certains dentre eux sont en fait des fonctions. Jusqu` a pr esent nous vous avons indiqu e de quelle mani` ere TypoScript xe les param` etres de conguration. Il utilise une proc edure purement statique, sauf pour les conditions. Mais avec les fonctions disponibles, TypoScript devient un outil dynamique et peut traiter et modier des donn ees. Voici un exemple tr` es simple :
page.10 = HTML [Link] = kasper [Link] = upper

value est dans lobjet HTML et son type de donn ees est stdWrap. Cette fonction conna t la tre congur propri et e case et peut donc e ee avec la valeur upper pour convertir la valeur en majuscules. TypoScript fournit toute une s erie de fonctions similaires qui sont d ecrites plus en d etail dans la suite. Ces fonctions combin ees avec des types dobjets transforment TypoScript en un outil puissant. Les types de donn ees sont repris dans les tables des propri et es dobjets dans le document TSref. Dans une assignation, vous trouvez non seulement des types de donn ees mais aussi des valeurs telles que ->select ou ->lelink.
R ef erence

924038

Dans ces cas-l` a, les fonctions sont appel ees via les propri et es du m eme nom ou alors des objets ` la gure suivante, pr ed enis du type pr ecis e sont disponibles (par exemple TLO4 cong). A voyez comment les propri et es if et stdWrap pointent vers les fonctions correspondantes.

Figure 5.31: Le type dobjet CASE comprend les fonctions stdWrap et if

R ef erence

034017

R ef erence

695668

` la valeur dun type de donn Si nous ajoutons +calc a ees dans TSref, vous pouvez alors appliquer des fonctions math ematiques sur cette valeur. Les op erateurs +-/* utilis es dans ces calculs ne connaissent pas de priorit es et sont trait es dans lordre dans lequel ils apparaissent. ` la gure 5.31, la propri Comme vous le voyez a et e est du type de donn ees string/stdWrap. Pour des types de donn ees joints comme ceux-ci, soit vous sp eciez une valeur (string), soit galement combiner les deux. vous utilisez la fonction pr ecis ee (stdWrap). Vous pouvez e
4 Toplevel

Object

226

5.3 Objets, fonctions et types de donn ees TS

5.3.2 Le concept denveloppe


Le concept denveloppe (wrap) est tr` es important pour de nombreux objets TypoScript. Il est repr esent e par une cha ne de caract` eres divis ee par un caract` ere (tube) . Si lobjet a la propri et e dune enveloppe, il est entour e par la valeur de lenveloppe. Dans notre exemple, lobjet page.10 de type TEXT avec la valeur Hello World est entour e par lenveloppe <strong>|</strong> :
page.10 = TEXT [Link] = HELLO WORLD! [Link] = <strong>|</strong>

Le r esultat est alors du texte en gras : <strong>HELLO WORLD!</strong>. ` la ligne avant et apr` Les espaces, les tabulations et les sauts a es les diff erentes parties de lenveloppe sont supprim es lorsquils sont lus.

5.3.3 Fonctions
Comme nous lavons d ej` a d ecrit, certains types de donn ees ont des capacit es sp eciales. Ils sont utilis es par de nombreux objets de contenu et leur fournissent des fonctionnalit es universelles. Ils sont impl ement es en PHP en utilisant des fonctions ind ependantes, cest pourquoi ils galement repris comme fonctions dans TSref. Ils concordent toutefois parfaitement avec sont e dautres types de donn ees en TypoScript pour sins erer dans la syntaxe des objets et propri et es. Mais ils sont utilis es uniquement si les propri et es sont du type de donn ees correspondant, puisquils sont appel es explicitement au niveau du code PHP. Vous trouverez dans TSref le type de donn ees de chaque propri et e. ` Gardez a lesprit que les fonctions ne sont pas disponibles dans le champ des constantes. stdWrap Cette fonction joue un r ole tr` es important dans TYPO3. Selon lusage que vous en faites, elle peut importer, contr oler ou manipuler des donn ees. Une bonne partie des fonctions ` partir de stdWrap. Donc, lorsque stdWrap est le type de donn ci-apr` es sont utilis ees a ees ` votre disposition pour le traitement des dune propri et e, des outils puissants sont a l e ements de contenu. imgResource ` un simple traiCette fonction d enit la source dun chier image, soumet limage a tement et cr ee le code HTML requis pour la sortie. Elle est disponible aux propri et es appartenant au type de chiers du m eme nom (imgResource). imageLinkWrap ` laide des e l Cette fonction permet d editer une image a ements avanc es de la bi tablir un simple lien (tyblioth` eque graphique (GIFBUILDER). Vous pouvez en outre e polink) ou un lien avec le script [Link], pour ouvrir limage dans une fen etre JavaScript s epar ee. numRows Permet de d eterminer le nombre denregistrements dans une table ou dans une requ ete de type Select. 227
R ef erence

991290

5 TypoScript

select

Vous permet de formuler une requ ete SQL qui sera afch ee par le cObject CONTENT. Les enregistrements cach es ou supprim es ne sont pas pris en compte dans ce processus, ` des groupes de m eme que ceux dont la visibilit e est restreinte par Lancement/arr et ou a dutilisateurs frontend. Cette fonction divise le contenu dun texte sur base dune lettre ou dun caract` ere pr ecis et traite les sections r esultantes avec dautres fonctions ou objets de contenu. Elle peut tre utile si vous voulez quun menu utilise plusieurs couleurs. par exemple e La fonction if imite la structure de contr ole classique IF. Si les conditions subordonn ees l sont toutes remplies, les e ements de contenu de lobjet enfant restent telles quelles. l Sinon, la fonction retourne FALSE et les e ements de contenu de lobjet sont supprim es.

split

if

typolink tre utilis typolink transforme le contenu en un lien. Cette fonction doit e ee autant ` la place des liens congur que possible a es en dur, entre autres pour supporter la simulation des pages HTML statiques. textStyle La fonction textStyle quelque peu vieillissante d enit lapparence des zones de texte l lorsque vous utilisez FONT ou dautres e ements dHTML. Lalternative moderne serait dutiliser les d enitions CSS. encapsLines Permet dins erer des paragraphes, par exemple dans des balises HTML, pour la sortie. Des ` lanalyse syntaxique et ne sont pas sauv balises telles que P ou DIV sont ajout ees a ees dans la base de donn ees avec le contenu, ce qui fait que ce dernier reste propre . tableStyle ` tableStyle. Diff Vous entourez le contenu dune balise TABLE gr ace a erents d etails sont d enis ici. La fonction est utile, entre autres, en pr evision de la table de mise en page, surtout pour congurer des gabarits TypoScript tr` es soign es. addParams En utilisant cette fonction, vous passez des attributs (param` etres) suppl ementaires aux l e ements HTML de cObjects existants. lelink ` lelink. Les d Un nom de chier est converti en un lien de t el echargement gr ace a etails du chemin, des attributs tels un texte ou un titre alternatif et des ic ones sont ajout es. Des aspects avanc es de cette fonction comptent le nombre de t el echargements ou le camouage du chemin dacc` es au chier sur le disque pour des raisons de s ecurit e.

parseFunc tendu des e l Un post-traitement e ements de contenu est rendu possible par cette fonction. Vous pouvez par exemple remplacer les marqueurs ins er es dans le texte, d enir des r` egles dutilisation ou de remplacement d el ements HTML, ou encore d emarrer un traitement r ecursif de blocs HTML embo t es, tout en introduisant des fonctions suppl emen l taires. Vous pouvez ainsi envelopper les e ements de contenu ou des termes de recherche 228

5.3 Objets, fonctions et types de donn ees TS

` ce quils soient identi de mani` ere a es plus facilement, d eterminer la mani` ere avec laquelle les liens ou les listes (ordonn ees ou non-ordonn ees) sont g en er es, ou quelles l balises peuvent appara tre dans les e ements de contenu. makelinks ` partir de simples adresses Web ou email makelinks g en` ere des liens HTML complets a qui apparaissent dans le contenu. tags Utilisez cette fonction pour d enir vos propres balises. Elles sont sauvegard ees dans ` la sortie par diff l la base de donn ees et sont remplac ees a erents e ements HTML qui existent r eellement. Cette fonction est utilis ee de pair avec parseFunc. Un exemple de balise d enie par un utilisateur de TYPO3 est l el ement <LINK> qui est remplac e lors de lanalyse syntaxique par un lien HTML propre. HTMLparser l La fonction HTMLparser s epare lentr ee HTML compl` ete en de simples e ements HTML ` la combinaison des et leurs attributs. Ce faisant, les r` egles d enies sont appliqu ees a l e ements et des attributs. La fonction est surtout utile pour manipuler du contenu HTML import e ou ext erieur, et lorsque vous travaillez avec le Rich Text Editor. HTMLparser_tags HTMLparser_tags est appel ee par la fonction HTMLparser mentionn ee ci-dessus. Elle l d enit des r` egles pr ecises pour les attributs de chaque e ement HTML.

5.3.4 Objets de contenu (cObjects)


TypoScript consiste principalement en des Objets de Contenu ou cObjects : ils restituent ` partir de donn du contenu a ees en utilisant une conguration TypoScript. Bien que dautres m ethodes dentr ee et de sortie de donn ees soient possibles, les objets de contenu sont g en eralement utilis es pour transformer en sortie frontend les donn ees dont les types de contenu sont disponibles dans le backend (Text, Image, Insert plugin, . . .) et sauv es dans la base de donn ees. ` chaque cObject lorsquil est trait Un tableau accessible de donn ees courantes est assign ea e. Il sagit g en eralement des donn ees de lenregistrement actuel. Si un type de contenu Text w/image est restitu e, les donn ees entr ees (par exemple len-t ete sur les noms des chiers des l images ins er ees) sont disponibles pour la conguration TypoScript qui afche cet e ement de contenu parce que les champs de lenregistrement sont accessibles (cf. section 5.11.3). Dans les exemples pr ec edemment expos es, nous avons uniquement utilis e les cObjects TEXT, HTML et HRULER. Mais il existe beaucoup dautres cObjects en TYPO3. Exemple : cObject FILE l Le cObject FILE int` egre des e ements de contenu du syst` eme de chiers ayant une taille allant jusqu` a 1024 kB. Notez que les images de type JPG, GIF, JPEG et PNG sont afch ees avec une balise <img>. Tous les autres formats sont lus et leur contenu est afch e sans traitement. Dans lexemple qui suit, page.10 est d eni comme un cObject FILE. La propri et e le (type de donn ee : resource) pointe vers une image en format GIF. Lobjet page.20 est aussi d eni 229
R ef erence R ef erence

207606

036048

5 TypoScript

comme un cObject FILE mais pointe vers un chier en format TXT. Le r esultat est que ce chier est lu et son contenu afch e.
page = PAGE page { typeNum = 0 10 = FILE [Link] = fileadmin/images/layout/[Link] 20 = FILE [Link] = fileadmin/documents/[Link] }

Figure 5.32: Acc eder au syst` eme de chiers avec le cObject FILE (sortie frontend)

Vue densemble des cObjects HTML HTML est utilis e pour afcher du contenu HTML. La propri et e value est du type de donn ees stdWrap avec lequel les propri et es de la fonction du m eme nom sont disponibles. Exemple :
10 = HTML [Link] = Ceci est un objet HTML [Link] = upper

TEXT

TEXT est tr` es similaire au cObject HTML et est utilis e pour afcher du texte qui nest pas ` partir de la base de mis en forme. Les propri et es de la fonction stdWrap sont appel ees a lobjet, ce qui nest toutefois pas la r` egle g en erale. Exemple :
10 = TEXT [Link] = Ceci est un objet de texte [Link] = lower

COBJ_ARRAY (COA, COA_INT) Le cObject COBJ_ARRAY (alternativement : COA) comprend plusieurs objets dans une liste num erique, dans un seul tableau. Si vous cr eez un objet du type COA_INT, il se 230

5.3 Objets, fonctions et types de donn ees TS

comportera exactement comme lobjet USER_INT : il est restitu e sans passer par le cache ! Exemple :
[Link] = COA [Link] { 10 = HTML [Link] = <table border=1 cellspacing=5 bgcolor=grey><tr><td> 20 = TEXT [Link] = Un objet, cr ee via COA. 30 = HTML [Link] = <td><tr></table> }

FILE

Avec le cObject FILE, vous acc edez au syst` eme de chiers et int egrez du texte, des images ou des chiers HTML par exemple. Exemple :
10 = FILE [Link] = fileadmin/html/[Link]

IMAGE tre int Les images peuvent e egr ees avec le cObject IMAGE. La propri et e le du type de donn ees imgResource permet dacc eder au syst` eme de chiers ou aux ressources de lenregistrement de gabarit. Exemple :
10 = IMAGE [Link] = entete_commercant*.gif 20 = IMAGE [Link] = fileadmin/images/layout/entete_produit.gif

IMG_RESOURCE ` limage, sans balise Le cObject IMG_RESOURCE renvoie uniquement la r ef erence a <img>. Exemple :
10 = IMG_RESOURCE [Link] = entete_commercant*.gif [Link] = <table width="400" border=0 cellspacing=15 background="|"><tr><td>Notre commerc ant<td><tr></table>

CLEARGIF Le cObjet CLEARGIF ins` ere une image GIF transparente qui peut servir pour ins erer des espaces blancs dans les gabarits. Exemple :
10 = CLEARGIF [Link] = 15

231

5 TypoScript

CONTENT l Avec le cObject CONTENT, vous afchez les e ements de contenu de la base de donn ees. La requ ete Select est restreinte aux tables commenc ant par tt_, tx_, ttx_, fe_ ou user_. Pour afcher les enregistrements, vous avez besoin dun TLO congur e de mani` ere ad equate avec le nom de la table qui d enit la sortie. La table tt_content, par exemple, est pr econgur ee dans le gabarit standard Content (Default). l Exemple : le r esultat des e ements de contenu de la page courante et de la colonne Normal .
10 = CONTENT [Link] = tt_content [Link] { pidInList = this orderBy = sorting where = colPos=0 }

RECORDS Avec le cObject RECORDS, vous pouvez afcher les enregistrements de la base de donn ees, ce qui est comparable au type de contenu Insert record. Vous ne pouvez norma` partir de pages inaccessibles (cach lement pas s electionner des enregistrements a ees, restreintes dans le temps ou dont lacc` es est prot eg e), en tout cas tant que loption dontCheck Pid nest pas congur ee. Exemple : les enregistrements dadresses avec UID2 et 3 sont afch es.
10 = RECORDS 10 { source = tt_address_2,3 tables = tt_address conf.tt_address = < tt_address.default }

HMENU Ce cObject vous permet de g en erer un menu hi erarchique. La propri et e (1/ 2/ 3/. . .) fait r ef erence au niveau du menu dans lequel lobjet sera restitu e. Exemple :
10 = HMENU 10.1 = TMENU ...

CTABLE Le cObject CTABLE cr ee une table HTML dont les cellules de contenu sont entour ees par tre assign ` chacune de ces cellules. quatre autres cellules. Le contenu peut e ea Exemple :
10 = CTABLE 10 { tableParams = border=0 width=500 c.10 = CONTENT ...

232

5.3 Objets, fonctions et types de donn ees TS


rm.10 = HMENU ...
}

OTABLE l Cette table HTML est utilis ee pour ajouter un d ecalage aux e ements de contenu. Con` partir du coin sup cr` etement, ils sont d ecal es a erieur gauche. Exemple :
10 = OTABLE 10 { offset = 10,70 tableParams = border=0 width=100 10 = TEXT [Link] = Contenu }

COLUMNS Avec ce cObject, vous cr eez une table pour laquelle vous sp eciez le nombre de colonnes et de lignes, les param` etres, la largeur, lespacement des colonnes et l epaisseur des bordures. Exemple :
10 = COLUMNS 10 { 1 = CONTENT ... 2 = CONTENT ... gapWidth = 30 gapLineThickness = 1 [Link] < .1 [Link] < .2 totalWidth = 500 }

HRULER Ce cObject assez simple trace une ligne horizontale pour laquelle vous sp eciez l epais` gauche et a ` droite. seur et la couleur, ainsi que lespacement a Exemple :
10 = HRULER 10 { lineThickness = 1 spaceLeft = 20 }

IMGTEXT ` agencer les images et le texte. Il est utilis Le cObject IMGTEXT aide a e dhabitude pour g en erer l el ement de contenu Text w/Image. ` sa gauche ou Les images sont plac ees dans un tableau plac e avant ou apr` es le texte et a ` sa droite. a 233

5 TypoScript

Exemple : le objet IMGTEXT de [Link] (default) est compl` etement remplac e.


[Link] = IMGTEXT [Link] { text < tt_content.text.20 [Link] = image [Link] = imageorient imgPath = uploads/pics/ imgObjNum = 1 [Link] = 1 maxW = 150 border = 1 textMargin = 10 } tt_content.textpic.20 > tt_content.textpic.20 < [Link]

CASE

` la mani` CASE permet de faire la distinction entre diff erents cas, a ere de la construction switch du PHP. Si la propri et e key a le m eme nom quune autre propri et e du tableau de lobjet, alors ce dernier est afch e. tre choisie librement mais les mots r Lappellation du cObject peut e eserv es key, default, tre utilis stdWrap et if ne peuvent pas e es. ` sa place. Exemple : Si la propri et e key nest pas d enie, alors lobjet default est utilis ea pour le type de contenu Text, la disposition 2 est afch ee avec un en-t ete de section en minuscules.
[Link] = CASE [Link] = CType [Link] < [Link] [Link] < [Link] [Link] > [Link] < [Link] [Link] { [Link] = lower }

LOAD_REGISTER Le registre est une m emoire interne temporaire en TYPO3. Les variables stock ees sont cras ` diff globalement disponibles et sont afch ees, sauv ees ou e ees a erents moments de lanalyse syntaxique. Avec LOAD_REGISTER, les valeurs sauv ees temporairement peuvent tre e cras ` ine ees par le syst` eme et remplac ees par vos propres d enitions, de mani` ere a uencer le processus de g en eration du contenu. La m emoire temporaire est organis ee en tableau et comprend des propri et es et leurs valeurs. ` laquelle a e t ` jour de la page est remplac Exemple : la date a e r ealis ee la derni` ere mise a e par une date x ee.
10 = LOAD_REGISTER 10.SYS_LASTCHANGED.data = date: U

234

5.3 Objets, fonctions et types de donn ees TS

RESTORE_REGISTER Cet objet annule les changements r ealis es par LOAD_REGISTER dans le registre interne du syst` eme interne. Le tableau de registre original est alors restaur e. Si les changements tre a ` noude registre doivent avoir un effet sur un endroit pr ecis, et doivent ensuite e veau remplac es par les valeurs du syst` eme, alors lutilisation de RESTORE_REGISTER est appropri ee. Exemple :
20 = RESTORE_REGISTER

FORM

Lobjet FORM est responsable de la repr esentation des formulaires. Il permet de d enir des formulaires directement en TypoScript (par exemple les formulaires de messagerie ` des r et didentication du syst` eme) et permet aussi a edacteurs de les d enir dans le backend du syst` eme. Exemple : formulaire didentication.
[Link] = FORM [Link] { dataArray { [Link] = Nom dutilisateur: [Link] = *user=input [Link] = Mot de passe: [Link] = *pass=password [Link] = logintype=hidden [Link] = Login [Link] = submit=submit [Link] = Identification } layout = <tr><td>###LABEL###</td><td>###FIELD###</td></tr> [Link] = <table>|</table> [Link] = TEXT [Link] = 123 }

SEARCHRESULT Le cObject SEARCHRESULT contr ole et liste le r esultat de la recherche TYPO3. La recherche se fait uniquement pour les types de pages Standard, Avanc e et Hors menu. Le ` cObject d etermine lapparence de la liste en plus des valeurs des tables et des champs a inclure dans la recherche. Les termes de la recherche sont fournis par un formulaire avec des param` etres URL sp eciaux. Les requ etes sur la base de donn ees se font en arri` ere-plan et la liste des r esultats est renvoy ee. Les termes de la recherche sont conserv es dans le tre mis en registre d ecrit ci-dessus pour que les termes trouv es puissent par exemple e couleurs par dautres fonctions. USER et USER_INT Ces objets de contenu sont les instruments recommand es pour lint egration de vos propres scripts PHP. Lobjet appelle une fonction PHP ou une m ethode dune classe et tre pass leur conguration peut e ee en argument. Presque tous les plugins du frontend sont bas es sur cet objet. 235

5 TypoScript

Lobjet USER_INT est surtout utilis e lorsque sont impliqu ees des fonctionnalit es dyna tre dans le cache. Par exemple, si lutilisamiques qui ne peuvent ou ne devraient pas e ` un bulletin dinformation, cette donn teur soumet un formulaire dinscription a ee, pour tre sauv e ee dans la base de donn ees, sera trait ee dynamiquement. Exemple :
includeLibs.alt_xml = media/scripts/[Link] 10 = USER [Link] = user_xmlversion->main_xmlversion

PHP_SCRIPT ` int PHP_SCRIPT sert a egrer de simples scripts PHP. Un des d esavantages de cet objet est que vous devez d esactiver compl` etement la fonctionnalit e de cache de la page, ce qui entra ne des d elais perceptibles lors de lappel de la page et une charge accrue sur le serveur. Pour int egrer vos propres scripts, vous devriez autant que possible utiliser USER ou USER_INT. Cette option est ignor ee si $TYPO3_CONF_VARS"FE"]["noPHPscriptInclude"] = 1; est activ e et plac e dans [Link]. PHP_SCRIPT_INT ` PHP_SCRIPT am Cette alternative a eliore quelque peu les probl` emes de cache mais cause des probl` emes de d ebogage et de variables globales. Utilisez plut ot USER ou USER_INT. PHP_SCRIPT_EXT Avec cet objet, lint egration des scripts se d eroule hors de lenvironnement TypoScript. Ceci est tr` es avantageux, mais le traitement se passe en grande partie en dehors de TYPO3. Vous devriez donc utiliser USER ou USER_INT. TEMPLATE Ce cObject vous permet de charger un gabarit HTML. Par contraste avec FILE, vous ` certaines zones pr pouvez limiter le contenu du chier HTML a ecises. Vous pouvez aussi sp ecier quel contenu remplacera quel marqueur. Exemple :
page.10 = TEMPLATE page.10 { template = FILE [Link] = fileadmin/templates/[Link] workOnSubpart = DOCUMENT subparts { HELLO = TEXT [Link] = Ce texte remplace la sous-partie "HELLO" } marks { TESTMARKER = TEXT [Link] = Ce texte remplace le marqueur "TESTMARKER" } }

236

5.3 Objets, fonctions et types de donn ees TS

MULTIMEDIA Cet objet permet dint egrer diff erents chiers multim edias. Quelques types de chiers possibles sont : TXT, HTML, HTM, CLASS, SWF, SWA, DCR, WAV, AU, AVI, MOV, ASF, MPG et WMV. Selon le type de chier, vous pouvez sp ecier certains param` etres du chier. Exemple :
10 = MULTIMEDIA [Link] = fileadmin/video/[Link] [Link] = 200px

EDITPANEL dition de frontend , les options d Dans le contexte du concept d e edition dune page sont rendues disponibles dans le frontend pour des utilisateurs identi es dans le backend. Exemple :
[Link] = COA [Link] { 10 = EDITPANEL 10 { allow = toolbar,hide,move,delete label = Page courante:<B>%s</B><br /> vous pouvez cr eer ici une sous-page ici<br />, e diter ou d eplacer la page line = 5 } 20 = EDITPANEL 20 { newRecordFromTable = tt_news line = 0 label = Nouveau contenu<br /> Vous ins erer ici une actualit e. } }

5.3.5 Objets de premier niveau


Pour restituer du contenu sur une page, on a utilis e jusqu` a pr esent lobjet page assign e au type dobjet PAGE. Ici, lobjet page repr esente un objet de premier niveau (TLO pour TopLevelObject ). Il est situ e au plus haut niveau de la hi erarchie des objets, ou, dune autre fac on, ` lextr on pourrait dire quil est a emit e gauche de la conguration TypoScript. TypoScript utilise une s erie de TLO qui inuencent lapplication. Dans la zone setup de TSref sont repris les TLO d ej` a d enis ainsi que la liste des propri et es et objets quils int` egrent (par exemple FE_TABLE, FRAMESET, FRAME, META, CARRAY). Plusieurs objets de premier niveau tels que tre dabord assign ` une type de donn cong, constants et FEData ne doivent pas e es a ees pour tre d tant donn e enis, e e quils sont d ej` a pr ed enis. types Type de donn ee : readonly 237
R ef erence

110842

5 TypoScript

` lusage interne (class.t3lib_tstemplate.php) ; par exemple type=99 est r R eserv ea eserv e ` lafchage de texte en clair. a resources Type de donn ee : readonly Utilis e en interne pour enregistrer dans une liste s epar ee par des virgules les ressources pour la hi erarchie des gabarits. sitetitle Type de donn ee : readonly ` lusage interne pour ins ` partir des gabarits. R eserv ea erer le titre du site Web a cong Type de donn ee : ->CONFIG cong permet de d enir les valeurs de conguration globale pour l edition des pages, le cache, le d ebogage, la manipulation des liens, etc. Ces valeurs sont sauv ees pour les ` pages cach ees, ce qui signie quelles sont aussi disponibles si une page est appel ee a partir du cache. constants Type de donn ee : ->CONSTANTS D enit les constantes qui remplacent dans tout le site les passages de texte marqu es l l dans les e ements de contenu. Ceci est r ealis e lorsque les e ements de contenu sont ` la fonction parseFunc. Exemple : pass es a
constants.WEBMASTER_EMAIL = webmaster@[Link]

FEData Type de donn ee : ->FE_DATA FEData congure le traitement des donn ees GET et POST envoy ees par les utilisateurs ` peine utilis via le frontend. Il sagit dun concept ancien qui est d esormais a e par les extensions. Exemple : le livre dor. includeLibs Type de donn ee : tableau de chanes de caractres Vous permet dint egrer des chiers PHP qui ont leurs propres biblioth` eques de fonctions ` TYPO3, de sorte que ces fonctions soient accessibles. Notez que lobjet PAGE fournit a des propri et es avec la m eme fonctionnalit e ([Link]). Mais ces propri et es sont craser des valeurs dans le TLO. Exemple : ins er ees apr` es le TLO includeLibs et peuvent e
includeLibs.gmenu_foldout = media/scripts/gmenu_foldout.php

plugin Les plugins des extensions sont ins er es dans le TLO plugin. Les plugins charg es peuvent tre vus comme des sous-objets de plugin via leur cl e e dextension. tt_* Le TLO tt_* est utile pour restituer du contenu des tables. Le gabarit standard content (default) normalement utilis e contient une d enition correspondante de la table l tt_content, et contr ole donc, par-l` a m eme, la restitution de la plupart des e ements de contenu.

238

5.3 Objets, fonctions et types de donn ees TS

temp

Les TLO temp et styles sont utilis es comme des biblioth` eques de code que vous pouvez copier pendant lanalyse syntaxique. Ils ne sont pas stock es dans le cache avec le gabarit mais ils sont toutefois supprim es/vid es avant que le gabarit ne soit cach e ! Utilisez temp pour enregistrer vos propres donn ees temporaires. Se comporte de la m eme mani` ere que temp, mais nest pas disponible pour votre usage, mais bien pour celui des gabarits par d efaut. ` d Sert a enir des biblioth` eques de code auxquelles des r ef erences sont faites. Type de donn ee : PAGE Vous pouvez choisir le titre que vous d esirez. Mais nous vous recommandons dutiliser le titre page pour la d enition du TLO de type PAGE. Type de donn ee : nimporte quel type D enissez vos propres TLO et assignez-les aux types de donn ees correspondants.

styles

lib ...

...

Les TLO utilis es et la hi erarchie des objets sont afch es clairement dans le TypoScript Object Browser :
Figure 5.33: Les objets de premier niveau du gabarit afch es dans le TypoScript Object Browser

Exemples cong Certaines fonctions sont congur ees globalement avec cong. Par exemple si vous xez [Link]=1 dans le champ Setup du gabarit TypoScript, dynamiquement est simul tait compos le r esultat dans le frontend cr ee e comme sil e e de pages statiques5 . ` cinq jours. Avec cong.cache_period=432000, vous xez le cache des pages a
5 Pour

les sp ecications, voir TSref

239

5 TypoScript
config { simulateStaticDocuments = 1 cache_period = 432000 }

constants Avec le TLO constants, vous d enissez des constantes pour lapplication dans son ensemble. Ceci vous permet de remplacer les balises sp eciques par le texte correspondant, en utilisant la fonction parseFunc et sa propri et e constants=1. Si lanalyseur syntaxique trouve dans le contenu de lapplication la constante de lexemple ###WEBMASTER_EMAIL###, alors le texte webmaster@[Link] est afch e sous forme de lien.
constants { WEBMASTER_EMAIL = <a href="[Link] master@[Link]</a> }

lib

tre r Le TLO lib est pr evu pour les biblioth` eques de code r eutilisable qui peuvent e ef erenc ees. Un texte comme celui de lexemple nest bien s ur pas vraiment ad equat !
[Link] = TEXT [Link] { value = TypoScript est simplement g enial. wrap = <p> | </p> } page = PAGE page { typeNum = 0 10 = TEXT [Link] = Hello Typos! 20 = < [Link] }

temp et styles
R ef erence

110841

Les objets de premier niveau temp et styles sont particuliers en ceci quils sont supprim es du t champ Setup apr` es quils ont e e analys es par TypoScript. Cela signie quil est impossible de ` lobjet [Link] puisque temp nexiste plus pendant le traitement du faire r ef erence a champ Setup. De fait, pour am eliorer les performances, toutes les valeurs TypoScript sont g en eralement en t registr ees dans la table de base de donn ees cache_hash apr` es quelles ont e e lues. Si certaines tre stock parties de TypoScript doivent e ees temporairement, utilisez les objets de premier niveau temp et styles. Leurs objets, leurs propri et es et leurs valeurs sont alors copi es en diff erents endroits de TypoScript et sont r eutilisables. Apr` es lanalyse syntaxique, toutefois, ils sont supprim es, ce qui permet dall eger les gabarits stock es dans le cache. Lobjet de premier niveau ` vos objets g temp est destin ea en eraux, alors que styles est r eserv e aux gabarits standards (gabarits statiques) inclus dans TYPO3.

240

5.4 Outils de d eveloppement

5.4 Outils de d eveloppement


TYPO3 fournit certains outils permettant au d eveloppeur de programmer plus facilement en TypoScript. Dune part le module Web Gabarit dans le backend propose de nombreuses tre afch fonctions, et dautre part, le panneau dadministration peut e e dans le frontend pour fournir de laide suppl ementaire.

5.4.1 Info/Modify
Le module Web Gabarit Info/Modify vous montre la liste des gabarits existant dans larborescence des pages. Pour cela, choisissez la page racine comme page courante en cliquant sur le titre du globe dans larborescence des pages. Cette liste indique les pages et leurs gabarits et distingue parmi ceux-ci les gabarits racines des gabarits dextension. galement a ` congurer de nouveaux gabarits lorsque la page s Le module aide e electionn ee na pas de gabarit qui lui est associ e. Si n ecessaire, vous pouvez choisir un gabarit statique. Vous avez en outre la possibilit e de sauter au gabarit le plus proche de la page consid er ee.
Figure 5.34: Info/Modify permet de cr eer de nouveaux gabarits

` un gabarit, vous pouvez e diter ce dernier en s Si vous avez choisi une page associ ee a electionnant, ditez un champ, lassistant TS soit des champs pr ecis, soit lenregistrement complet. Si vous e ` la section suivante). De plus, le cache est supprim est disponible (voir a e automatiquement.
Figure 5.35: Edition des enregistrements de gabarits existants

241

5 TypoScript

5.4.2 Assistant TS
De m eme que l edition de contenu pour des types de contenu comme Tableau ou Formulaire ` laide dun assistant, il en existe aussi pour TypoScript. Vous pouvez naviguer dans les se fait a types dobjets et les propri et es et les s electionner. ` la gure suivante, vous voyez comment ouvrir un champ Setup TS pour l A editer, avec le module Web Gabarit Info/Modify. Avec lic one assistant TS, vous ouvrez lassistant dans une nouvelle fen etre.
Figure 5.36: Choix dobjets TypoScript et de leurs propri et es avec lassistant

R ef erence

090547

` laide du lien [GO] permetLes types dobjets sont dabord afch es, chacun deux souvrant a tant une vue d etaill ee. Dans lexemple, cest le cObject HRULER qui est ouvert. La vue d etaill ee montre les propri et es du type dobjet ainsi que ses types de donn ees, sa description et ses valeurs par d efaut. Si vous cliquez sur le nom dune propri et e, lassistant se ferme et la propri et e est ins er ee dans le formulaire dentr ee. Dans notre exemple, les propri et es voulues ont dabord t e e collect ees dans le champ dentr ee de lassistant par un clic sur lic one + . Ensuite, les t propri et es ont e e entour ees du type dobjet en utilisant Entourer. Enn, lorsque vous cliquez sur le lien Transf erer & Fermer, le code est transf er e. M eme si lassistant ne peut remplacer compl` etement TSref, il contient tout de m eme la ma es directement a ` partir du document jorit e de linformation. Les donn ees afch ees sont cr ee ` partir de la documentation TSref-OpenOfce. M eme les propri et es des extensions sont lues a ` partir correspondante. D ecouvrez la mani` ere de pr eparer votre documentation dextension a de la r ef erence ci-contre.

5.4.3 TypoScript Object Browser


t Le TypoScript Object Browser (Web Gabarit Object Browser) a d ej` ae e utilis e quelquefois dans les sections pr ec edentes pour afcher le champ Setup. Outre lafchage des galement des fonctions pour tester les champs Setup et Constants, lObject Browser fournit e conditions et pour naviguer entre les constantes et les afcher dans le setup. En plus, lObject Browser permet d editer les propri et es. 242

5.4 Outils de d eveloppement

LObject Browser fonctionne toujours sur base de la page courante ou du gabarit associ e. Toutefois, en plus des donn ees du gabarit s electionn e, toutes les donn ees de gabarit accumul ees depuis la page racine sont montr ees. Le TypoScript afch e est celui qui est actif dans le frontend lorsque la page associ ee est montr ee. Pour tester le comportement des conditions d enies dans le gabarit, vous pouvez les activer individuellement.
Figure 5.37: TypoScript Object Browser dans le module Web Gabarit

La fonction de recherche passe en revue les valeurs de propri et es et afche les r esultats en couleurs. Si vous choisissez loption Use ereg(), vous pouvez utiliser des expressions rationnelles. ` la gure pr vidence les constantes dans Comme indiqu ea ec edente, vous pouvez mettre en e le champ Setup en choisissant dafcher soit les constantes originales, soit les valeurs de remplacement. Si vous cliquez sur le nom dune partie dun chemin (par exemple property), vous obtenez le formulaire suivant :

243

5 TypoScript

Figure 5.38: Edition dune propri et e dans lObject Browser

Ce faisant, vous avez loccasion d editer la valeur, dajouter une propri et e ou de supprimer l el ement choisi avec >. crit dans le gabarit actuel en sajoutant a ` la n du Le code TypoScript modi e ou ajout e est e code existant. Il peut donc arriver apr` es un certain temps quune masse de code saccumule et ` la main. Mais cette option d que vous deviez la trier a edition est dune grande aide, dautant galement disponible. que lassistant TS y est e

5.4.4 Template Analyzer


t Le module Web Gabarit Template Analyzer a d ej` ae e mentionn e dans le contexte des gabarits en cascade, puisquil permet entre autres dafcher la hi erarchie du gabarit actif. Le Template Analyzer montre la hi erarchie logique du gabarit pour la page s electionn ee les gabarits utilis es pour la restitution dans le frontend. Le tableau indique en outre si les options Rootlevel, Clear Constants et Clear Setup sont activ ees pour le gabarit et indique aussi lID de la page et le niveau (Rootlevel) auquel est situ e le gabarit. La derni` ere colonne montre les ID des gabarits int egr es avec Template on next level. ` la gure suivante, Clear Constants a e t A e activ e pour le gabarit appel e An Extension Template ; ce faisant, les constantes d enies dans les gabarits pr ec edents sont d esactiv ees. Si vous cliquez sur le titre dun gabarit, son code safche. Dans lexemple, nous voyons le code du gabarit Main Template , mais pas les constantes, bien que certaines soient d enies dans ce gabarit. Cela sexplique par le fait que le gabarit An Extension Template est actif sur cette page, avec Clear Constants s electionn e. Les constantes sont donc d esactiv ees et ne sont pas afch ees. 244

5.4 Outils de d eveloppement

Figure 5.39: Le Template Analyzer montre la hi erarchie et le code de certains gabarits

V erier la syntaxe Vous ne pouvez pas tester TypoScript pour v erier si un objet non-existant est appel e ou si des t propri et es ou des valeurs ont e e mal nomm ees. Ce sont souvent des petites fautes de frappe qui nous emp echent darriver au r esultat voulu. Vous pouvez seulement v erier si la syntaxe du code est correcte. ` partir de la version 3.6.0 de TYPO3, loption Syntax highlighting est disponible aux d A eveloppeurs sous Template Analyzer. t Dans lexemple ci-dessus, un espace a e e ajout e au chemin dobjet. Lanalyse syntaxique vous indique d` es lors que cet espace nest pas suivi dun op erateur.

5.4.5 Constant Editor


` la section 5.2.8, les constantes servent, dans un enregistrement Comme nous lavions d ecrit a ` faire passer des valeurs globales ou faciles a ` manipuler au code du champ Setde gabarit, a diter ces constantes de mani` ` laide du Constant Editor up. Vous pouvez e ere simple et claire a (Web Gabarit Constant Editor). De cette fac on, gr ace aux gabarits standards, qui congurent des pages Web, changer lapparence et la fonctionnalit e du site avec des constantes devient tr` es simple. ` congurer avec le Constant Editor. Une Les gabarits standards sont particuli` erement faciles a ` la gure suivante. capture d ecran du gabarit et sa description sont montr es a 245

5 TypoScript

Figure 5.40: Edition du gabarit standard GREEN avec le Constant Editor

Le Constant Editor renvoie les valeurs pr econgur ees (par d efaut) pour le gabarit choisi. Si ` cocher concernant les constantes vous devez remplacer certaines valeurs, activez les cases a et rechargez le formulaire. Elles sont ainsi plac ees dans les champs du formulaire et sauv ees dans le champ Constants de lenregistrement de gabarit s electionn e. vidence des constantes pour le Constant Editor Mise en e ` disposition vos constantes dans le Constant Editor, vous devez poss Si vous voulez mettre a eder de linformation suppl ementaire, entre autres sur les descriptions et les intervalles des valeurs admises. tre pr Dans ce but, les d enitions des constantes doivent e ec ed ees par des commentaires contenant des r` egles syntaxiques pr ecises. Exemple :
# cat=[Link]; type=string; label=Mon Texte [Link] = Hello World!

` TYPO3, le Constant Editor tient compte des commentaires lors de lanalyse Contrairement a syntaxique des gabarits. Il groupe ces commentaires par cat egories sur base des donn ees additionnelles dans les commentaires sp eciaux, et il les afche avec un descriptif (label) d ependant de leur type.
R ef erence

969386

R` egles syntaxiques pour les commentaires :

246

5.4 Outils de d eveloppement

` la ligne pr Le commentaire est plac ea ec edant la constante donn ee. Chaque ligne de commentaire est divis ee en param` etres s epar es par un point-virgule. gal. TYPO3 Chaque param` etre consiste en une cl e et une valeur, s epar ees par un signe e ventuellement sous-cat fournit les cl es suivantes : cat (cat egorie et e egorie), type (type de constante) et label (texte explicatif). ` Le gabarit mon texte suivant sert dexemple. Le gabarit d enit le texte et sa pr esentation a laide de constantes. Donn ees dans le champ constants du gabarit mon texte :
# cat=montexte/ctext/a; type=string; label=Mon Texte monTexteInput = Hello World! # cat=montexte/ctext/b; type=typo; label=Ma Police maPoliceTexte = Verdana # cat=montexte/ctext/d; type=color; label=Ma Couleur maCouleurTexte = red # cat=montexte/ctext/c; type=small; label=Ma taille de Texte maTailleTexte = 32

Donn ees dans le champ setup du gabarit mon texte :


[Link] = TEXT [Link] { value = $monTexteInput [Link] = $maPoliceTexte [Link] = $maTailleTexte [Link] = $maCouleurTexte }

Les utilisateurs peuvent facilement modier les constantes dans le Constant Editor. La gure suivante indique les valeurs courantes du gabarit mon texte et de la cat egorie montexte.
Figure 5.41: Constantes du gabarit mon texte dans le Constant Editor

247

5 TypoScript

Param` etres Cat egories (cat) Vous pouvez choisir vos cat egories librement et elles peuvent rassembler diff erentes constantes. Cest pourquoi il est judicieux de choisir des termes g en eraux pour d esigner galement possible dutiliser les cat ces groupements. Il est e egories pr econgur ees qui suivent pour les gabarits standards. basic La cat egorie basic rassemble les constantes importantes pour les gabarits de mise en forme. Ces constantes sont celles de base que vous congurerez probablement toujours ; elles contiennent entre autres la taille maximum des images et permettent dactiver plusieurs propri et es.

menu Les r eglages du menu d ependent du type ; ils comprennent les chiers de police de caract` ere, les tailles et les arri` ere-plans. content l Les constantes qui inuencent lafchage des e ements de contenu. page Congurations g en erales concernant la page telles que des balises m eta, des destinations de liens, etc.

advanced Fonctions avanc ees rarement utilis ees. plugin.* Constantes pour certains plugins (extensions). Exemple : [Link] Sous-cat egories Les sous-cat egories regroupent les constantes dune cat egorie dans une zone du Con` une cat stant Editor et sont ajout ees a egorie en utilisant le symbole /. Seules les souscat egories d enies dans la liste ci-dessous sont disponibles. Toutes les autres constantes sont automatiquement reprises dans la sous-cat egorie Others. Sp eciez lordre dans lequel les constantes sont class ees en ajoutant une lettre de a z. Si vous ne le faites pas, la lettre z est prise comme valeur par d efaut. Exemple :
# cat=basic/enable/b; type=string; label= Ma Constante

Sous-cat egories existantes : enable ` activer ou d Pour les constantes servant a esactiver les fonctions de base du gabarit. dims Pour les dimensions en tout genre telles que les pixels, les largeurs et hauteurs dimages, les cadres, etc.

248

5.4 Outils de d eveloppement

le

Constantes d enissant des chiers comme les images en arri` ere-plan, les polices galement sp de caract` ere, etc. ; dautres options concernant le chier sont e eci ees. Pour la typographie et ses constantes. ` rassembler les d Aide a enitions des couleurs ; toutefois, de nombreuses couleurs et leurs options sont aussi incluses dans dautres cat egories. Pour utiliser avec des liens ; typiquement, target.

typo color

links

language ` la langue. Options sp eciques a cheader, cheader_g, ctext, cimage, cbullets, ctable, cuploads, cmultimedia, cmailform, csearch, clogin, csplash, cmenu, cshortcut, clist, cscript, chtm l Ces sous-cat egories sont bas ees sur les e ements de contenu pr ed enis de TYPO3 tels que du texte, un en-t ete, une image, etc. Type de champ (type) type vous permet de sp ecier le type de champ et de d enir les options d edition pour linterface utilisateur du Constant Editor. int [low-high] tre sp Un nombre entier ; lintervalle des valeurs admises peut e eci e. Exemple : int [0-10] int+ color wrap Nombre entier positif. Code couleurs HTML. Permet d editer une enveloppe.

offset [L1,L2,...,L6] Liste de nombres entiers s epar es par des virgules ; vous pouvez sp ecier jusqu` a six param` etres entre crochets. Les param` etres par d efaut sont x,y. options [item1,item2, ...] l Champ de s election avec titres/valeurs, dans lequel les e ements sont s epar es par des virgules ; titre et valeur sont s epar es par =. Exemple : options [titre1=valeur1, titre2=valeur2] boolean [valeurvraie] ventuellement la valeur de true . La valeur Bool een ; vous pouvez sp ecier e par d efaut est 1. 249

5 TypoScript

comment Bool een ; s electionn e = , non-s electionn e = # . ` commenter du texte, et donc a ` d ` Ce type sert a esactiver du code TypoScript a laide dune constante. le [ext-list /IMAGE_EXT] ` s Sert a electionner les ressources des chiers ; il est possible denvoyer directement des chiers vers le serveur pour quils soient associ es au champ Resources de len` certains types de registrement gabarit. Vous pouvez restreindre cette s election a donn ees pr ecis. Pour ce faire, une liste de types de donn ees autoris es est sp eci ee dans la liste, par exemple [ttf] ou [txt,html,htm] (sans espace). Vous pouvez aussi entrer IMAGE_EXT. Dans ce cas les types de chier image par d efaut sont permis. string Champ dentr ee de texte. En-t ete et description (label) ` laide du type label vous pouvez sp A ecier un en-t ete et un texte descriptif, s epar e par ::
# cat=montexte/ctext/a; type=string; label= Texte: Le texte appara t sur la droite ... monTexteInput = Hello Wolrd!

Description des cat egories (TSConstantEditor) Vous pouvez aussi faire une description g en erale pour chaque cat egorie de constantes. ` laide dune capCela sav` ere utile, par exemple pour expliquer les gabarits standards a ture d ecran et dune description suppl ementaire. Les donn ees additionnelles sont d enies dans les constantes TLO TSConstantEditor. Cela ` des constantes donn vous permet dassigner des ic ones num eriques a ees et dint egrer une image g en eralement une capture d ecran. Notez que le TSConstantEditor est d eni dans le champ Constants du gabarit. Lutilisation des termes TLO , objet et propri et e dans le cas des constantes nest pas correct strictement parlant puisque les constantes ne sont pas des objets. Nous les utiliserons n eanmoins ici par facilit e. Exemple :
[Link] { header = Mon Texte description = Mon texte est une d emo // il contient ... bulletlist = el ement 1 // e l ement 2 // el ement 3. image = gfx/[Link] 1 = monTexteInput,Texte 2 = maPoliceTexte,Couleur }

` pr Nous r esumons a esent les propri et es du TSConstantEditor : header Type de donn ee : cha ne de caract` eres En-t ete de description ; afch e en majuscules. 250

5.4 Outils de d eveloppement

description Type de donn ee : cha ne de caract` eres ` la ligne se fait avec la commande //. Description du gabarit ; le passage a bulletlist Type de donn ee : cha ne de caract` eres ` puces ; les diff l Afche une liste a erents e ements sont s epar es par deux barres obliques (//). image Type de donn ee : image Vous pouvez ins erer une image pour illustrer les liens. Entrez les num eros des constantes tre enregistr d ecrites sur la gure et leur position dans le frontend. Limage doit e ee dans le r epertoire gfx/ du module Constant Editor (tstemplate_ceditor) ou int egr ee au champ des ressources de lenregistrement de gabarit.

Array, 1-20 Liste de noms de constantes Les ic ones num erot ees en rouge sont assign ees aux constantes reprises dans le Constant Editor via la liste num erique. Elles fonr le lien avec limage sp eci ee.

5.4.6 Panneau dAdministration


diteurs, mais fournit aussi de linformaLe Panneau dAdministration fournit des fonctions aux e tion au d eveloppeur TypoScript. Pendant la restitution du contenu, TSFE retrace le processus de restitution ; vous pouvez afcher les informations de d ebogage dans le panneau dadministration. ` la section 6 , les options suivantes Si le panneau dadministration est congur e conform ement a sont disponibles dans la zone TypoScript : Afcher larborescence Lorsque cette option est activ ee, le r esultat est afch e sous forme darbre. Afcher toutes les dates ` la restitution des e l Cette option donne le temps n ecessaire a ements de la page, en millisecondes. Afcher les messages Des explications suppl ementaires et des messages derreur sont indiqu es dans le log de la restitution, que vous activez avec cette option. Suivre la g en eration du rendu l Cette option donne de linformation sur la restitution des e ements de contenu. Le ` de linformation g ` des objets PAGE. r esultat est restreint a en erale et a Afcher le contenu Lorsque cette option est active, vous pouvez afcher le contenu g en er e. Ceci vous permet de voir le code HTML pour lobjet TS correspondant.
6 La

` la section 4.7 conguration du panneau dadministration est d ecrite a

251

5 TypoScript

Requ ete SELECT ` cette option, vous pouvez afcher les requ Gr ace a etes SQL et les analyser en utilisant linstruction SQL EXPLAIN. Avec lintroduction de la couche dabstraction DB dans la tait de toute fac version 3.6, cette option ne fonctionne plus, mais elle e on peu utilis ee dans la version 3.5. Forcer le rendu TS ` partir du cache. Si cette case est d ecoch ee, il est probable que la page sera charg ee a Ainsi, si vous d esirez tester votre gabarit TypoScript, vous devriez activer cette option. l Diff erents e ements du processus de restitution dans le Panneau dAdministration sont en couleurs. Les messages sont indiqu es en noir, les messages derreur en rouge et pr ec ed es l dune ic one, les e ements de contenu des chiers (gabarits HTML) en vert et le contenu g en er e ` lendroit en bleu. Les objets TS se trouvant dans le contenu g en er e sont afch es en rouge a correspondant, entour es par des crochets.
Figure 5.42: Zone TypoScript dans le Panneau dAdministration pour lafchage du processus de restitution de contenu dans le frontend

5.4.7 Import et export de pages TYPO3


TYPO3 fournit dans le menu contextuel, t3d Import and Export, une fonction relativement tre tr` simple qui peut e es utile au d eveloppeur, par exemple, pour importer et exporter des gabarits ou des chiers. Il est en outre possible dexporter des arborescences compl` etes avec leurs l e ements de contenu, dont les m edias directement int egr es comme des documents TYPO3 (chier t3d), et de les importer dans dautres applications TYPO3. 252

5.4 Outils de d eveloppement

Export t3d ` laide du menu contextuel Plus doptions. . . Exporter Lexport des enregistrements se fait a ` partir de laquelle lexport vers un .t3d. Dabord, vous s electionnez dans larborescence la page a est initi e. ` sp Le formulaire suivant sert a ecier la port ee de lexport qui peut s etendre de simples pages jusqu` a des arborescences des pages compl` etes.
Figure 5.43: Appel de lexport t3d ` partir du menu a contextuel

Congurez lexport dans la partie sup erieure du formulaire. Diff erentes propri et es et fonctionnalit es sont disponibles.
Figure 5.44: D etermination des propri et es dexport

253

5 TypoScript

ID de page ` partir de laquelle lexport est r ID de la page a ealis e. Arborescence ` exporter, s Larborescence a electionn ee via la page dinitiation de lexport et la profondeur des niveaux. Niveaux ` exporter dans le menu de s Sp eciez la profondeur des niveaux a election (commencez par la page de d emarrage s electionn ee). Include tables ` inclure dans Vous permet de d ecider du contenu des tables de bases de donn ees a lexport, contenu inclus dans la section de larborescence des pages consid er ees. Include relations to tables ` des enregistrements situ Si des enregistrements sont li es a es hors de larborescence des ` inclure. pages choisies, d enissez ici les tables a Use static relations for tables S electionnez les tables en plus des tables statiques pour lesquelles il ne faut pas changer les relations. Ce proc ed e a priorit e sur les tables reprises dans la section pr ec edente, Include relations to tables . Cest utile par exemple pour les tables sys languages ou les structures TemplaVoil` a, o` u le syst` eme de destination de limport peut contenir les m emes enregistrements pour ces tables alors que vous importez librement les pages et le contenu. Exclude elements Reprend ici la liste des enregistrements que vous avez exclus de limport dans la liste reprise dans la section Structure exporter. Gr ace au bouton Update, les congurations choisies sont appliqu ees. La structure des enregistrements choisis pour lexport est expos ee en d etail dans la zone inf erieure. Si des relations sont perdues, elles sont marqu ees par Lost relation. Si les d etails sont corrects, lexport d emarre avec le bouton Download export7 dans la section File & Preset du formulaire.

Import t3d ` partir du menu contextuel a ` Limport de donn ees via un document TYPO3 est lui aussi lanc ea laide du menu Plus doptions. . . Importer depuis un .t3d. Le point de d epart est la page ` partir de laquelle les donn dans larborescence des pages a ees sont int egr ees. Puisque limport via la page racine (globe) est impossible, vous pouvez d emarrer un import via nimporte quelle page, par exemple, et bouger ensuite larborescence des pages import ees.
7 Si vous rencontrez des difcult ` t es a el echarger, il faut savoir quun bogue dans Internet Explorer 5.5 tente de sauver la page dans le backend comme un t el echargement.

254

5.5 Gabarits standards (gabarits statiques)

Figure 5.45: Lancement de limport t3d via le menu contextuel

tre import Le document TYPO3 (.t3d), pour e e, doit se situer dans le r epertoire leadmin/. Vous pouvez transf erer directement un chier vers longlet Envoyer, de sorte quil soit s electionnable pour limport via le menu de s election. Le bouton Pr evisualiser montre une pr evisualisation ` importer. des enregistrements a
Figure 5.46: Interface dimport pour un document TYPO3

5.5 Gabarits standards (gabarits statiques)


Tout paquetage TYPO3 contient d ej` a dans la table static_template des enregistrements qui sont seulement lisibles dans le backend ; mais ces enregistrements ne sont pas directement modiables. Ces gabarits sont les gabarits standards bien connus et parfois appel es gabarits statiques. Vous pouvez visualiser les gabarits standards dans une liste gr ace au module Web Liste, par exemple en s electionnant la page racine (globe) dans larborescence des pages. Les gabarits standards fournis forment une biblioth` eque et sont utilisables pour vos propres galement quelques sites Web. Ils constituent des gabarits pour le site complet. Ils contiennent e 255
R ef erence

546011

5 TypoScript

l composants TypoScript de base tels que content (default), qui d enit lafchage des e ements de contenu et leur mise en forme.
Figure 5.47: Gabarits standards contenus dans linstallation basique TYPO3 tels quils sont repris dans le module Web Liste

Un certain nombre de gabarits sont marqu es de l etiquette [DEPRECIATED] qui signie quils sont consid er es comme anciens ou d epass es ; ils sont inclus dans la liste pour des raisons de r etrocompatibilit e. En particulier, la plupart des gabarits plugin.* sont devenus redondants depuis lintroduction du syst` eme dextensions, puisque les gabarits correspondants sont fournis avec les extensions. ` laide du champ Include Pour utiliser les gabarits, ins erez-les dans lenregistrement de gabarit a static.
Figure 5.48: Insertion dun gabarit standard

Comme nous lavons d ej` a mentionn e, les extensions comprennent leurs propres gabarits. Ainsi, il est possible quelles offrent des gabarits standards que lon peut s electionner dans lenregis-

256

5.5 Gabarits standards (gabarits statiques)

trement de gabarit avec Include static (from extensions). Ces gabarits assurent le m eme r ole que ceux disponibles dans Include static. De cette mani` ere, m eme des gabarits d enissant lensemble dun site Web sont disponibles. Citons par exemple le gabarit Green impl ement e ` partir du TER. comme une extension et que vous pouvez t el echarger a Les gabarits standards sont divis es en diff erentes cat egories selon leur champ dapplication et un pr exe correspondant leur est assign e (templates, plugin, contenu, . . .). Pour continuer, voici une vue densemble des diff erentes cat egories.

5.5.1 content (default)


Ce gabarit standard est le plus utilis e. En g en eral, il ne forme pas seulement la base du site galement le traitement et la repr Web et celle dautres gabarits, mais il d enit e esentation de base du contenu publi e dans le frontend. Il applique les objets de contenu aux enregistrements correspondants de la table tt_content, selon le type de contenu sp eci e par le r edacteur (le champ CType de la table tt_content). Ce gabarit se base sur [Link] qui d enit en d etail les diff erents types de contenu. De plus, [Link] et [Link].gfx1 sont aussi inclus en tant que gabarits de base. Le gabarit reste au centre de TYPO3, m eme si des d eveloppements r ecents ont gagn e en importance. content (default) nutilise pas seulement le TypoScript pour lafchage, mais aussi en tant que logique de programmation ce qui nest en fait pas la t ache centrale du TypoScript. Mais les exigences envers le TypoScript ont chang e, en particulier par ladoption croissante du ` des sites Internet aux moins CSS pour la mise en page et par le besoin de favoriser lacc` es a valides. Il est pr evu que TYPOSCRIPT soit all eg e en transf erant certaines fonctionnalit es au CSS ` des extensions. Ce concept est mis en pratique dans le gabarit css_styled_content dont et a lextension porte le m eme nom. De nombreux gabarits standards sont juste des composants de code int egr es dans un contexte plus large. Ces liens entre les gabarits sont visibles dans le Template Analyzer.
Figure 5.49: content (default) et les gabarits de base int egr es dans le Template Analyzer

5.5.2 styles.*
[Link] (default) [Link] [Link] [Link] [Link] [Link] (EXT1) [Link] [Link].gfx1 styles.gmenu_layer.green 257

5 TypoScript

[Link] (EXT1) [Link] [Link] ` dautres gabarits standards. Un Cette cat egorie de gabarit fournit des fragments de code a grand nombre de ces gabarits est utilis e dans les gabarits de site (template.*) qui se dis` leur sufxe, par exemple [Link] et [Link]. Dautres, tinguent gr ace a comme [Link] et [Link].gfx1, sont utilis es par le gabarit content (default). t Les composants ont e e stock es dans des gabarits distincts pour que vous puissiez les r eutiliser dans dautres gabarits standards. Ils fournissent des objets de page pr econgur es tels que des menus, des plans de sites, des en-t etes et des logos. [Link] (default) Le gabarit [Link] (default) m erite une attention particuli` ere ; il contient une s election ` utiliser dans dautres gabarits, en particulier pour la restitution dobjets TypoScript pr ed enis a de contenu de base dans le gabarit content (default). L el ement le plus connu de ce gabarit l ` est [Link], souvent utilis e en pratique, qui s electionne les e ements de contenu a afcher entr es dans le backend via la colonne Normal :
[Link] = CONTENT [Link] { table = tt_content [Link] = sorting [Link] = colPos=0 [Link] = sys_language_uid }

Vous n etes jamais oblig e dactiver s epar ement le gabarit : il est int egr e automatiquement si vous utilisiez le gabarit content (default). De nombreux param` etres sont congur es par des constantes dans ce gabarit (module : Gabarit Constant Editor Content).

5.5.3 cSet.*
cSet (default) t Cette option a e e introduite pour am eliorer lefcacit e lors de la cr eation de sites Web ; elle t continue d etre souvent utilis ee en pratique, m eme si elle a e e remplac ee en grande partie par cSet stylesheet, et si des concepts r ecents tels que lextension CSS styled content la rendent compl` etement superue. Le gabarit contient seulement des d enitions de constantes. Lid ee centrale du gabarit est de rassembler les d enitions de [Link] et de rendre disponibles de nouvelles constantes globales. Cela permet, entre autres, de d enir en une entr ee la fonte pour tous les objets de contenu. Les d enitions rassembl ees de cette fac on sont facilement modiables dans le Constant Editor, dans la cat egorie CSET. cSet stylesheet Il sagit dune alternative moderne : ici, laccent est plac e sur lutilisation de feuilles de style en cascade (CSS) ins er ees dans un chier s epar e (media/scripts/[Link]). Vous 258

5.5 Gabarits standards (gabarits statiques)

remplacez les valeurs par d efaut en en ins erant dautres dans un chier que vous cr eez et dont vous sp eciez le nom dans le champ correspondant du Constant Editor.
# Exemple dentr ee dans la section Constants [Link] = fileadmin/styles/[Link]

Ce gabarit ne contient pas que des constantes, comme cest le cas de cSet (default), mais il galement plusieurs param` change e etres dans la conguration. En particulier, les balises <font> sont supprim ees, les en-t etes de section remplac es par des en-t etes natifs HTML (h1-h6) et <br/> remplac e par <p> </p>.

5.5.4 frameset;*
frameset; top-page-right frameset; top-page frameset; top-left-page frameset; top / left-page frameset; page-bottom frameset; left-page frameset (+); top / left-adr-page Ces mod` eles pour les sites Web bas es sur des cadres (frame) sont utilis es en partie dans les ` la mise en page a ` r gabarits des sites d ecrits ci-apr` es. Le nom fait r ef erence a ealiser ; par exemple, frameset ; top-page-right signie : un cadre au-dessus, un cadre pour le contenu ` droite. La taille des cadres est x au centre (page) et un cadre a ee par des constantes. Certains gabarits de cadres peuvent sembo ter. Le gabarit avec (+) ne g en` ere pas une page enti` ere mais ` un autre gabarit de type frameset. Ces gabarits ont une valeur didactique sert dextension a car ils facilitent la compr ehension de la manipulation de cadres en TypoScript. En pratique toutefois, la mise en page utilis ee est rarement celle couverte par ces mod` eles.

5.5.5 template;*
` lemploi, facultatifs pour lafchage Les gabarits contenant ce pr exe sont des gabarits pr ets a du site Web. Ils sont bas es sur le gabarit standard content (default) pour la restitution du contenu. V eriez que le gabarit standard d esir e est au d ebut de la liste des gabarits standards inclus. Vous pouvez faire quelques ajustements tr` es facilement avec le Constant Editor. Ces gabarits sont id eaux non seulement pour les exemples mais aussi pour les sites Web qui tre mis en ligne rapidement. Les exemples sont relativement anciens et sont bas doivent e es soit sur des gabarits TypoScript purs, soit sur lint egration de gabarits HTML ou encore sur des cadres. Un groupe de projet sest form e au sein de la communaut e TYPO3, avec pour but de cr eer de nouveaux gabarits munis dune charte graphique moderne et r epondant aux normes daccessibilit e. Ces gabarits seront alors d eplac es dans une extension. 259

5 TypoScript

Figure 5.50: Site Web bas e sur certains gabarits standards

` lemploi actuels et leur application : Les gabarits pr ets a TU TU est un gabarit sans cadre. Vous pouvez pr eciser une image den-t ete et la couleur darri` ere-plan de la page. Le menu graphique sur le c ot e gauche comprend deux ni l veaux ; la couleur est modi ee lorsque la souris est positionn ee sur un e ement du menu l ou pour les e ements de menu actifs. Vous pouvez ajouter des images en arri` ere-plan l des e ements du menu et d enir leur police de caract` ere TrueType, leur couleur et la taille de texte ainsi que la marge. Il y a aussi une option pour ins erer des graphiques avant et apr` es le menu (les fameux [Link]). Ce gabarit se base sur des cadres. Le cadre sup erieur contient un menu graphique pour le premier niveau, le cadre de gauche un menu graphique pour le second niveau. Le l tats pour troisi` eme cadre contient les e ements de contenu de la page. Il existe trois e l ` les e ements de menu (images et couleurs en arri` ere-plan, couleur du texte, etc.), a savoir Normal, Rollover et Active. Si vous le d esirez, vous pouvez d enir une image en arri` ere-plan de chaque cadre et ajouter un graphique en dessous du menu de gauche.

RE

260

5.5 Gabarits standards (gabarits statiques)

NEWSLETTER Ce gabarit sert aux pages sans menu. Comme son nom lindique, il est pr evu pour en` laide de lextension Direct voyer des bulletins dinformation sous forme demail HTML a Mail module. Le chier gabarit HTML sur lequel il est bas e d etermine la mise en page. Vous pouvez choisir davoir une ou deux colonnes. Le logo dans len-t ete nest pas d eni dans ce gabarit HTML mais il est congur e directement via TypoScript. HYPER HYPER est un gabarit bas e sur des cadres compos es dun en-t ete avec un menu de ` une colonne pour les e l couches DHTML et sur un cadre a ements de contenu. Le titre de la page est afch e dans une image et vous pouvez sp ecier un logo pour la section den-t ete. Lapparence des pages est param etr ee par les feuilles de style. GREEN l Ce gabarit dune page se base sur un gabarit HTML. Cela signie que tous les e ements tels que le menu principal, les sous-menus, limage den-t ete, le logo, le titre de la page et son contenu sont plac es dans ce chier avec les marqueurs correspondants. Vous pouvez modier le gabarit HTML comme vous le voulez. Le menu est un menu popup DHTML dans lequel le premier niveau est de type graphique et le second de type texte. tre d En option, un autre menu de texte peut e eni en troisi` eme niveau. Vous pouvez galement mettre le titre de la page en dec ` du menu. Les images en arri` e a ere-plan des tableaux et de leurs cellules sont d enies avec TypoScript. GLCK ` trois colonnes. Le premier niveau du menu, Ce gabarit standard est bas e sur une table a de type texte, est dans la colonne de gauche, le second niveau dans la colonne de tre d droite. Chaque colonne est optionnelle et peut e esactiv ee en utilisant TypoScript. l Vous avez la possibilit e de d enir un logo, une image en arri` ere-plan et des e ements de contenu pour chaque colonne. Vous pouvez ajuster en d etail les marges, les largeurs et les alignements. Larri` ere-plan de la page et sa couleur sont aussi modiables. Ce gabarit est enti` erement congur e par TypoScript. FIRST FIRST est un gabarit bas e sur des cadres dans lequel les cadres Menu, Bottom et Page frame sont embo t es dans un autre cadre qui centre la page dans le navigateur. Les menus sont dispos es graphiquement sur deux niveaux. Dans le cadre Bottom se trouve un menu g en eral dun r epertoire. D eterminez la couleur darri` ere-plan et les dimensions ventuellement une nouvelle colonne avec des actualit des trois cadres ou int egrez e es ` une page sp associ ees a ecique. CrCPH CrCPH est un gabarit dune page bas e sur un gabarit HTML. TypoScript est moins utilis e ditant le chier ici. Vous pouvez modier de grandes parties de la mise en page en e diteur HTML pr gabarit avec votre e ef er e. Les deux menus textuels sont aussi d enis directement dans le gabarit HTML. CANDIDATE CANDIDATE est un gabarit dune page contenant deux colonnes de contenu et un menu ` un niveau, situ textuel a e en dessous de limage den-t ete dans la colonne principale. Le titre de la page (ou le sous-titre sil en existe un) appara t sur limage den-t ete, mais 261

5 TypoScript

galement le d vous pouvez e esactiver. Vous pouvez aussi d esactiver la colonne de droite ` gauche. Il vous est aussi possible de placer limage den-t ou lafcher plut ot a ete sur les deux colonnes ou de changer cette image dans une sous-partie du site Web. La premi` ere image est afch ee pour toute la section su site correspondant aux pages de premier niveau. La largeur et la couleur de lespace entre les deux colonnes sont sp eci ees ou ` z r eduites a ero. BUSINESS BUSINESS est un gabarit bas e sur des cadres avec une simple mise en page en deux colonnes. Le menu se trouve dans le cadre de gauche et le contenu de la page dans celui de droite. Vous pouvez d enir les images en arri` ere-plan pour chaque cadre et choisir la largeur pour le cadre de gauche. Le menu est textuel et contient deux niveaux. Les balises de fontes sont ajustables dans les deux niveaux. Au deuxi` eme niveau, vous avez l la possibilit e de placer des graphiques devant chaque e ement de menu, qui peuvent ` leur niveau. Dans len-t changer lorsque la souris est plac ee a ete de la page, le titre des ` un niveau sup ` la page pages a erieur est indiqu e en reprenant deux niveaux sup erieurs a courante ; vous pouvez d enir, comme pour les menus, les balises de fontes pour le titre de cette page. Il est possible de tracer une ligne en dessous du titre de la page et den d enir la couleur. MM MM est un gabarit dune page contenant dans la zone den-t ete un menu bas e sur des images. Vous pouvez d enir des images en arri` ere-plan et la couleur de celui-ci, ainsi l que la couleur et la largeur des bords. De plus, vous pouvez sp ecier les e ements de ventuelle et d contenu pour une seconde colonne e eterminer la couleur et les images de son arri` ere-plan, de m eme que dautres en-t etes standards et propri et es du texte. Vous pouvez ajouter un d ecalage entre les deux colonnes et choisir librement les images et la couleur de larri` ere-plan. Pour le menu, les options de conguration suivantes existent : couleur de larri` ere-plan, fonte TrueType, couleur de texte, taille et espacement de limage. BUG est un gabarit compos e de cadres. Trois cadres sont disponibles : un au-dessus de ` gauche et un a ` droite. Vous pouvez congurer la taille et la couleur de la page, un a larri` ere-plan pour tous les cadres. Vous pouvez inclure un graphique dans le cadre du dessus et pr eciser lapparence du menu graphique dans le cadre de gauche : image en l arri` ere-plan pour lensemble du menu et pour les e ements de menus, effets de survol (pour la couleur du texte et/ou des graphiques avant ou apr` es le titre de la page), polices de caract` ere TrueType, couleurs de texte, tailles, ombrages et espacements.

BUG

5.5.6 plugin.*
plugin.tt_rating [DEPRECIATED] ... plugin.tt_board_list [DEPRECIATED] [Link] [DEPRECIATED] plugin.postit1 262

5.5 Gabarits standards (gabarits statiques)

[Link] [DEPRECIATED] [Link].fe_users [DEPRECIATED] [Link] [DEPRECIATED] [Link] (89) [Link] (96) [Link] (97) [Link] (98) [Link] (99) [Link] (95) l Les plugins sont responsables de lafchage et des caract eristiques des e ements de contenu sp eciques dans le frontend. Ils contiennent normalement leurs propres fonctions PHP. Les gabarits standards avec le pr exe plugin. se divisent en deux groupes. Le premier groupe reprend l des e ements de contenu qui seront ins er es dans le frontend lors du processus de restitution de contenu, par exemple plugin.tt_news ou [Link].fe_users. Le second groupe ([Link].*) g en` ere des pages compl` etes qui sont trait ees et afch ees diff eremment des pages de contenu normales. Selon quil sagit dune version imprim ee, dune version texte, dune version XML ou dune version WAP pour les t el ephones mobiles, le contenu est afch e diff eremment. Alors que la version pour limpression est impl ement ee uniquement avec TypoScript, cest un ` leur capacit ` aftout autre moteur de restitution qui est utilis e pour le plugin XML. Gr ace a ea cher du contenu dans plusieurs formats diff erents, la fonctionnalit e des gabarits [Link]. volue vers la publication cross-media . e Presque tous les plugins du premier groupe rec oivent l etiquette DEPRECIATED car lors de t lintroduction de lExtension Manager, tous les gabarits ont e e d eplac es vers les extensions correspondantes. Ces gabarits ne devraient pas etre utilis es pour de nouveaux projets. Mais ils sont toujours dans la liste des gabarits standards, pour des raisons de r etrocompatibilit e.

5.5.7 temp.*
temp.tt_board (shared) [DEPRECIATED] Les gabarits temp sont des gabarits daide qui servent de composants ou d extraits de ` dautres gabarits. temp.tt_board (shared) est contenu dans la fonction du plugin code a ` deux autres gabarits : plugin.tt_board_list et plugin.tt_board_tree. forum et sert de base a Il se charge de lafchage g en eral et de la conguration du forum TYPO3. Les deux autres gabarits du forum qui afchent des listes et des arborescences utilisent les param` etres de base t de ce gabarit daide. Les trois gabarits sont d eclass es car ils ont e e d eplac es dans lextension Message board, twin mode (tt_board).

5.5.8 content.tt_*
content.tt_address [DEPRECIATED] Cette m ethode est utilis ee pour afcher directement les enregistrements de tables, ici tt_address. Lafchage des adresses ne requiert pas de plugin avec fonctionnalit e PHP, mais est mis t en forme par de simples objets TypoScript. Ce plugin est aussi d eclass e car il a e e remplac e par le gabarit de lextension Address list (tt_address). 263

5 TypoScript

5.5.9 (example)
records (example) De m eme que le gabarit content.tt_address, ce gabarit dexemple montre comment le r esultat tendues (tt_address, tt_links, tt_news, etc.) peut e tre restitu du contenu des tables e e simplement avec TypoScript. Vous ne devriez pas lutiliser dans vos projets car il sert dexemple.

5.5.10 language.*
[Link] (norwegian) [DEPRECIATED] [Link] (dutch) [DEPRECIATED] [Link] (french) [DEPRECIATED] [Link] (danish) [DEPRECIATED] [Link] (german) [DEPRECIATED] ` congurer diff Les gabarits de langue servent a erentes langues et constituent un ancien l e ement caract eristique de TYPO3. Ils sont presque devenus inutiles et ce, pas uniquement t parce quils ont e e d eplac es dans une extension. M eme dans ces extensions, ils ne sont plus ` jour, car le contr ` pr mis a ole des langues est a esent enregistr e dans des chiers pr ecis de cer` la traduction des plutaines extensions. Dans les anciennes versions de TYPO3, ils servaient a gins et de certains objets de contenu comme les formulaires didentication ou de recherche ; ils sont toujours pr esents pour la r etrocompatibilit e.

5.6 Les bases de la mise en page Concepts de gabarit


tes confront Lorsque vous d eveloppez une application Web avec TYPO3, vous e e au choix de ` utiliser. Selon vos connaissances dans le d la m ethode a eveloppement de sites Web et les tre bas exigences du projet ou du client, vous allez d ecider si la mise en page doit e ee sur des tables HTML ou des feuilles de style en cascade (CSS), si vous utilisez des cadres, . . .Vous devriez prendre ces d ecisions importantes ind ependamment de TYPO3, puisque toutes les options sont r ealisables avec ce CMS. ` l ` utiliser pour r A etape suivante, vous d ecidez de la m ethode a epondre aux exigence de la l mise en page et pour ins erer les e ements de contenu par TYPO3. Le fait quil y ait plusieurs ` lesprit une vue densemble et de faire le bon m ethodes emp eche quelque peu de garder a choix lors de votre premi` ere utilisation de TYPO3. Les m ethodes de gabarit sont bri` evement caract eris ees ci-dessous ; ensuite, nous pr esenterons chaque mise en pratique.

5.6.1 Gabarits standards (gabarits statiques)


` lemploi pour les sites Web, d TYPO3 vous fournit des gabarits complets pr ets a enomm es gabarits standards . Leur apparence et leurs fonctionnalit es sont d ej` a congur ees mais peuvent tre ajust e ees dans une certaine mesure par des constantes. Ces gabarits sont consid er es avant ` travailler avec TypoScript, mais ils tout comme de tr` es bonnes r ef erences pour apprendre a tre aussi utilis peuvent bien entendu e es en production. Si vous devez respecter la charte gra` des exigences pr phique d enie au sein de lentreprise ou r epondre a ecises, le d eveloppeur atteindra rapidement les limites de la param etrisation des gabarits standards. 264

5.6 Les bases de la mise en page Concepts de gabarit

5.6.2 Gabarits TypoScript purs


` laide de TypoScript, sans La mise en page de base dun site Web est enti` erement d etermin ee a que vous deviez utiliser de chiers HTML externes. Cette m ethode vous permet de travailler de deux mani` eres : Il est possible de sp ecier rapidement une pr esentation sous forme de tableau en utilisant le cObject CTABLE qui divise un site Web en zones telles que topMenu, leftMenu, rightMenu, bottomMenu et content-cell. l La mise en page est enti` erement contr olable via CSS en enveloppant tous les e ements de la page avec la balise HTML <div>. Cette technique est id eale pour impl ementer des sites Web r epondant aux normes daccessibilit e. ` pr tre Les mises en page contr ol ees par des tables ou des feuilles de style peuvent a esent e impl ement ees par lint egration de gabarits HTML. Les gabarits TypoScript purs ont n eanmoins certains avantages : Toute linformation qui contr ole lafchage se trouve en un seul endroit et elle nest pas stock ee dans des chiers HTML externes. Cela apporte plus de clart e et permet un contr ole complet. Vous pouvez construire le code HTML de mani` ere modulaire en utilisant les champs Con` certaines sections stants et Setup de TypoScript. Cela facilite les modications r eserv ees a dun site. tre mis en cascade alors que les gabarits HTML ne le peuvent Les gabarits TS peuvent e ` dautres pas. Vous pouvez ainsi embo ter un gabarit de mise en page pour servir de base a gabarits, ou pour surcharger des propri et es de gabarits dans une section de larborescence. ` peine n Lutilisation dun gabarit HTML externe est devenue a ecessaire (surtout pour les mises en page impl ement ees via CSS et qui nutilisent pas de tables), cest-` a-dire quelle ne pr esente aucun avantage, puisque les zones de la disposition de base sont seulement marqu ees des balises <div> et que tout le reste est contr ol e via CSS.

5.6.3 Gabarits TypoScript et HTML


M eme si les m ethodes utilisant des gabarits TypoScript purs sont extr emement exibles et donc efcaces, les maquettes HTML sont de plus en plus utilis ees de par leur simplicit e. Pour cette raison, les d eveloppeurs ont lopportunit e dint egrer des gabarits HTML externes via le ` remplacer des zones du gabarit HTML, signal cObject TEMPLATE. Le concept consiste a ees par l des marqueurs (subparts et marks), par des e ements de contenu de la base de donn ees. Les avantages de lint egration de gabarits HTML sont les suivants : Du point de vue dun d eveloppeur de sites Web, ces gabarits sont impl ement es tr` es rapidement avec un temps de pr eparation tr` es court. diteurs externes. Les mises en page de base se font avec des e Pour un travail d equipe, les graphistes et les d eveloppeurs TYPO3 peuvent travailler en t parall` ele si les zones de contenu et les fonctionnalit es ont e e pr ecis ees d` es le d epart. 265

5 TypoScript

5.6.4 Template Auto-Parser


R ef erence

591606

TYPO3 ne serait pas TYPO3 sil nessayait pas dam eliorer et de simplier les proc edures d edition. Cest pr ecis ement lobjectif de lextension Template Auto-Parser. Son utilisation permet lana` inclure pour marquer automatiquement les sous-parties lyse syntaxique des gabarits HTML a l (subparts) correspondantes. Elles sont identi ees par lID des e ements HTML tels que <div>, span et td. En outre, tous les chemins des feuilles de style et des images du gabarit HTML sont adapt es pour les faire pointer dans le bon dossier du syst` eme de chiers de leadmin/. De la ` la section 5.9.2 ainsi que documentation d etaill ee sur le Template Auto-Parser est fournie a dans le didacticiel Modern Template Building, Part 1 (voir la r ef erence). Les avantages et les d esavantages du Gabarit Auto-Analyseur sont les suivants : ` des agences et a ` des d La m ethode sadresse principalement a eveloppeurs Web dans le cadre de lint egration graphique dune maquette HTML. Les r esultats sont rapides car on ` la main les marqueurs subparts. Mais les sentiments subjectifs du ne doit pas ajouter a d eveloppeur TYPO3 sont que le Template Auto-Parser prend dans une certaine mesure tout le contr ole du processus. chang Si les r oles sont e es lors du d eveloppement, il ny a pas de risque que le graphiste supprime accidentellement les marqueurs subparts dans le gabarit HTML.

5.6.5 TemplaVoil` a
R ef erence

003992

` . Il sagit juste La m ethode dint egration de gabarit la plus r ecente est appel ee TemplaVoila dune extension (TemplaVoil` a !) qui est apparue dans le contexte dun projet assez important ` l pour le groupe franc ais Dassault Syst` emes. Ce projet en est toujours pour linstant a etape tre accomplis. Mais cela vaut tout de alpha et de nombreux d eveloppements doivent encore e ` ce concept et a ` ses perspectives, au moins pour le comparer a ` m eme la peine de jeter un il a dautres solutions. TemplaVoil` a permet dimpl ementer le graphisme en quelques minutes (au lieu de quelques jours) pourvu quun gabarit HTML soit disponible. La zone de contenu de la page est divis ee en zones pouvant contenir diff erents formats d el ements de contenu. Cette technique remplace lorganisation de contenu en colonnes utilis ee dans TYPO3. Dans ce but, une nouvelle option ` la liste d vient de sajouter a ej` a tr` es longue des options pour la gestion des gabarits. Elle fournit l une interface graphique au d eveloppeur pour la d enition graphique des e ements de contenu en s electionnant les chiers de graphisme HTML. Les avantages de TemplaVoil` a sont les suivants : Cette approche rend la structure et la composition des blocs et des zones de contenu plus exibles, avec tous les avantages dun CMS et du contr ole extensif habituel du graphisme. l ` laide de gabarits et De nouveaux e ements de contenu peuvent sajouter tr` es rapidement a tre utilis e es imm ediatement sans devoir les programmer. Vous pouvez d enir des r` egles de contr ole pour d eterminer les combinaisons possibles des l e ements de contenu. taient TemplaVoil` a en est toujours au stade de d eveloppement. Des concepts techniques, qui e ` lorganisation du contenu via des colonnes, doivent encore jusqu` a maintenant li es de pr` es a tre impl e ement es.

266

5.7 Restitution du contenu

Mais TemplaVoil` a promet de pr esenter des avantages consid erables dans le futur. Le concept ` la section 5.13.3. est illustr e plus en d etail a tat actuel au Nous renvoyons tous ceux qui veulent essayer dutiliser TemplaVoil` a dans son e didacticiel tr` es d etaill e Futuristic Template Building .

5.7 Restitution du contenu


Ind ependamment de la mani` ere dont vous avez impl ement e la mise en page de base, il y a diff erentes possibilit es pour la restitution du contenu. Les m ethodes de restitution dans le ` lHTML. frontend ne sont pas restreintes a Le contenu peut safcher comme du simple texte ou du XML. Mais m eme lHTML a chang e avec le temps de sorte que XHTML et accessibilit e sont des mots-cl es de nos jours. TYPO3 offre plusieurs solutions et vous pouvez en d evelopper dautres vous-m eme. Evidem tre omise ment, la mise en page de base doit correspondre au format du contenu et doit e lorsque besoin est (par exemple avec du texte pur). An dacqu erir une compr ehension de base de la restitution de contenu, nous devons revenir en arri` ere. Comme vous le savez d ej` a, TypoScript nest pas un langage de programmation ; il ` d ` appeler et a ` d sert plut ot a eterminer lordre du traitement des fonctions PHP a eterminer leurs param` etres. Si vous d enissez un objet de type TEXT, la fonction du m eme nom (dans ce cas), TEXT(), situ ee dans le script PHP tslib/class.tslib_content.php, est appel ee pendant le traitement du champ Setup de TypoScript, et le r esultat correspondant est afch e. Les fonctions de t ` un moment o` restitution contenues dans le script ont e e d evelopp ees a u lutilisation de CSS tait impensable, car soit les navigateurs ne supportaient pas du tout CSS, soit ceux-ci e taient e volution cerinutilisables car limpl ementation comportait trop derreurs. Il y a donc eu une e volution qui nest pas encore termin taine dans les concepts de restitution en TYPO3, e ee, et qui continuera certainement tant que la technologie du Web changera. Les diff erentes variations dans la restitution HTML sont d enies dans les gabarits standards suivants, qui vous sont d ej` a familiers : content (default) cSet Stylesheet css_styled_content content (default) est le plus ancien gabarit de restitution de contenu. Il utilise des balises <font> pour lafchage. Le gabarit cSet stylesheet constitue une transition dans la restitution avec CSS en red enissant purement et simplement les valeurs de content (default) de sorte que plus aucune balise <font> nest utilis ee. N eanmoins, les fonctions de la classe ` des class.tslib_content.php sont utilis ees pour la restitution, en recourant fr equemment a ` dautres techniques quil serait plus judicieux dimpl tables pour la disposition et a ementer avec t galement CSS. Lextension CSS styled content a e e d evelopp ee pour cette raison. Elle utilise e les fonctions de restitution de class.tslib_content.php, mais remplace certaines fonctions par les siennes. Le d eveloppement de CSS styled content nest pas encore termin e, mais vous pouvez d ej` a utiliser cette extension pour vos propres projets. 267

5 TypoScript

En plus de lafchage HTML, TYPO3 offre plusieurs autres formats pr ed enis utilisables pour les gabarits standards suivants : [Link] (89) [Link] (96) [Link] (97) [Link] (98) [Link] (99) [Link] Les noms des gabarits donnent d ej` a quelques indications sur les formats quils g en` erent. Leurs propres scripts sont souvent utilis es pour lafchage et vous nutiliserez g en eralement plus les fonctions de la classe class.tslib_content.php.

5.8 Changer de gabarits avec type/typeNum


Il est souvent int eressant dafcher du contenu dans le frontend sous diff erents formats ou diff erentes versions. Un exemple classique est le format pour limpression. Mais il est aussi ` dautres sites Web avec du contenu local via XML . possible de fournir du contenu a tre utilis An que diff erentes versions dune page puissent e ees en m eme temps, TYPO3 fournit un syst` eme supportant simultan ement plusieurs gabarits. Lors de la restitution, un seul gabarit est s electionn e. ` comprendre ce concept : Le gabarit TypoScript suivant devrait vous aider a
[Link] = TEXT [Link] = HELLO WORLD! [Link] = <h1>|</h1> page = PAGE [Link] = 0 page.10 = COA page.10 { 10 = IMAGE [Link] = media/uploads/[Link] 20 < [Link] } plaintext = PAGE [Link] = 99 [Link] = 1 plaintext.10 = COA [Link] = 1 plaintext.10 { 10 < [Link] }

l ` afcher (HELLO WORLD !) sont d ` laide de lobjet [Link] e ements de contenu a enis a l tent utilis e dans les deux congurations de page page et plaintext pour rendre les e ements de contenu disponibles. Comme nous le verrons plus tard, cest [Link] qui est g e l n eralement utilis e pour r ecup erer les e ements de contenu dans la base de donn ees. 268

5.9 Cr eation de gabarits TypoScript

Ainsi, avec page et plaintext, deux gabarits existent pour lafchage de la page. page d enit ` savoir lafchage du lafchage HTML classique et contient aussi une mise en page de base, a logo TYPO3 avant le contenu proprement dit. La sortie HTML (abr eg ee) suivante est g en er ee dans le frontend :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>test plaintext</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="generator" content="TYPO3 3.8 CMS" /> </head> <body bgcolor="#FFFFFF"> <img src="media/uploads/[Link]" width="186" height="43" border="0" alt="" title="" /><h1>HELLO WORLD!</h1> </body> </html>

Dautre part, le gabarit plaintext devrait afcher du texte normal sans balises HTML. Il faut savoir que TYPO3 offre une meilleure option dafchage de texte avec le gabarit standard [Link] (99), et que ce gabarit est utilis e ici uniquement en guise dexemple. Comme vous le voyez, la mise en page est diff erente (pas de logo). De plus, [Link]=1 est congur e pour lobjet PAGE, ce qui a pour effet de bloquer lafchage de len` [Link]=1, tout le code HTML est supprim l t ete HTML, et gr ace a e des e ements s dans lobjet COA. Ce gabarit ne g de contenu cr ee en` ere donc r eellement que le texte HELLO WORLD!. Mais comment peut-on s electionner le gabarit plaintext ? La solution r eside dans les valeurs typeNum.
[Link] = 0 [Link] = 99

` lURL (par Si vous appelez la page dans le frontend et que vous ajoutez le param` etre type=99 a exemple [Link] TYPO3 choisit le gabarit ad hoc, cest` -dire celui pour lequel la valeur 99 est assign ` la propri a ee a et e typeNum. Ce faisant, toutes les variations dans le r esultat sont utilisables. Le m eme m ecanisme sapplique aux cadres. Cette ` la section 5.12. question est examin ee plus en d etail a Les nombres mentionn es entre parenth` eses dans les gabarits standards [Link].* sont les valeurs typeNum utilis ees.

5.9 Cr eation de gabarits TypoScript


tabli les fondations de lutilisation des gabarits et de TypoMaintenant que nous avons e Script, nous pouvons exposer en pratique le d eveloppement des gabarits dun site. Pour ce 269

5 TypoScript

t faire, nous utiliserons le sc enario BT3 qui a d ej` ae e congur e au chapitre 3.10. Nous allons ` pr ` a esent donner une apparence au frontend en appliquant un sc enario. Nous utiliserons a ` notre disposition dans lexemple pour illustrer les possibilit cet effet les diff erents sites a es du t d eveloppement de gabarits. Un gabarit HTML a e e fourni par le graphiste pour la mise en page bauche des fonctionnalit ` int de base. Il comprend d ej` a une structure de base et une e es a egrer.
Figure 5.51: Le gabarit graphique

l La page contient plusieurs e ements : 1. 2. 3. 4. 5. 6. 7.


R ef erence

Dans len-t ete de lapplication, un menu rootline montre le chemin de la page courante en partant de la page racine ad equate. Un lien permet dobtenir la version imprimable. Len-t ete contient le logo et des images qui changent en fonction du titre de la page et de lendroit o` u on se trouve dans le site. En dessous se trouve la navigation sous forme dun menu horizontal. l Les e ements de navigation de niveau inf erieur et ceux du menu m eta sont situ es dans une colonne sur la gauche. La zone du contenu de la page est plac ee au milieu, avec une possibilit e dextension vers le bas de la page. En option, des zones du site peuvent afcher des informations suppl ementaires ou des actualit es, dans une colonne sur la droite. Pour terminer, il y a un pied de page avec, par exemple, un sigle copyright.

821706

Si vous voulez travailler sur les exemples, t el echargez les gabarits et les ressources n ecessaires sous forme de documents TYPO3 (t3d) et dune archive tar via la r ef erence ci-contre et int egrezles dans votre application.

270

5.9 Cr eation de gabarits TypoScript

` port Gardez TSref a ee de main, ou ouvrez lassistant TS dans le backend (cf. section 5.4.2) : il ` travers les d vous permettra de naviguer commod ement a enitions dobjets. Stucture des gabarits tre complet en abordant les exemples et vous fournir du mat Pour e eriel pour les reconstituer, les gabarits sont construits de mani` ere tr` es modulaire. Nous avons utilis e ici des gabarits en cascade. Plusieurs composantes des fonctions sont d evelopp ees graduellement et int egr ees ` des gabarits parents. Cela vous permet de travailler efcacement et dutiliser les gabarits a plusieurs fois dans diff erents exemples. Les gabarits en cascade sont obtenus de deux mani` eres diff erentes : ` un autre gabarit a ` laide de Include basis Traditionnellement, des gabarits sont int egr es a t template. Cette proc edure a aussi e e utilis ee pour les gabarits standards fournis par TYPO3. Il est aussi possible dembo ter des gabarits via des zones de page, cest-` a-dire de placer un gabarit sur une page, et donc de lactiver de ce fait automatiquement. Ce proc ed e est utilis e craser des valeurs pour des parties pr soit pour e ecises du site Web, soit pour congurer une fonctionnalit e sp ecique pour ces parties. ` partir de la page On obtient une vue densemble des gabarits r epartis dans une application a ` c racine (cliquez sur le nom de votre installation situ ea ot e du globe et choisissez le module Web Gabarit). Si vous avez reconstitu e tous les exemples, votre r esultat devrait ressembler ` la gure suivante. a
Figure 5.52: Vue densemble du ` partir de la gabarit a page racine

271

5 TypoScript

Nous avons d eni le titre (Website title) uniquement dans chaque gabarit racine de site ( Portail , B2C , B2B , . . .), cest-` a-dire dans les gabarits principaux (B2C main template, B2B main template, . . .). La conguration TypoScript effective et linsertion de gabarits standards sont r ealis ees dans les gabarits de base correspondants. Nous lavons aussi s fait au niveau des pages. Comme vous le voyez sur la gure pr ec edente, les gabarits sont cr ee par exemple dans les pages Revendeurs ou Afliation du site Web B2B . Ceux-ci permettent une conguration plus d etaill ee via Include basis template. Les gabarits de base utilis es dans ce chapitre sont tous situ es dans le r epertoire Gabarits du syst` eme et dans ses sous-r epertoires. Cette proc edure vous permet dins erer, d echanger et de tester rapidement ` laide de ces enregistrements de gabarits. les diff erentes m ethodes a La gure suivante nous montre un exemple de gabarits en cascade partant du site B2C .
Figure 5.53: La hi erarchie des gabarits dans le Template Analyzer

5.9.1 TypoScript et gabarits HTML


R ef erence

905945

` partir du Nous voudrions illustrer lutilisation de chiers HTML pour la mise en page de base a ` un gabarit TypoScript est une m site B2C . Lint egration de gabarits HTML externes a ethode simple et souvent utilis ee. tapes que nous d Voici les e etaillerons : Comment pr eparer le document HTML ? ` laide du cObject TEMPLATE ? Comment lins erer a ` certaines zones du gabarit ? Comment faire r ef erence a Comment afcher le contenu dynamique dans le frontend ? Comment utiliser les biblioth` eques de code ?

272

5.9 Cr eation de gabarits TypoScript

Le gabarit HTML a ` laide de nimporte quel e diteur HTML ou e diteur de texte. Dans Le gabarit HTML est cr ee notre premier exemple, nous allons impl ementer le site pour la zone B2C bas ee sur un gabarit HTML. Pour ce faire, nous utilisons une pr esentation avec des tables, sans recourir au cadre, ce qui correspond au gabarit graphique de la gure 5.51. La mise en page compl` ete du site, comprenant les zones de fonction et de contenu, est alors conc ue pour donner au d eveloppeur TypoScript des instructions claires pour l etape dimpl ementation. ` tre A l etape suivante, d enissez les zones dont le contenu ou les fonctionnalit es doivent e remplac ees dynamiquement par TYPO3. Cela comprend les menus, les boutons, les zones de texte param etrables et la zone de contenu. Pour que TYPO3 puisse identier ces zones, placez des balises sp eciques dans le gabarit HTML. ` cet effet : les sous-parties (subparts en anglais) Deux types de balises sp eciques sont pr evues a et les marqueurs (markers en anglais). Les sous-parties Les sous-parties (subparts) sont toujours utilis ees par deux et renferment les sections du gabarit HTML qui sont compl` etement remplac ees par le r esultat de la conguration TypoScript. ` la casse. Le nom de la sous-partie est entour e par ### et est sensible a tre entour Les sous-parties peuvent e ees de commentaires HTML. Avant que les objets de contenu des sous-parties soient g en er es, toutes les sous-parties du tableau sont charg ees dans le registre pour que vous puissiez y acc eder si n ecessaire. Exemple :
<!--###CONTENT### start --> ... <!--###CONTENT### stop -->

Les marqueurs Les marqueurs sont uniquement utilis es seuls (jamais par paires) et sont remplac es par le r esultat de la conguration TypoScript. ` la casse. Le nom du marqueur est entour e par ### et est sensible a tre a ` lint Les marqueurs ne peuvent pas e erieur des commentaires HTML puisque ceux-ci ne sont pas supprim es. Exemple :
###COPYRIGHT###

273

5 TypoScript

Pr eparation du gabarit HTML s par TYPO3 depuis le Puisque les en-t etes HTML et les balises <body> sont g en eralement cr ee tre utilis frontend, seule la partie du gabarit HTML situ ee entre les balises <body> doit e ee. Les balises des sous-parties sont ins er ees dans le code HTML dans ce but.
<body> <!--###DOCUMENT_BODY### start --> ... <!--###DOCUMENT_BODY### stop --> </body>

Pr eparez le gabarit HTML de telle mani` ere que tous les chemins dimage fassent r ef erence aux r epertoires du syst` eme de chiers dans lesquels ils sont enregistr es, et que la r ef erence soit tre accessibles a ` partir du module Fichier relative au r epertoire racine. Ils devraient aussi e Fichiers (par exemple leadmin/images/. . . ). Cela signie que si vous placez le chier HTML dans le r epertoire racine du site Web et que vous y acc edez, les images embo t ees se galement a ` [Link] qui se trouve dans le ront visibles. Vous pouvez par cons equent acc eder e r epertoire racine.
Figure 5.54: Gabarit HTML appel e via le r epertoire racine

` pr Pr epar ee de cette fac on, lesquisse HTML pour le gabarit appara t a esent comme suit (en l ` substituer ont e t abr eg e). Ici, les e ements de contenu a e supprim es, pour rendre plus facile la ` lexception du marqueur ###COPYRIGHT###, seules des sous-parties lecture du document. A t ont e e utilis ees.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> <link rel="stylesheet" type="text/css" href="fileadmin/styles/defaults [Link]"> </head> <body> <!--###DOCUMENT_BODY### start --> <table width="800" border="0" cellspacing="0" cellpadding="0"> <tr> ... </tr> <tr> <td>&nbsp;</td> <td height="32" colspan="5" align="left" valign="middle"> <table width="785" border="0" cellspacing="0" cellpadding="0"> <tr>

274

5.9 Cr eation de gabarits TypoScript


<td width="650" align="left" valign="middle"> <!--###ROOTLINE### start -->Menu Rootline <!--###ROOTLINE### stop --></td> <td width="135" align="right" valign="middle"> <!--###PRINTVERSION### start -->Version Impression <!--###PRINTVERSION### stop --></td> </tr> </table> </td> </tr> <tr> ... </tr> <tr> <td width="15"><img src="[Link]" width="1" height="1" alt="" border="0"></td> <td width="1" bgcolor="#CCCCCC" background="fileadmin/images/layout/1px_gray.gif "><img src="[Link]" width="1" height="1" alt="" border="0"></ td> <td width="197" colspan="2" align="left" valign="middle"><img src="fileadmin/ima ges/layout/[Link]" width="177" height="82" alt="" border="0">< /td> <td width="586" align="right"> <!--###HEADER_IMAGE### start -->En-t ete <!--###HEADER_IMAGE### stop --></td> <td bgcolor="#CCCCCC" background="fileadmin/images/layout/1px_gray.gif" width="1 "><img src="[Link]" width="1" height="1" alt="" border="0"></td> </tr> <tr> ... </tr> <tr> <td>&nbsp;</td> <td colspan="3" height="40"><img src="fileadmin/images/layout/balken_gelb.gif" w idth="166" height="18" alt="" border="0"></td> <td colspan="2" height="40"> <!--###NAVIGATION### start -->Navigation principale <!--###NAVIGATION### stop --></td> </tr> <tr> <td>&nbsp;</td> <td bgcolor="#CCCCCC" background="fileadmin/images/layout/1px_gray.gif"><img src ="[Link]" width="1" height="1" alt="" border="0"></td> <td align="left" valign="top"> <!--###LEFT### start -->Navigation secondaire <!--###LEFT### stop --></td> <td>&nbsp;</td> <td align="left" valign="top"> <!--###CONTENT### start -->Contenu <!--###CONTENT### stop --></td> <td width="1"><img src="[Link]" width="1" height="1" alt="" border="0"></td> </tr> <tr> ... </tr>

275

5 TypoScript
<tr> <td height="18" colspan="6" align="right">###COPYRIGHT###</td> </tr> <tr> <td height="10" colspan="6" align="right">&nbsp;</td> </tr> </table> <!--###DOCUMENT_BODY### stop--> </body> </html>

` la gure suivante, vous voyez a ` nouveau le gabarit sous la forme dun diagramme sch A e` cr ` base de tables, avec des chiers matique. Ce gabarit sert a eer une mise en page typique a GIF transparents (en pointill es) en tant que balises sp eciques. Les zones avec des sous-parties sont marqu ees par des lignes bris ees.
Figure 5.55: Diagramme sch ematique des zones du gabarit HTML

t Dans cet exemple, de nombreuses sous-parties et marqueurs ont e e ins er es, de sorte que seule la mise en page de base demeure. Cela cr ee des zones de contenu qui peuvent toujours tre structur e ees en utilisant TypoScript. Lavantage est que vous pouvez alors changer lappa` nimporte quel moment via les objets TypoScript, et que dans rence des zones dynamiques a ` diff nos exemples nous pouvons recourir a erentes biblioth` eques de code pour nos besoins dillustration. tre enregistr Le gabarit HTML doit d esormais e e dans le syst` eme de chiers de lapplication TYPO3, dans un r epertoire sous leadmin/. . . . Sil est plac e dans le dossier racine, les r ef erences des images ne fonctionneront plus ; mais puisque le gabarit HTML est afch e avec [Link] ` partir du r dans le frontend a epertoire racine du site Web, les r ef erences fonctionneront. Cr eation de lenregistrement de gabarit Comme nous lavons d ej` a mentionn e, nous utilisons des gabarits en cascade dans les exemples, ` partir dun gabarit racine. que nous ins ererons a Dans le r epertoire du syst` eme Gabarits/Gabarits principaux/ , cr eez un nouvel enregistrement de gabarit, html template, et ins erez-le dans le gabarit racine de la page B2C Accueil (B2C main template) en tant que gabarit de base. html template repr esente la d enition effective du gabarit de la page. Ce dernier comprend le gabarit content (default) et int` egre aussi certaines biblioth` eques de code sous forme de gabarits de base. 276

5.9 Cr eation de gabarits TypoScript

Figure 5.56: Embo tement futur des gabarits TS dans le Template Analyzer

Dans le champ Setup du gabarit TS html template, le TLO page est d eni comme une page ` la section 5.2. Nous en lassignant au type dobjet PAGE ; ce que nous avons d ej` a pr esent ea ` la propri assignons la valeur 0 a et e typeNum. Puisque notre site nest pas bas e sur des cadres, cette assignation est sufsante.
page = PAGE [Link] = 0

Dautres propri et es comme bodyTagMargins et noLinkUnderline sp ecient que lafchage de la balise <body> g en er ee par TYPO3 se fait avec les param` etres leftmargin="0", topmar s dans le contenu ne sont gin="0", marginwidth="0", margin-height="0", et que les liens cr ee pas soulign es.
[Link] = 0 [Link] = 0

` partir du site B2C , vous verrez que le gabarit TS Si maintenant vous appelez une page a t ` la fonctionne. Alors que rien nest encore afch e, les param` etres corrects ont e e assign es a balise <body> dans le texte source. cObject TEMPLATE ` pr A esent, pour ins erer le gabarit HTML, utilisez le type dobjet PAGE qui reprend les objets de contenu dans une liste num erique (un tableau). La ligne page.10=TEMPLATE d enit un objet de type TEMPLATE dans le chemin dobjet page.10. La propri et e template que lobjet page.10 ` travers la propri a d esormais acquise est alors d enie comme un objet de type FILE et a et e le, cet objet fait r ef erence au gabarit HTML dans le syst` eme de chiers.
page.10 = TEMPLATE page.10 { template = FILE [Link] = fileadmin/templates/html_template.tmpl }

277

5 TypoScript

Avec ce code, le gabarit HTML est d ej` a afch e dans le frontend, mais les sous-parties et les marqueurs ne sont pas encore remplac es. ` ce stade, cest une bonne id A ee de reconstruire la d enition de lobjet TEMPLATE pour congurer les propri et es du type dobjet TEMPLATE, par exemple en ouvrant le champ TS Setup avec ` la le module Web Gabarit Info/Modify et en utilisant lassistant TypoScript pr esent ea section 5.4.2. Il est clair que la propri et e template peut prendre un cObject comme argument.

Remplacement des sous-parties et des marqueurs ` utiliser pour lafchage TYPO3. Etant D enissez dabord la zone du gabarit HTML a donn e que TYPO3 cr ee ses propres en-t etes et balises <body>, il sagit de la sous-partie ###DOC` lint UMENT_BODY### situ ee a erieur de la balise <body> dans le gabarit HTML. Celle-ci ` interpr d elimite la zone du gabarit a eter pour le remplacement des sous-parties et des mar` remplacer. Vous y faites r queurs a ef erence avec la propri et e workOnSubpart et le nom de la sous-partie DOCUMENT_BODY s electionn ee comme valeur. Les propri et es subparts et marks de lobjet page.10 repr esentent des listes de cObjects avec les noms des sous-parties et marqueurs correspondants. Pour tester si les balises sp eciques donn ees sont correctement r ef erenc ees, elles sont d enies ci-dessous en tant quobjets de type TEXT et chacune delles rec oit ` afcher comme valeur. un texte a
page.10 = TEMPLATE page.10 { template = FILE [Link] = fileadmin/templates/html_template.tmpl workOnSubpart = DOCUMENT_BODY subparts.HEADER_IMAGE = TEXT subparts.HEADER_IMAGE.value = zone pour limage den-t ete [Link] = TEXT [Link] = Menu rootline [Link] = TEXT [Link] = bouton dimpression [Link] = TEXT [Link] = zone de contenu [Link] = TEXT [Link] = zone de navigation principale [Link] = TEXT [Link] = zone de navigation secondaire et de metas (p. ex. informat ion l egale) [Link] = TEXT [Link] = bas de page avec copyright }

` ce moment dans le frontend, vous voyez que les Si une page du site B2C est appel ee a t sous-parties et les marqueurs ont e e remplac es par le texte correspondant. 278

5.9 Cr eation de gabarits TypoScript

Figure 5.57: Les marqueurs du t gabarit HTML ont e e remplac es

Insertion de contenu dynamique ` pr tre afch A esent, le contenu des pages respectives devrait bien s ur e e. Puisque content t (default) et [Link] (default) ont e e ins er es en tant que gabarits de base dans le gabarit TS html template, cela devient simple car d` es cet instant, lobjet [Link] est disponible. Extrait de [Link] (default) :
[Link] = CONTENT [Link] { table = tt_content [Link] = sorting [Link] = colPos=0 [Link] = sys_language_uid }

l Les e ements de contenu dans la colonne Normal (colPos=0) de la table tt_content sont ` laide de lobjet styles. s electionn es et restitu es avec le gabarit standard content (default) a [Link], car une conguration TS correspondante y est d enie pour chaque type de contenu. La conguration est situ ee sous tt_content.* et, puisque les noms sont identiques, elle est utilis ee automatiquement par lobjet CONTENT pour restituer la table tt_content. ` pr A esent, lobjet [Link] est aussi copi e dans [Link] : les l e ements de contenu de la colonne Normal de la page courante sont restitu es et ins er es dans ` afcher est mis dans un tableau via la les sous-parties sous le nom CONTENT. Le contenu a propri et e wrap du type dobjet CONTENT.
page.10 { ... [Link] < [Link] [Link] =<table width="586" cellspacing="0" cellpadding="0" border ="0"><tr><td>|</td></tr></table> ... }

Notez que CONTENT dans le chemin dobjet [Link] nest que le nom de la balise de la sous-partie dans le gabarit HTML ; ceci ne signie pas forc ement que cest un objet de type CONTENT. Mais en r ealit e, [Link] est d eni comme un objet CONTENT avec une copie de lobjet [Link]. 279

5 TypoScript

Les pages de lapplication B2C restituent d esormais le contenu de la page courante dans le frontend.
Figure 5.58: Le contenu est afch e dynamiquement

Pour mettre en forme lafchage du contenu, les gabarits standards cSet (default) et cSet ` laide du Constant Editor. Tous les deux d Stylesheet simplient le marquage a enissent les ` laide de constantes, ce qui facilite les changements a ` un styles dans [Link] a niveau global. La diff erence entre les deux est que cSet (default) sacquitte du marquage en utilisant la mise en forme HTML traditionnelle, alors que cSet Stylesheet utilise des d enitions de feuilles de style en cascade qui sont enregistr ees dans un chier s epar e. Selon la m ethode que vous pr ef erez, int egrez le gabarit standard appropri e comme gabarit de base apr` es content ` tour. (default) dans le gabarit TS html template. Nous avons illustr e ces deux possibilit es tour a cSet (default) Si cSet (default) est ins er e, vous pouvez changer les valeurs par d efaut avec le Constant Editor. Dans lexemple, les valeurs standards de la cat egorie CSET comme la couleur de l larri` ere-plan, les polices de caract` ere et les tailles des diff erents e ements de contenu, ainsi que les en-t etes, sont tous remplac es.
#angepasste Konstanten des Standard-Templates cSet (default) [Link] = white [Link] = #E6B800 [Link] = #666666 cSet.color1 = #0000CC cSet.color2 = #E6B800 [Link] = Arial [Link] = Arial cSet.size1 = 1 cSet.size2 = 2 cSet.size3 = 3

Les changements sont sauv es par le Constant Editor dans le champ Constant du gabarit s electionn e. 280

5.9 Cr eation de gabarits TypoScript

cSet Stylesheet Ce gabarit standard se base sur la feuille de style media/scripts/[Link] fournie dans linstallation de base de TYPO3. Copiez ce chier et enregistrez-le dans un r epertoire du syst` eme de chiers sous leadmin/. Sp eciez ensuite le nouveau chemin dans la cat egorie CONTENT du Constant Editor.
Figure 5.59: Insertion du nouveau chier CSS

crite dans le champ Constants du gabarit TS : La nouvelle valeur de la constante est e


# constante de la feuille de style pour le gabarit standard cSet [Link] = fileadmin/styles/[Link]

` pr Vous pouvez a esent modier les styles dans le chier CSS ou en ajouter de nou tre effectu diteur CSS sp veaux. Les modications peuvent e ees soit avec un e ecial, soit directement avec TYPO3 (Fichier Fichiers).

Etapes de construction avec des gabarits en cascade


l ` jour par les Le gabarit TS ins` ere le gabarit HTML et afche les e ements de contenu mis a r edacteurs dans le backend. Toutefois, il contient encore des marqueurs sp eciques qui ne contiennent jusqu` a pr esent que du texte pour les tests. Ces balises seront remplac ees par des biblioth` eques de code et ins er ees en tant que gabarits de base. Nous discuterons des menus ult erieurement, dans le chapitre qui leur est consacr e. Limage de len-t ete ` la sous-partie HEADER qui, selon les zones de larTout dabord, il faut ajouter une image a borescence des pages, est sp eci ee par les r edacteurs via le champ Fichiers des pages corres . Il d pondantes. Pour ce faire, un gabarit TS particulier, temp.header_html, est cr ee enit lobjet temporaire header_image du type dobjet IMAGE.
temp.header_image = IMAGE

` partir duquel les images sont lues, utilisez la propri An de sp ecier lendroit a et e [Link] qui sp ecie le r epertoire o` u les images sont stock ees via le champ Fichiers. La propri et e le ` son tour une fonction qui appartient au type de donn ees imgResource. Cette propri et e est a contient la propri et e import. 281

5 TypoScript
temp.header_image.[Link] = uploads/media/

Nous avons maintenant pr ecis e le dossier dans lequel les images sont situ ees, mais pas lendroit tre afch o` u elles doivent e ees. La propri et e import appartient au type de donn ees path, mais la fonction stdWrap est disponible, et donc la propri et e data du type de donn ees getText lest aussi. Ceci permet dafcher les valeurs des donn ees enregistr ees de mani` ere interne par TYPO3 (tableau PHP), y compris les images assign ees aux pages. Ainsi, data = levelmedia:1, slide afche les donn ees du type levelmedia du premier niveau dans larborescence des pages. ` partir de la page courante Gr ace au param` etre slide, TYPO3 parcourt larborescence des pages a de niveau 1, jusqu` a ce quil trouve une image et lafche.
temp.header_image.[Link] = levelmedia:1, slide

Nous regarderons de plus pr` es la fonction stdWrap, mais nous avons vu ici combien elle est puissante rien quen afchant des donn ees. Le point important ici est que si vous avez travaill e sur les exemples avec nous, vous aurez d ej` a compris quelque peu la manipulation de TSref (cf. gure 5.62). Il ne vous reste plus qu` a ins erer les images pr epar ees dans les en-t etes de pages respectifs (type de page : Advanced) du premier niveau via le champ Fichiers.
Figure 5.60: Fichier dimage ins er e dans len-t ete de page

` la sousDans le gabarit TS html template, le chemin dobjet temp.header_image est assign ea partie HEADER_IMAGE.
subparts.HEADER_IMAGE < temp.header_image

De nombreuses images sont afch ees, selon lendroit de larborescence, dans len-t ete de lapplication du frontend via ces trois lignes de code TypoScript.
Figure 5.61: R esultat dans le frontend

Le texte dans le pied de page Dans le bas de page de lapplication, la note de copyright est ins er ee sous forme de texte qui tre e dit ici (temp.copyright_html) et est ins peut e e. Un autre gabarit TS est aussi cr ee er e en tant que gabarit de base dans lenregistrement de gabarit html template.
[Link] < temp.copyright_html

282

Figure 5.62 : Lecture du TSref

5 TypoScript

La partie de code temp.copyright_html g en` ere un objet du m eme nom et du type dobjet TEXT. Sa propri et e value rec oit comme valeur une constante et le r esultat de lobjet est envelopp e dune balise HTML <font>.
temp.copyright_html = TEXT temp.copyright_html { value = {$copyright} wrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="1" color="#66666 6" class="copyright">|</font> }

` la constante dans le champ Constants du gabarit TS : Il faut maintenant assigner une valeur a
copyright = Copyright &copy; 2005

` la n de la page. Ce texte est afch e dans le frontend a


Figure 5.63: Le gabarit TS html template : seuls les menus et la fonction dimpression manquent

Il nest pas obligatoire dutiliser la constante copyright, mais vous devriez pouvoir changer le sigle copyright en utilisant la valeur dune constante. tendue aux sections 5.10 et 5.11. Lapplication est encore e

5.9.2 Le Template Auto-Parser


R ef erence

543497

` laide de la zone B2E du site Web. Elle Lutilisation du Template Auto-Parser est illustr ee a ` lint est similaire a egration de gabarits HTML, sauf que linsertion des sous-parties et des marqueurs ainsi que les chemins des images et des ressources sont pris en charge par lextension tre pr Template Auto-Parser (automaketemplate). Celle-ci doit d ej` ae ealablement charg ee et install ee. Vous devriez aussi installer lextension CSS styled content (css_styled_content) qui ` la place du gabarit standard content (default). sera utilis ee a

284

5.9 Cr eation de gabarits TypoScript

Le gabarit HTML ` lapplication, la mise en page du gabarit HTML dans An dapporter quelques modications a ` laide de balises <div> dont la zone B2E nest plus bas ee sur des tables, mais est marqu ee a lapparence est enti` erement d enie par des feuilles de style en cascade (CSS)8 . Ces quelques tre cr es avec TypoScript, comme nous le montrons a ` la secbalises <div> peuvent aussi e ee l tion 5.9.3. LAuto-Parser reconna t les zones sil trouve le param` etre id dans des e ements HTML t tels que <div>, <span> et <td>. Le gabarit HTML a e e pr epar e en cons equence et enregistr e dans le syst` eme de chiers. Si elles sont incluses dans le code HTML, les images et les autres tre stock ressources devraient e ees dans des sous-r epertoires relatifs correspondants. Les che tre ajust mins vers les chiers externes, comme les images, ne doivent pas e es dans le gabarit HTML.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> <link href="fileadmin/styles/[Link]" rel="stylesheet" ty pe="text/css"> </head> <body> <div id="rootline">rootline</div> <div id="header"> <div id="logo">logo</div> <div id="headerimagetext">texteimageentete</div> </div> <div id="navi">navi</div> <div id="middle"> <div id="subnavigation">sousnavi</div> <div id="content">contenu</div> </div> <div id="printversion">versionimpression</div> <div id="footer"></div> <div id="copyright">Copyright &copy; 2005</div> </body> </html>
R ef erence

544119

Conguration du Template Auto-Parser ` celle de la zone B2C . Un gabarit de base, auto La hi erarchie du gabarit est identique a ` la page parser template, est assign e au gabarit racine B2E main template qui est associ ea racine du site B2E . Ce dernier gabarit contient le gabarit standard CSS styled content pour l la restitution des e ements de contenu, via Include static (from extensions). Lorsque vous avez install e lextension Template Auto-Parser, vous voyez appara tre un nouvel objet, tx_automaketemplate_pi1 de type USER sous le TLO plugin.
8 Bien

s ur, lefcacit e de cette m ethode ne devient apparente quavec des gabarits HTML plus complexes.

285

5 TypoScript

Figure 5.64: Lextension Template Auto-Parser dans lObject Browser

R ef erence

363442

Cela permet de faire appel au Template Auto-Parser et de le congurer. Les options possibles se trouvent dans la documentation de lextension (voir la r ef erence). Ajoutez le code suivant au champ Setup du gabarit TS auto parser template :
### Configuration du Template Auto-Parser : ### plugin.tx_automaketemplate_pi1 { content = FILE [Link] = fileadmin/templates/[Link] elements { [Link] = 1 [Link] = DOCUMENT_BODY [Link] = 1 [Link] = DOCUMENT_HEADER [Link] = title [Link] = 1 } }

` utiliser dans le Template Auto-Parser. La propri et e content permet de choisir le gabarit HTML a On donne ensuite linstruction dins erer les marques des sous-parties pour les balises <body>, l <head> et <div>. Un subpartMarker (en majuscules) est congur e dans tous les e ements HTML de type <body> et <head>, de telle mani` ere quils soient reconnus par la suite par le cObject TEMPLATE. Puisque la section titre de la page est g en er ee dynamiquement par TYPO3, la balise <title> est supprim ee avec [Link]=title. Sil vous faut ajuster ` lenvironnement TYPO3 a ` les chemins relatifs des images et des ressources du gabarit HTML a partir du r epertoire racine, sp eciez un pr exe devant le dossier du syst` eme de chiers. Nous tant donn ne lavons pas fait dans lexemple e e que seul le chier CSS est impliqu e, car la r ef erence pointe d ej` a vers le bon r epertoire.
#Ajoutez le pr efixe suivant a ` tous les chemins relatifs : plugin.tx_automaketemplate_pi1.relPathPrefix = fileadmin/template/

286

5.9 Cr eation de gabarits TypoScript

Cr eation de la page Pour cr eer la page, le code TypoScript est construit de mani` ere plus modulaire en cr eant des ob jets dans le chemin dobjet temp.*. Lobjet headerTemplate du type dobjet TEMPLATE est cr ee pour int egrer les donn ees de len-t ete HTML. Sa propri et e template rec oit comme r ef erence lobjet plugin.tx_automaketemplate_pi1. ` la zone du gabarit La propri et e workOnSubpart sp ecie que lobjet fait seulement r ef erence a t HTML qui a e e entour ee par la balise sp ecique DOCUMENT_HEADER.
### cObject pour len-t ete ### [Link] = TEMPLATE [Link] { template =< plugin.tx_automaketemplate_pi1 workOnSubpart = DOCUMENT_HEADER }

t Dans lexemple pr ec edent, un chier HTML contenant d ej` a des balises sp eciques a e e lu par ` lobjet TEMPLATE pour le traitement. La fac un objet du type FILE et est pass ea on de proc eder ` ceci pr` avec le Template Auto-Parser est identique, a es que le plugin plugin.tx_automaketem` la conguration et quil plate_pi1 congure les balises sp eciques automatiquement gr ace a galement les r ajuste e ef erences aux chiers dans le processus. Vous pouvez donc assigner un id aux blocs du chier HTML et y acc eder dans la conguration TS, sans devoir ins erer les balises ` la main. sp eciques a de la m ` la zone du Lobjet mainTemplate est cr ee eme mani` ere, except e quil fait r ef erence a ` gabarit HTML entour ee par la balise sp ecique DOCUMENT_BODY. Des sous-parties sont a nouveau fournies avec le texte afch e en guise de test. On fait r ef erence aux sous-parties gr ace aux noms des id (observez le changement de casse) du gabarit HTML.
### cObject pour le corps de la page (body) ### [Link] = TEMPLATE [Link] { template =< plugin.tx_automaketemplate_pi1 workOnSubpart = DOCUMENT_BODY [Link] = TEXT [Link] = Menu rootline [Link] = TEXT [Link] = bouton impression [Link] = TEXT [Link] = zone pour limage den-t ete [Link] = TEXT [Link] = zone pour la navigation principale [Link] = TEXT [Link] = zone de navigation secondaire et de metas (p. ex. information l egale) [Link] = TEXT [Link] = zone de contenu [Link] = TEXT [Link] = bas de page avec copyright }

es dans la phase nale, ainsi que les objets temporaires, sont copi Les pages cr ee es dans les chemins dobjet [Link].10 et page.10. 287

5 TypoScript
## Cr eation de la page ### page = PAGE [Link] = 0 [Link] = 0 [Link].10 < [Link] page.10 < [Link]

` ce stade, vous obtenez d Lorsque vous afchez le frontend a ej` a la disposition de base contr ol ee l par CSS et les sous-parties correspondantes avec leurs e ements de contenu de test.
Figure 5.65: Lafchage dans le ` ce stade frontend a de la construction

Si vous regardez le code source de lafchage dans le frontend, vous voyez que le lien vers le chier CSS situ e dans len-t ete reste intact, et quun certain nombre de balises sp eciques pour les sous-parties sy trouvent toujours.
Figure 5.66: Parties du r esultat dans le texte source

es uniquement pour certains id, congurez le Si vous d esirez que des marqueurs soient cr ee Template Auto-Parser en cons equence.
plugin.tx_automaketemplate_pi1.[Link] { rootline = 1 printimpression = 1 ... copyright = 1 }

Etapes de construction avec des gabarits en cascade


Jusqu` a pr esent, nous navons afch e que du texte dexemple avec ce gabarit. Ci-apr` es, des objets TS seront d evelopp es pour des zones sp eciques, afchant le contenu appropri e qui tre incorpor peut e e au gabarit principal. 288

5.9 Cr eation de gabarits TypoScript

Afchage du contenu de la page t La colonne de contenu Normal a d ej` ae e afch ee avec le gabarit standard content (default) (via lobjet pr ed eni [Link]). Le gabarit standard CSS styled content utilis e dans tre aussi utilis ce gabarit contient le m eme objet et peut e e ici.
[Link] = TEMPLATE [Link] { ... [Link] < [Link] ... }

Cr eation de len-t ete ` lexemple de la section 58, le logo nest pas contenu dans ce gabarit HTML. Contrairement a Nous devons le d enir en utilisant TypoScript et limage dans len-t ete. Cest pourquoi un objet t dans le gabarit. nomm e temp.header_tswrap_autoparser du type dobjet COA a e e cr ee Le cObject COA (aussi appel e COBJ_ARRAY) peut contenir plusieurs objets dans une liste. Ainsi, lobjet 10 g en` ere une image (type dobjet : IMAGE) localis ee dans le syst` eme de chiers via la propri et e le.
temp.header_tswrap_autoparser = COA temp.header_tswrap_autoparser { 10 = IMAGE [Link] = fileadmin/images/layout/[Link]

Le logo devrait contenir un lien vers la page daccueil du site Web. Pour ce faire, utilisez la fonction stdWrap que fournit le type dobjet IMAGE comme propri et e. ` partir de quelles Elle int` egre la fonction typolink qui d etermine (par la propri et e parameter) a tre cr . Le lien m` ` la page dont lID est 75. donn ees le lien doit e ee ene ici a
[Link] = 75

La propri et e parameter est du type de donn ees string/stdWrap. Une autre fac on de proc eder ` la est de d eterminer automatiquement lID de la page racine du site Web (level=0) gr ace a propri et e data de la fonction stdWrap.
[Link] = leveluid:0

Limage et le lien sont ensuite entour es dune balise <div> par la propri et e wrap de lobjet stdWrap, balise qui sp ecie la position du logo par CSS.
[Link] = <div id="logo">|</div>

par la copie de lobjet d 20 est le second objet du COA cr ee ej` a existant temp.header_image dans ce chemin dobjet. temp.header_image provient du gabarit TS temp.header_html de lexemple de la section 58 et est simplement r eutilis e. 289

5 TypoScript

Pour ce faire, incluez ce gabarit dans lenregistrement auto parser template en tant que gabarit de base. En outre, vous devez s electionner les images d esir ees dans les pages correspondantes du premier niveau via le champ Fichiers. Puisque lapplication se base sur CSS, lobjet est envelopp e dune balise <div>.
# image simple sans GIFBUILDER 20 < temp.header_image [Link] = <div id="headerimage">|</div>
}

Le texte dans le pied de page An dafcher le copyright au bas de la page en utilisant le gabarit TS temp.copyright_html, incluez-le en tant que gabarit de base et copiez lobjet dans [Link] tre envelopp pyright. La seule diff erence est que le texte ne doit pas e e par une balise <font>. ` laide de lop Pour cette raison, la propri et e wrap est supprim ee a erateur >.
[Link] = TEMPLATE [Link] { ... [Link] < temp.copyright_html [Link] > ... }

Le gabarit a maintenant atteint le m eme niveau de d eveloppement que dans lexemple pr ec edent. La cr eation des menus et des fonctions sp eciales sera d ecrite plus tard. Avant cela, ` la section suivante comment construire des mises en page de base sans nous vous montrons a chier HTML externe.
R ef erence

591605

Si vous appr eciez de travailler avec le Template Auto-Parser, nous vous renvoyons une nouvelle fois au Modern Template Building, Part 1 , un didacticiel tr` es complet (voir la r ef erence cicontre).

5.9.3 Gabarits TypoScript purs


Dans la derni` ere m ethode de cr eation de gabarits TS que nous pr esentons ici, nous cr eerons ` des gabarits HTML. un gabarit de base enti` erement avec TypoScript, sans avoir recours a Nous vous montrerons deux exemples utilisant la mise en page de lapplication B2B , lun avec le concept denveloppe et avec des balises <div>, lautre avec le cObject CTABLE. Les gabarits sont mis en cascade de la m eme mani` ere que pour les applications B2C et B2E . Un gabarit de base, ts wrap template ou ts CTABLE template, est assign e au gabarit racine B2B main template. D enissez la page racine et int egrez les gabarits standards content (default) ` mesure des et cSet stylesheet, de m eme que dautres composantes de code TS au fur et a explications. Travailler avec wrap ` lexemple du Template Auto-Parser, le gabarit HTML qui y est int Si nous nous r ef erons a egr e tre cr enti` peut e ee erement avec TypoScript. Si vous proc edez ainsi, lors de lanalyse syntaxique, 290

5.9 Cr eation de gabarits TypoScript

aucun chier HTML externe contenant des balises sp eciques nest utilis e. Le remplacement des sous-parties et des marqueurs nest pas n ecessaire puisque tous les marquages HTML requis sont d enis dans le gabarit TS. Dans le gabarit TS ts wrap template, cr eez un TLO page du type dobjet PAGE et sp eciez lapparence de la balise <body> ainsi que lemplacement du chier CSS dans le syst` eme de chiers avec les propri et es bodytag et stylesheets. l l Pour tous les e ements de contenu de la page, cr eez les e ements pertinents via une liste num erique, et entourez-les de balises <div> par la propri et e wrap. Lapparence du site est aussi contr ol ee par des feuilles de style en cascade (CSS).
page { 10 = TEXT [Link] = Menu rootline [Link] = <div id="rootline">|</div> .. }

es dans les gabarits TS temp.header_tswrap_ Les composantes de code r eutilisable d ej` a cr ee autoparser et temp.copyright_html sont incluses dans lenregistrement de gabarit avec le champ Include basis template et leurs propri et es sont pass ees aux objets respectifs de la liste num erique.
20 < temp.header_tswrap_autoparser [Link] = <div id="header">|</div>

tait afch Jusquici, seul le contenu de la colonne Normal e e. Une seconde zone de contenu ` pr est a esent int egr ee avec lobjet 60 qui afche le contenu de la colonne de Droite via lobjet pr ed eni [Link] du gabarit standard [Link] (default).
60 < [Link]

Maintenant, lobjet 60 est de type CONTENT. An dentourer le contenu de balises <div>, pour respecter ce qui est d eni dans la feuille de style CSS, nous utilisons la propri et e wrap de la fonction stdWrap.
[Link] = <div id="right"><div id="rightcontent">|</div> <div id="rightfooter">&nbsp;</div></div>

Lenveloppe est activ ee avec la fonction stdWrap, car nous devons utiliser la propri et e suivante :
[Link] = 1

Si la propri et e required est activ ee, stdWrap ne traite les autres propri et es activ ees que si une ` stdWrap. Le cas e ch valeur est assign ee a eant, lenveloppe ne safche que si lobjet page.60 de type CONTENT g en` ere un r esultat cest-` a-dire sil y a du contenu dans la colonne de droite. Dans lafchage du frontend, une colonne de droite safche via le CSS uniquement si galement dans la colonne Droite. le contenu existe e tape actuelle de d La conguration de ts wrap template dans son e eveloppement est la suivante : 291

5 TypoScript
page = PAGE [Link] = 0 [Link] = <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0 "> [Link] = fileadmin/styles/[Link] page { # Top ## Menu rootline 10 = TEXT [Link] = Menu rootline [Link] = <div id="rootline">|</div> ## En-t ete 20 < temp.header_tswrap_autoparser [Link] = <div id="header">|</div> ## Navigation principale 30 = TEXT [Link] = zone pour la navigation principale [Link] = <div id="navi">|</div> # Gauche / menu secondaire 40 = TEXT [Link] = zone de navigation secondaire et zone de contenu metas (p. ex. inform ation l egale) [Link] = <div id="subnavigation">|</div> # Contenu 50 < [Link] [Link] = <div id="content">|</div> # Droite 60 < [Link] [Link] = <div id="right"><div id="rightcontent">|</div><div id="rightfo oter">&nbsp;</div></div> # la colonne de droite nest affich ee que si du contenu est d efini [Link] = 1 # Version impression 65 = TEXT [Link] = bouton impression [Link] = <div id="printversion">|</div> # Bas de page ## code pour permettre linsertion en CSS dun retour a ` la ligne 70 = TEXT [Link] = <div id="footer"></div> ## Copyright 80 < temp.copyright_html [Link] = <div id="copyright">|</div> }

292

5.9 Cr eation de gabarits TypoScript

Travailler avec CTABLE es avec TypoScript a ` De simples pr esentations sous forme de tableaux sont rapidement cr ee laide du cObject CTABLE. Ce dernier cr ee un tableau standard, poss edant jusqu` a cinq cellules. l ventuellement entour Une cellule pour les e ements de contenu (c) est e ee de cellules pour la marge de gauche (lm), la marge de droite (rm) et les marges du haut (tm) et du bas (bm).
Figure 5.67: Pr esentation en tableau avec CTABLE

La mise en page du site de lexemple nest pas id eale pour la conversion avec CTABLE puisquelle contient plusieurs lignes et plusieurs cadres. Dans le gabarit de base ts CTABLE tem` savoir plate, d enissez ici aussi le TLO page avec les propri et es utilis ees jusqu` a maintenant, a typeNum, bodyTagMargins et noLinkUnderline.
page = PAGE [Link] = 0 [Link] = 0 [Link] = 0

` la propri Dans cet exemple, nous avons divis e la mise en page en plusieurs objets, gr ace a et e numerical List du type dobjet PAGE. Lobjet 2 cr ee ensuite une table qui incorpore le menu rootline et le bouton pour la version dimpression. Le type dobjet CTABLE lui est assign e, ce qui rend toutes les propri et es des cObjects disponibles. Des param` etres suppl ementaires sont activ es pour la table avec les propri et es tableParams et avec offset, la distance au coin ` 0. sup erieur gauche est mise a
###### rootline ####### page.2 = CTABLE page.2 { tableParams = border="0" cellpadding="0" cellspacing="0" width="785" offset = 0,0

Les propri et es c, lm, rm, tm et bm sont du type de donn ees CARRAY +TDParams, cest-` a-dire quelles repr esentent une liste num erique de cObjects. Vous pouvez faire passer vos propres param` etres dans les cellules de la table. La cellule de contenu c pour le futur menu rootline est d enie temporairement comme un objet de type TEXT ; une balise sp ecique est d enie avec sa propri et e value.
c.10 = TEXT [Link] = Menu rootline

Le contenu de la cellule est centr e: 293

5 TypoScript
[Link] = valign="middle"

` xer la hauteur de la table a ` 32 pixels est Un cObject du type dobjet CLEARGIF servant a introduit dans la cellule de gauche lm.
# Hauteur du menu rootline lm.10 = CLEARGIF [Link] = 32

Un texte est aussi congur e dans la colonne de droite rm pour le lien vers la version imprimable de la page.
rm.10 = TEXT [Link] = bouton impression [Link] = valign="middle" align="right"
}

galement d Les objets page.10, page.20, page.30 et page.40 sont e enis comme des tables. La l cellule des e ements de contenu, page.10.c, afche le logo et limage dans len-t ete de la page ; elle consiste en plusieurs objets se pr esentant sous la forme dune liste num erique (COA).
###### en-t ete ###### page.10 = CTABLE page.10 { tableParams = border="0" cellpadding="0" cellspacing="0" width="785" offset = 15,0 # Logo c.10 = COA #Table pour le le logo et limage den-t ete c.10.5 = HTML [Link] = <table border="0" width="768" cellspacing="0" cellpadding="0"><tr ><td width="197"> c.10.10 = IMAGE [Link] = fileadmin/images/layout/[Link] [Link] = align="left" valign="top" bgcolor="white" c.10.15 = HTML [Link] = </td><td align="right"> c.10.20 < temp.header_image c.10.30 = HTML [Link] = </td></tr></table>

l Lagencement des e ements est impl ement ee par les cellules [Link], [Link], page.10. rm et [Link] qui afchent les objets du type IMAGE.
# Agencement de len-t ete lm.10 = IMAGE [Link] = fileadmin/images/layout/1px_gray.gif [Link] = align="left" valign="top" bgcolor="#CCCCCC" height="125" width="1" tm.10 = IMAGE [Link] = fileadmin/images/layout/1px_gray.gif [Link] = align="left" valign="top" bgcolor="#CCCCCC" height="1" width="785"

294

5.9 Cr eation de gabarits TypoScript

rm.10 = IMAGE [Link] = fileadmin/images/layout/1px_gray.gif [Link] = align="left" valign="top" bgcolor="#CCCCCC" height="125" width="1" bm.10 = IMAGE [Link] = fileadmin/images/layout/1px_gray.gif [Link] = align="left" valign="top" bgcolor="#CCCCCC" height="1" width="785"
}

page.20 afche la navigation principale.


###### Navigation principale ###### page.20 = CTABLE page.20 { tableParams = border="0" cellpadding="0" cellspacing="0" width="785" offset = 15,0 c.5 = HTML [Link] = <table border="0" width="785" height="40" cellspacing="0" cellpaddin g="0"><tr><td width="197"> c.10 = IMAGE [Link] = fileadmin/images/layout/balken_gelb.gif [Link] = hspace="0" vspace="0" c.15 = HTML [Link] = </td><td> c.20 = TEXT [Link] = zone pour la navigation principale [Link] = align="left" valign="middle" bgcolor="#FFFFFF" height="40" c.30 = HTML [Link] = </td></tr></table> }

La table page.30 met en place le menu secondaire et la zone de contenu par le biais de [Link] et page.30.c. Ceux-ci sont entour es par les objets HTML page.25 et page.35 qui afchent la ligne grise sur la page de gauche.
###### Sous-navigation et contenu ###### #Ligne de droite et de gauche sous forme de table page.25 = HTML [Link] = <table border="0" cellspacing="0" cellpadding="0"><tr><td width=" 15"><img src="[Link]" width="15" height="1" alt="" border=" 0"></td><td width=" 1" bgcolor="#CCCCCC" background="fileadmin/images/layout/1px_gray.gif"><img src="c [Link]" width="1" height="1" alt="" border="0"></td><td> page.30 = CTABLE page.30 { tableParams = border="0" cellpadding="0" cellspacing="0" width="767" offset = 0,0 c.10 = COA c.10.5 = HTML [Link] = <table border="0" cellspacing="0" cellpadding="0" width="586"><tr> c.10.10 < [Link] [Link] = <td align="left" valign="top">|<br /><br /></td>

295

5 TypoScript
c.10.25 = HTML [Link] = </tr></table> # espace pour que la cellule soit aussi incluse si son contenu est vide [Link] = &nbsp; # d ecalage par rapport au copyright c.20 = HTML [Link] = <br /><br /> [Link] = align="right" valign="top" lm.10 = TEXT [Link] = zone de navigation secondaire et de metas (p. ex. information l ega le) # hauteur de 400px, m eme sans contenu [Link] = width="197" align="left" valign="top" height="400" } #Fin de la table page.35 = HTML [Link] = </td></tr></table>

Le pied de la page avec le copyright est cr ee par lobjet table page.40.


###### Copyright ###### page.40 = CTABLE page.40 { tableParams = border="0" cellpadding="0" cellspacing="0" width="785" offset = 15,0 c.10 < temp.copyright_html [Link] = align="right" valign="middle" bgcolor="#FFFFFF" height="18" tm.10 = IMAGE [Link] = fileadmin/images/layout/1px_gray.gif [Link] = align="left" valign="top" bgcolor="#CCCCCC" height="1" width="785" bm.10 = CLEARGIF [Link] = 30
}

` des Comme vous le voyez, le code TypoScript est devenu assez long : CTABLE convient mieux a mises en page plus simples. ` pr t A esent, toutes les m ethodes de gabarit ont e e pass ees en revue. Celle que vous choisirez pour concevoir votre application d ependra de vos pr ef erences et de vos comp etences. Dans la section suivante, nous introduisons les menus qui afchent automatiquement larborescence ` travers le site. des pages pour la navigation a

5.10 Menus
` la base du concept de navigation dans votre site Web, Les menus ne sont pas seulement a galement des e l ils constituent e ements de graphisme importants. Avec TYPO3, vous pouvez 296

5.10 Menus

cr eer diff erents types de menus gr ace au TypoScript, pour afcher sous diff erentes formes la structure du site. Certaines fonctionnalit es sont d ej` a incluses pour la cr eation de menus bas es sur du texte, sur des images, sur des compositions dimages, ou des menus de s election. s dynamiquement gr ` larborescence des pages. Si, Dans le frontend, les menus sont cr ee ace a par exemple, vous cr eez une nouvelle page dans le backend, elle est automatiquement reprise dans le menu correspondant une fois quelle est mise en ligne. Dans les menus, les types de page afch es sont g en eralement Standard, Avanc e, URL externe, Raccourci et Point de montage, pourvu que TypoScript nimpose aucune restriction. La balise tre d tre afch sp ecique D elimiteur doit e enie s epar ement pour e ee. Les types de page Hors menu, Dossier Syst` eme et Corbeille ne sont pas inclus. Niveaux Puisque normalement, seul le plan du site afche toutes les pages dun site Web, vous devez d enir dans la plupart des menus les pages de d ebut et de n du menu. Une mani` ere de les d enir r eside dans les fameux niveaux . Le rootline du site Web, en tant que premier niveau, correspond au niveau 0. Le niveau suivant est le niveau 1, etc.
Figure 5.68: Niveaux dans larborescence des pages

Le rootline Un concept important, souvent utilis e dans le contexte des menus de TYPO3, est celui des galement le niveau le plus bas dans larborescence des pages. En rootline. Le terme d esigne e s electionnant le rootline (le globe), vous pouvez afcher par exemple les gabarits standards dans le module Web Liste. Ce terme a toutefois un autre sens lorsquon parle de menus, ce qui peut amener une certaine confusion. Ici, le rootline est une liste de pages, obtenue en ` la gure 5.68, le rootline parcourant les pages depuis la page courante jusqu` a la page racine. A de la page Produit 2 serait : Produit 2, Produits, B2C Accueil. Nous vous montrons ci-dessous comment congurer les diff erents types de menus avec TypoScript. Dans lapplication exemple BT3, ils sont sauvegard es dans les enregistrements de gabarit dans le Dossier Syst` eme Gabarits/Gabarits Principaux/Menus/. Pour lafchage dans 297

5 TypoScript

les sites Web B2C , B2B et B2E , les menus d esir es sont inclus dans les gabarits principaux ad hoc en tant que gabarits de base. Les balises sp eciques dans les gabarits principaux sont remplac ees par les objets correspondants. Exemple : dans le site Web B2C , le gabarit principal html template d enit la page. Int egrez dans lenregistrement de gabarit avec Include basis template. le menu que vous avez cr ee Dans le chemin dobjet [Link] qui jusquici contenait un marqueur,
page.10 { ... [Link] = TEXT [Link] = zone de navigation principale ... }

lobjet de menu est d esormais copi e. Remarquez que cest bien lobjet du menu qui est copi e et non lenregistrement de gabarit, m eme si ces deux entit es portent g en eralement le m eme nom dans les exemples.
... [Link] < temp.navigation_html ...

t , il serait visible sur le site Web. Si lobjet menu avait d ej` ae e cr ee

5.10.1 Le cObject HMENU propri et es g en erales des menus


R ef erence

460074

avec le cObject Quel que soit le menu que vous vouliez publier sur votre site Web, il sera cr ee HMENU (menu hi erarchique). Voici un exemple simple de cr eation dun menu pour les pages de niveau 0 dans lequel les l entr ees sont afch ees les unes en dessous des autres, puisque chaque e ement de menu contient une balise <br />.
[Link] = HMENU [Link] = 0 [Link] { 1 = TMENU [Link] = |<br /> }

Le HMENU soccupe de rassembler linformation de la page. La restitution effective des entr ees du menu est r ealis ee par les sous-objets qui sont inclus dans une liste num erique. Par opposition avec les types dobjet PAGE et COA, la num erotation rev et ici une signication sp eciale. Les propri et es 1, 2, 3, etc. repr esentent les niveaux des menus correspondants. La propri et e ` partir duentryLevel pr ecise le niveau de larborescence des pages par rapport au rootline a ` compter les niveaux des menus. La conguration TS ci-dessus va donc quel vous commencez a ` un niveau commenc cr eer un menu a ant au niveau 0. Notez que dans notre exemple, nous utilisons un objet de menu TMENU qui cr ee des liens de type texte. Comme nous lavons d ej` a mentionn e, dautres types de menus sont support es par TYPO3. 298

5.10 Menus
[Link].1 = TMENU # Le deuxi` eme niveau du menu est un menu graphique. [Link].2 = GMENU

Les types de menus suivants sont disponibles dans TYPO3 : TMENU Afche un menu bas e sur du texte. GMENU ` Un GMENU est un menu graphique . Les images sont g en er ees automatiquement a partir des titres des pages. GMENU_LAYERS/TMENU_LAYERS Les GMENU_LAYERS et les TMENU_LAYERS ajoutent des propri et es suppl emen` lobjet de menu GMENU ou TMENU correspondant, et lafchent avec taires a ` cause des diff des couches DHTML. A erentes interpr etations des standards par les diff erentes versions des navigateurs, les objets de menu ne sont pas utilis es pour les anciens navigateurs et ne le sont que dans une certaine mesure pour les nouveaux. GMENU_FOLDOUT tend lobjet de menu GMENU. Il cr ` deux Un GMENU_FOLDOUT e ee un menu a niveaux, s etend ou se referme sans devoir recharger la page. IMGMENU Lobjet IMGMENU cr ee un menu bas e sur une image avec des zones sensibles. JSMENU Un JSMENU cr ee un menu bas e sur une liste de s election. Outre la propri et e entryLevel, un HMENU admet plusieurs autres propri et es qui contr olent lafchage du menu. Le nombre dentr ees du menu est sp eci e via les propri et es minItems et maxItems, et avec begin, vous d enissez la premi` ere entr ee du menu. Avec excludeUidList, vous pouvez exclure certaines pages du menu. ` d special est une propri et e puissante qui vous aide a enir les menus selon une structure diff erente de celle de larborescence des pages. Vous pouvez cr eer des menus qui afchent le rootline, montrent les pages contenant certains mots-cl es ou donnent une liste des sous-pages ` la section 5.10.8. des pages sp eci ees. Toutes les options possibles sont pass ees en revue a Les objets de menu eux-m emes (TMENU, GMENU, . . .) ont des etats communs mais ont aussi tats. Ils poss` leurs propres e edent par exemple tous le statut addParams, qui ajoute des param` etres suppl ementaires au lien du menu. ` lexception du JSMENU, tous les autres objets de menu de la s A erie TMENU, GMENU et tats comportant des e l IMGMENU partagent des e ements de menu. NO (normal) repr esente le tre d tat par d tats doivent cas normal qui doit toujours e eni comme e efaut. Tous les autres e tre activ tre utilis tre sp e es pour e es, et leur comportement doit e eci e individuellement. NO L el ement du menu dans l etat normal NO. La d enition est obligatoire. 299

R ef erence

401761

R ef erence

478459

5 TypoScript

IFSUB ACT

Le statut IFSUB est actif si l el ement de menu a des sous-pages. L el ement de menu a le statut ACT sil est situ e dans le rootline de la page afch ee.

ACTIFSUB Si l el ement de menu est situ e dans le rootline de la page actuelle et sil a des sous-pages ` afcher dans un menu, alors il a le statut ACTIFSUB. a CUR USR La page courante a le statut CUR. L etat USR sapplique aux pages dont lacc` es est restreint par les groupes dutilisateurs tats IFSUB, ACT et CUR. du frontend. Il a priorit e sur les e Le statut SPC sapplique en particulier au type de page Spacer et il est utilis e sp ecialement pour structurer les menus. SPC ne pr evoit pas de fonctionnalit e pour les effets de survol puisquil ne contient pas de lien.

SPC

USERDEF1 tats USERDEF1 et USERDEF2 sont d Les e enis dans un script s epar e (voir les propri et es HMENU/special = userdened et .itemArrayProcFunc). USERDEF2 Voir USERDEF1. RO Permet de cr eer une variation des effets de survol (rollover) pour l el ement de menu. tre ajout ` la Le statut RO nest pas disponible pour beaucoup dobjets et doit donc e ea r ef erence de ces objets.

l Les e ements de menu sont introduits ci-dessous en se servant de lapplication qui nous sert dexemple. Seule une partie des propri et es disponibles seront utilis ees. Consultez le document TSref pour obtenir une vue densemble de toutes les autres propri et es.

5.10.2 Menus de texte (TMENU)


R ef erence

623534

` partir du titre de page ou de navigation de len-t Un TMENU cr ee un menu de texte a ete. Les titres sont automatiquement afch es sous forme de liens. Cest vous qui en congurez lapparence. Lavantage principal des menus bas es sur du texte est leur rapidit e de chargement. vidence une caract Nous voudrions mettre en e eristique particuli` ere de lobjet de menu TMENU : les propri et es before et after ont les m emes propri et es que stdWrap. Mais la sous-propri et e ` une erreur de concepeld nest pas disponible directement pour ces derni` eres. Ceci est d ua t tion qui a e e laiss ee dans TYPO3, par souci de r etrocompatibilit e. Pour cette raison, vous viter cette propri ` sa place la propri devriez e et e et utiliser a et e data (par exemple [Link]= page:title).

300

5.10 Menus

Exemple : navigation principale B2C au nom de temp.navigation_html pour la navigaDans le site B2C , un gabarit TS est cr ee tion horizontale principale. Il utilise le type de menu TMENU. tats des e l Les e ements de menu se distinguent par la couleur de leur police de caract` ere et par leurs ic ones servant de puces. Le r esultat de la gure dans le frontend montre la page active, enements . Accueil , et les effets de survol, via l el ement de menu Ev
Figure 5.69: ` un niveau TMENU a en tant que navigation principale

` laide du cObject HMENU et de la propri Le menu est d eni a et e entryLevel=0.


temp.navigation_html = HMENU temp.navigation_html.entryLevel = 0

Le chemin dobjet temp.navigation_html.1 est un objet de type TMENU.


temp.navigation_html.1 = TMENU

Tout dabord, le comportement du statut NO est sp eci e. En activant la propri et e ATagBeforeWrap, la balise de lien est plac ee autour de lenveloppe. La propri et e linkWrap entoure le texte de la balise <font> en incluant la classe CSS. La propri et e case=lower de la fonction ` afcher le texte en minuscules. Avec beforeImg, vous placez une image devant stdWrap sert a chaque lien. Si limage doit aussi servir de lien, vous devez imposer beforeImgLink=1. Pour le TMENU, un statut pour les effets de survol est activ e lorsque RO=1 et limage correspondante est remplac ee par la valeur de propri et e beforeROImg.
temp.navigation_html.1 { NO { ATagBeforeWrap = 1 linkWrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="2" color=" #666666" class="navi_no"> |&nbsp;&nbsp;&nbsp;</font> [Link] = lower beforeImg = fileadmin/images/icons/navi_no.gif beforeROImg = fileadmin/images/icons/navi_ro.gif RO = 1 }

l V eriez le comportement des e ements de menu dans l etat ACT (qui signie quils sont situ es dans le rootline de la page active) en y copiant lobjet NO. Seules les propri et es linkWrap et cras ` ces e l beforeImg sont e ees, an de donner a ements une autre couleur ou une classe CSS tre activ diff erente ainsi quune autre image pour l etat actif, via wrap. L etat doit e e en posant ACT = 1.
ACT < .NO ACT {

301

5 TypoScript
linkWrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="2" color=" #333333" class="navi_act"> |&nbsp;&nbsp;&nbsp;</font> beforeImg = fileadmin/images/icons/navi_act.gif } ACT = 1 }

Int egrez le gabarit TS et lobjet temporaire dans le gabarit principal du site B2C , et v eriez lafchage dans le frontend. Exemple : navigation principale B2B/B2E Les sites B2B et B2E sont bas es sur des balises <div> dont la disposition est enti` erement contr ol ee par des feuilles de style en cascade. Ils conviennent particuli` erement pour des sites Web r epondant aux normes daccessibilit e. Pour les m emes raisons, la navigation principale e avec le gabarit TS temp.navigation_autoparser_tswrap. pour les deux sites est cr ee ` la place des balises <font>, chaque e l A ement de menu est envelopp e comme une entr ee de liste avec wrapItemAndSub=<li>|</li>. Le menu entier est entour e par la balise HTML pour les ` savoir wrap=<ul>|</ul>. Le reste de la proc listes, a edure est le m eme que pour la navigation principale dans B2C . Les propri et es de l etat NO sont copi ees dans l etat ACT et une seule classe CSS est congur ee pour le lien en utilisant certains param` etres (ATagParams=class= "navi-active").
temp.navigation_autoparser_tswrap = HMENU temp.navigation_autoparser_tswrap.1 = TMENU temp.navigation_autoparser_tswrap.1 { wrap = <ul>|</ul> NO { wrapItemAndSub = <li>|</li> [Link] = lower } ACT < .NO [Link] = class="navi-active" ACT = 1 }

` pr A esent il vous suft de d enir lapparence du menu via le chier CSS inclus dans le gabarit ditez les principal. Ouvrez le chier correspondant avec le module Fichier Fichiers et e styles d esir es.
ul { margin: 0; padding: 0;
} #navi li, #Rootline li { display: inline; margin: 3px; } #navi a:link, #navi a:visited { padding: 0 5px 0 10px;

302

5.10 Menus
background: url(../images/icons/[Link]) no-repeat left; text-decoration: none; color: #666;
} ...

Le r esultat dans le frontend est le m eme que celui de lapplication B2C . Exemple : sous-navigation dans B2C Un TMENU est impl ement e dans le gabarit temp.navigation_html pour la sous-navigation. l Les e ements de menu des premier et deuxi` eme niveaux sont arrang es en tableau et s epar es par diff erentes lignes. L etat actif du premier niveau se distingue gr ace au titre en majuscules. Pour le deuxi` eme niveau, de petites ic ones sont afch ees devant les titres. Dans le frontend, la navigation secondaire sur deux niveaux et les effets de survol apparaissent ` la gure 5.70. comme a
Figure 5.70: La navigation secondaire TMENU sur deux niveaux

La navigation secondaire commence au niveau 1, ce qui est traduit par le code entryLevel=1.
temp.subnavigation_html = HMENU temp.subnavigation_html.entryLevel = 1

Les pages m eta Accueil , Impression , Plan du site et Contact du Dossier Syst` eme ` la propri Fonctions ne sont pas afch ees si vous donnez une liste dID de pages a et e ex` ces pages le type Not in menu. cludeUidList. Toutefois, il est plus facile de donner a
temp.subnavigation_html.excludeUidList = 122,121,120,119

Le niveau 1 du menu est un TMENU.


temp.subnavigation_html.1 = TMENU

` trois colonnes. Ce niveau est mis en forme par une table a 303

5 TypoScript
temp.subnavigation_html.[Link] = <table width="170" cellspacing="0" cellpadding="0 " border="0"><tr><td width="7"><img src="[Link]" width="7" height="1" alt="" bo rder="0"></td><td width="11"><img src="[Link]" width="11" height="1" alt="" bor der="0"></td><td width="152"><img src="[Link]" width="152" height="1" alt="" bo rder="0"></td></tr>|</table>

tats NO et ACT sont congur l Les e es pour que chaque e ement de menu soit afch e, via la propri et e allWrap, dans une ligne diff erente de la table, et que limage soit une ligne s eparatrice. l La propri et e wrapItemAndSub permet dinclure les e ements de sous-menu de niveau 2, mais ce nest pas ce que nous voulons faire ici.
temp.subnavigation_html.1 { NO { linkWrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="2" color=" #666666" class="subnavi_no"> &nbsp;&nbsp; |</font> [Link] = lower allWrap = <tr><td>&nbsp;</td><td colspan="2"><img src="fileadmin/images/layout /subnavi1_line.gif"><br /> |</td></tr> ATagBeforeWrap = 1 } ACT < .NO [Link] = upper ACT = 1 }

l Le second niveau du menu est aussi un TMENU. Les e ements de menu du second niveau ont ` la propri leurs propres ic ones et sont dispos es par une mise en page HTML gr ace a et e allWrap.
temp.subnavigation_html.2 = TMENU temp.subnavigation_html.2 { NO { linkWrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="2" color=" #666666" class="subnavi2_no"> |</font> [Link] = lower allWrap =<tr><td colspan="2">&nbsp;</td><td><img src="fileadmin/images/layout/ subnavi2_line.gif"><br /> |</td></tr> beforeImg = fileadmin/images/icons/subnavi2_no.gif beforeROImg = fileadmin/images/icons/subnavi2_ro.gif RO = 1 ATagBeforeWrap = 1 } ACT < .NO [Link] = fileadmin/images/icons/subnavi2_act.gif ACT = 1 }

` nouveau dans Incorporez le gabarit TS dans le gabarit principal du site B2C et retournez a le frontend an de visualiser le r esultat .

5.10.3 Menus graphiques (GMENU)


R ef erence

193130

` un TMENU dans son fonctionnement, a ` ceci pr` Un GMENU est similaire a es quil cr ee un lien

304

5.10 Menus

sous forme dimage pour chaque page ou titre de navigation via la fonction TYPO3 interne du GIFBUILDER. Si ce type de menu est plus riche en termes de possibilit es, il augmente cependant l tats les temps de chargement de lapplication, puisque tous les e ements de menu et leurs e tre inclus en tant quimages. doivent e Exemple : navigation secondaire dans B2C pour la sous-navigation En guise de deuxi` eme illustration, un simple menu graphique est cr ee dans le site B2C avec le gabarit temp.subnavigation_html_gmenu. Le premier niveau l aligne les e ements de menu sur la gauche et trace deux lignes autour deux. Le second niveau ` droite et comprend une ligne sur le c est align ea ot e droit. Les pages actives sont mises en couleurs (voir la gure 5.71).
Figure 5.71: Sous-navigation sur deux niveaux avec un GMENU

Cr eez le cObject HMENU en imposant entryLevel=1 et faites du premier niveau du menu un GMENU.
temp.subnavigation_html_gmenu = HMENU temp.subnavigation_html_gmenu.entryLevel = 1 temp.subnavigation_html_gmenu.1 = GMENU

Pr ecisez dabord les propri et es de lobjet NO ; dans les objets GMENU, il sagit, par d enition, du type GIFBUILDER.
temp.subnavigation_html_gmenu.1 { NO {

l Chaque e ement de menu se termine par la balise <br />. La taille de limage, XY=150,40, et la couleur de larri` ere-plan, backColor=white, sont d enies par les propri et es de la fonction GIFBUILDER.
wrap = |<br /> XY = 150,40 backColor = white

R ef erence

023806

s via une liste num l Les objets du GIFBUILDER sont cr ee erique dans laquelle chaque e ement est du type GifBuilderObj. De cette mani` ere, l el ement de menu du premier niveau est compos e de plusieurs objets. 305

5 TypoScript

` Les objets 7 et 8 cr eent chacun un GifBuilderObj du type BOX et ceux-ci se chevauchent a cause de la hi erarchie.
# bo te grise 7 = BOX [Link] = 16,18,120,20 [Link] = #DFDFDF # bo te blanche 8 = BOX [Link] = 16,18,119,19 [Link] = #FFFFFF

Cest parce que les propri et es dimensions ne diff` erent que dun pixel que vous ne voyez que de nes lignes grises sur les bords de la bo te contenant le menu. Lobjet 10 est un GifBuilderObj de type TEXT et il contient le type de donn ees stdWrap. La ligne de code [Link]=title permet dafcher le titre de la page. La propri et e fontFile pointe vers la police de caract` ere TrueType utilis ee dans la cr eation dimages ; celle-ci doit dabord tre charg e ee dans le syst` eme de chiers sous leadmin/. . . . La taille des polices de caract` ere et leur couleur sont d enies dans les propri et es fontSize et fontColor. Lespacement est d eni en coordonn ees x/y par la propri et e offset et lalignement du texte par align.
10 = TEXT [Link] = title [Link] = fileadmin/fonts/[Link] [Link] = 11 [Link] = #FFFFFF [Link] = 30,31 [Link] = left

La propri et e niceText qui afche plus clairement les petites lettres ne fonctionne pas toujours galement des comme pr evu, selon la version dImageMagick que vous poss edez ; elle mobilise e ressources du serveur pour cr eer les images.
#[Link] = 1

Le GifBuilderObj du type SHADOW permet de cr eer des ombres dont la position est x ee par les coordonn ees de la propri et e offset, tandis que le focus et la transparence sont d etermin es par blur et opacity.
# Ombre pour le texte [Link] = 1,1 [Link] = 80 [Link] = 40

Le GifBuilderObj TEXT na pas de propri et e caractre gras, mais vous pouvez simuler celle-ci en repassant le texte une seconde fois (20<.10) ou en imposant iterations=2.
# Simulation des caract` eres gras 20 < .10
}

306

5.10 Menus

` inclure une vraie police de Une autre possibilit e, qui semble g en eralement meilleure, consiste a caract` ere gras ([Link]=leadmin/fonts/[Link]). l Dans l etat RO=1 (effet de survol) des e ements de menu, seule la couleur de la police de caract` ere est remplac ee.
RO < .NO RO { [Link] = #FFCC66 20 > 20 < .10 } RO = 1

` l ` un autre GifBuilderObj BOX. L el ement de menu a etat actif ACT est associ ea
ACT < .RO ACT { # Ombre 5 = BOX [Link] = 18,20,120,20 [Link] = #D3D3D3 } ACT = 1
}

Pour construire le menu de second niveau, on commence par linitialiser en copiant toutes les donn ees du menu de niveau 1.
temp.subnavigation_html_gmenu.2 = GMENU temp.subnavigation_html_gmenu.2 < temp.subnavigation_html_gmenu.1 temp.subnavigation_html_gmenu.2 { NO {

` cr cras La taille de limage a eer est e ee.


XY = 150,24

Les propri et es 7 et 8 (bo tes grise et blanche) sont supprim ees.


7 > 8 >

dans lobjet 8 avec une largeur de 1 pixel et Un nouveau GifBuilderObj de type BOX est cr ee une hauteur de 24 pixels.
# ligne a ` droite 8 = BOX [Link] = 136,0,1,24 [Link] = #DFDFDF

cras Plusieurs propri et es du GifBuilderObj 10 de type TEXT sont e ees. 307

5 TypoScript
[Link] = -25,16 [Link] = 10 [Link] = right 20 < .10
}

crase seulement la couleur de la L etat RO du niveau 2 reprend les propri et es de lobjet NO et e police de caract` ere.
RO > RO < .NO RO { [Link] = #FFCC66 20 > 20 < .10 } RO = 1

L etat actif ACT reprend les propri et es de lobjet RO.


ACT < .RO ACT = 1
}

` pr Le menu est a esent termin e. Int egrez le gabarit TS et lobjet temporaire dans le gabarit principal et v eriez le r esultat dans le frontend.

5.10.4 Menus bas es sur des couches (TMENU_LAYERS/ GMENU_LAYERS)


R ef erence

620108

R ef erence

599829

Les objets de menu TMENU_LAYERS et GMENU_LAYERS se basent respectivement sur TMENU tendant leurs propri et GMENU tout en e et es. Ils cr eent tous les deux un outil de navigation sur plusieurs niveaux via des couches DHTML et JavaScript. Pour cela, int egrez leurs fonctionnalit es avec le script media/scripts/tmenu_layers.php et/ou media/scripts/gmenu_layers.php. Lorsque vous choisissez le menu, souvenez-vous du probl` eme de la compatibilit e des navigateurs. En particulier, les anciens navigateurs ne supportent pas les versions du W3C Document Object Model (DOM) ou les supportent seulement dans une certaine mesure. ` jour, tels quOpera 7, supportent les versions r Les navigateurs a ecentes du DOM. Si vous voulez utiliser un TMENU_LAYERS, il est judicieux de modier les fonctions JavaScript correspondantes dans le chier /media/scripts/[Link] (voir la r ef erence ci-contre). Exemple : navigation principale dans B2C ` couche graphique est cr dans Pour la navigation principale dans le site B2C , un menu a ee le gabarit temp.navigation_html_gmenu_layers. l Si vous survolez les e ements de menu du premier niveau, vous devriez voir la s election des sous-pages dans une couche. Elle reste pr esente si une page du second niveau est active. Les l ic ones devant les e ements de menu et la couleur des polices de caract` ere changent lors du survol et lorsque l etat est actif.

308

5.10 Menus

` la gure suivante. Le r esultat est visible a


Figure 5.72: Navigation principale avec un GMENU_LAYERS

Int egrez dabord la biblioth` eque gmenu_layers.php et cr eez ensuite un menu hi erarchique dans un objet temporaire (HMENU). Le premier niveau est un objet de menu GMENU_LAYERS.
includeLibs.gmenu_layers = media/scripts/gmenu_layers.php temp.navigation_html_gmenu_layers = HMENU temp.navigation_html_gmenu_layers.1 = GMENU_LAYERS

` pr D eterminez a esent le comportement de la couche. ` la balise <div> utilis La propri et e layerStyle permet dassigner les attributs CSS a ee. Dans ce ` 195 pixels. lockPosition xe la position des couches qui, d` cas, la position en y est x ee a es ` la position de la souris. Choisissez x pour les menus horizontaux et y lors, ne se r ef` ere plus a ` partir pour les menus verticaux. xPosOffset d enit le d ecalage de la couche sur laxe des x a de l el ement de menu. Cette propri et e se r ef` ere selon que lockPosition est activ ee ou non ` la position a ` partir de laquelle soit au coin sup erieur gauche de chaque image du menu, soit a t elle a e e activ ee.
temp.navigation_html_gmenu_layers.1 { layerStyle = position:absolute;left:0;top:195;width:10px;VISIBILITY:hidden; xPosOffset = -215 lockPosition = x

tre activ La propri et e expAll=1 de lobjet de menu GMENU devrait e ee dans tous les cas, pour que le deuxi` eme niveau puisse aussi b en ecier des effets de survol. Sinon, la navigation en couches ne fonctionnera pas.
expAll = 1

La propri et e displayActiveOnLoad vous garantit que le menu en couches reste visible, m eme pour une page active du second niveau.
displayActiveOnLoad = 1

Le niveau 1 du menu est d eni comme un GMENU, comme dans lexemple de la navigation secondaire graphique dans le site B2C . Dabord nous activons l etat normal NO :
NO { backColor = white

l ` partir de la longueur des La taille des e ements de menu est calcul ee automatiquement a images du tableau GifBuilderObj, dans ce cas, avec le propri et e XY du GIFBUILDER. La donn ee ` [10.w]+40 pixels et celle de Y a ` 30 pixels. x,y +calc permet cet acc` es et xe la valeur de X a 309

5 TypoScript

` laquelle nous ajoutons [10.w] repr esente la largeur w de lobjet 10 de la liste num erique, a 40 pixels. De m eme, la hauteur de lobjet serait param etr ee par le code [10.h].
XY = [10.w]+40, 30

Les autres propri et es sont d ej` a connues. Deux GifBuilderObj du type BOX se chevauchant, 5 et s. Lobjet 10 afche le titre de la page et le met en forme. 7, sont cr ee
5 = BOX [Link] = 2,15,5,1 [Link] = #666666 7 = BOX [Link] = 4,13,1,5 [Link] = #666666 10 = TEXT [Link] = title [Link] = lower [Link] = 14,18 [Link] = fileadmin/fonts/[Link] [Link] = 12 [Link] = #666666
}

L etat RO est activ e pour les effets de survol. Les propri et es de lobjet NO sont reprises et certaines valeurs de couleurs sont modi ees.
RO < .NO RO { [Link] = #E6B800 [Link] = #E6B800 [Link] = #E6B800 } RO = 1

l tre pr Les e ements de menu, lorsquils sont actifs, devraient e ec ed es dun cadre jaune autour dun signe moins. Pour ce faire, ajoutez deux carr es (un jaune et un blanc) qui se chevauchent ` la liste num a erique, sous la forme des GifBuilderObj 1 et 3 de type BOX, et supprimez lobjet 7 (le plus devient alors un moins).
ACT < .NO ACT { # bo te autour du signe --> carr e jaune ou blanc 1 = BOX [Link] = 0,11,9,9 [Link] = #E6B800 3 = BOX [Link] = 1,12,7,7 [Link] = white # non |

310

5.10 Menus
7 > } ACT = 1
}

l Le deuxi` eme niveau du menu afche les e ements de menu sous forme dun GMENU. Cela napporte aucune nouvelle propri et e : on ne lutilise ici que dans un but pratique.
temp.navigation_html_gmenu_layers.2 = GMENU temp.navigation_html_gmenu_layers.[Link] = |<br /> temp.navigation_html_gmenu_layers.2 { NO { backColor = white XY = 120, 19 # lignes de gauche et du dessous 5 = BOX [Link] = 0,0,1,19 [Link] = #CCCCCC 7 = BOX [Link] = 0,18,120,1 [Link] = #CCCCCC 10 = TEXT [Link] = fileadmin/fonts/[Link] [Link] = 11 [Link] = title [Link] = lower [Link] = 12,10 [Link] = #666666
}

RO < .NO [Link] = #E6B800 RO = 1 ACT < .NO [Link] = #E6B800 ACT = 1
}

tendez les sous-menus pour les effets de survol et gardezObservez le menu dans le frontend, e les ouverts pour les pages actives.

5.10.5 GMENU_FOLDOUT
` deux niveaux et g Lobjet de menu GMENU_FOLDOUT se limite a en` ere une navigation dynamique via JavaScript. Pour le premier niveau du menu, utilisez un menu graphique et pour le second, choisissez soit un menu graphique, soit un menu de texte. La fonctionnalit e est int egr ee avec le script media/script/gmenu_foldout.php. Noubliez pas que la compatibilit e est restreinte pour les anciens navigateurs lorsque vous utilisez ce type de navigation.
R ef erence

623360

311

5 TypoScript

Exemple : sous-navigation B2C En guise dillustration, examinons la navigation secondaire du site B2C , qui a jusqu` a t pr esent e e impl ement ee avec un TMENU. Cr eez un nouveau gabarit TS, temp.subnavigation_ l html_gmenu_foldout. Ceci devrait entra ner le d eploiement dynamique des e ements de sousmenu du premier niveau lorsque vous cliquez dessus. La disposition est la m eme que celle du menu de texte et elle appara t comme dans la gure suivante :
Figure 5.73: Navigation secondaire sur deux niveaux avec un GMENU_FOLDOUT

Les deux niveaux du menu sont construits avec lobjet de menu GMENU. Int egrez dabord la biblioth` eque des fonctions requises, gmenu_foldout.php, via includeLibs.
includeLibs.gmenu_foldout = media/scripts/gmenu_foldout.php

D enissez un cObject temporaire de type HMENU. La propri et e entryLevel=1 permet de d emarrer le menu au premier niveau du site Web. Pour le premier niveau, nous d enissons lobjet de menu GMENU_FOLDOUT.
temp.subnavigation_html_gmenu_foldout = HMENU temp.subnavigation_html_gmenu_foldout.entryLevel = 1 temp.subnavigation_html_gmenu_foldout.1 = GMENU_FOLDOUT

An que les sous-pages du second niveau soient toujours afch ees, vous devez activer la propri et e expAll de lobjet de menu. menuOffset place le premier niveau du menu dans le coin sup erieur gauche de la page. La propri et e subMenuOffset permet de d enir le d ecalage entre les sous- el ements du menu et l el ement principal correspondant. La couleur de larri` ere-plan est d enie au moyen de la propri et e menuBackColor et la hauteur et la largeur respectivement avec menuWidth et menuHeight.
temp.subnavigation_html_gmenu_foldout.1 { expAll = 1 menuOffset = 17, 202 subMenuOffset = 14,25 menuBackColor = white menuWidth = 164 menuHeight = 800

312

5.10 Menus

Si vous voulez que le sous-menu se ferme lorsquun autre menu principal est appel e, xez stayFolded=0. La vitesse douverture dynamique du sous-menu est d enie via le nombre d etapes ; foldSpeed=1 afche imm ediatement l etat nal. Avec displayActiveOnLoad=1, les sous-menus souvrent automatiquement si la page courante est situ ee dans ce sous-menu.
stayFolded = 0 foldSpeed = 6 displayActiveOnLoad = 1

L etat normal NO est d eni pour le premier niveau. La couleur de larri` ere-plan et sa taille sont sp eci ees.
NO { backColor = #FFFFFF XY = 164, 22

Lobjet 3 de la liste num erique ins` ere une image sous la forme dun GifBuilderObj IMAGE qui vidence les e l met en e ements de menu.
3 = IMAGE [Link] = fileadmin/images/layout/subnavi1_line.gif [Link] = 3

Lobjet 10 afche le titre de la page et le met en forme.


10 = TEXT [Link] = title [Link] = lower [Link] = 29,15 [Link] = #666666 [Link] = fileadmin/fonts/[Link] [Link] = 11
}

L etat actif ACT reprend de nouveau les propri et es de lobjet NO et ne change que quelques ` afcher le titre de la page en majuscules (case=upper). d etails qui servent a
ACT < .NO ACT { [Link] = upper } ACT = 1
}

Le deuxi` eme niveau du menu, temp.subnavigation_html_gmenu_foldout.2, est d eni de la m eme mani` ere. Contrairement au niveau 1, vous avez ici le choix entre un TMENU et un t tats RO et ACT sont marqu GMENU. Le GMENU a e e utilis e dans cet exemple-ci, et ses e es par des ic ones diff erentes.
temp.subnavigation_html_gmenu_foldout.2 = GMENU temp.subnavigation_html_gmenu_foldout.2 { NO {

313

5 TypoScript
XY = 150,18 backColor = white 3 = IMAGE [Link] = fileadmin/images/layout/subnavi2_line.gif [Link] = 5 10 = TEXT [Link] = title [Link] = lower [Link] = 24,13 [Link] = #666666 [Link] = fileadmin/fonts/[Link] [Link] = 11
} RO < .NO RO { 12 = IMAGE [Link] = fileadmin/images/icons/subnavi2_ro.gif [Link] = 15,2 } RO = 1

ACT < .RO ACT { [Link] = fileadmin/images/icons/subnavi2_act.gif } ACT = 1


}

Ins erez le gabarit TS et lobjet temporaire dans le gabarit principal du site B2C et v eriez viter que chaque page ne se recharge a ` chaque ouverture le r esultat dans le frontend. Pour e du sous-menu, cr eez des pages dans le premier niveau de votre application qui admettent des sous-pages sans contenu, comme le type de pages Shortcut. La propri et e dontLinkIfSubmenu ouvre le second niveau du menu sil a des sous-pages, mais nafche pas cette page sous forme de lien. Le processus de chargement est omis.
... dontLinkIfSubmenu = 1

Les pages sans sous-pages sont afch ees comme dhabitude avec leur lien.

5.10.6 ImageMaps (IMGMENU)


R ef erence

610406

` partir de limage en arri` Lobjet de menu IMGMENU g en` ere un menu a ere-plan et des titres des ` afcher. Pour les e l pages du niveau de menu a ements de menu, des zones sensibles sont con l gur ees avec des balises <area>, cr eant des liens vers les pages correspondantes. Les e ements de menu sont des objets GIFBUILDER que vous pouvez structurer comme vous lentendez. Pour tats NO, ACT, SPC, etc., GIFBUILDER cr les e ee des images diff erentes dans chaque cas.

314

5.10 Menus

Exemple : navigation principale dans B2C ` pr tre impl Pour le site B2C , une nouvelle navigation principale peut a esent e ement ee avec lobjet de menu IMGMENU via un nouveau gabarit TS, temp.navigation_imgmenu. Le r esultat suivant est alors g en er e dans le frontend.
Figure 5.74: Navigation principale avec un IMGMENU

Le menu repr esente loutil de navigation principale, cest pourquoi il d emarre au niveau Root l level : entryLevel=0. La propri et e maxItems pr ecise que six e ements de menu au maximum peuvent safcher.
[Link] = HMENU [Link] = 0 [Link] = 6

Le menu nadmet quun niveau, un IMGMENU. Sp eciez limage de larri` ere-plan sur laquelle est afch e le titre au moyen de la propri et e main du type de donn ees GIFBUILDER. Comme nous lavons d ej` a montr e, les objets du GIFBUILDER sont g en er es sous la forme dune l liste num erique dont chaque e ement a le type de donn ees GifBuilderObj. Lobjet 10 cr ee un GifBuilderObj de type IMAGE, qui lie limage voulue avec la propri et e le.
[Link].1 = IMGMENU [Link].1 { main.10 = IMAGE [Link] = fileadmin/images/layout/bg_imgmenu.gif

R ef erence

023805

La taille originale de limage est entr ee dans les propri et es XY et la palette de couleurs de ` 16 couleurs via reduceColors, ce qui a pour effet de r limage est r eduite a eduire la taille du chier.
[Link] = [10.w], [10.h] [Link] = 16

` partir du coin sup D enissez le point de d epart du menu a erieur gauche de limage avec dWorkArea.
dWorkArea = 12,22

l L etat normal du menu est d eni. La propri et e distrib sp ecie la distance ente les e ements de menu. Lobjet 10 afche le titre de la page comme un GifBuilderObj TEXT et d enit sa pr esentation.
NO { distrib = textX+25, 0 10 = TEXT [Link] = title

315

5 TypoScript
[Link] = 12 [Link] = #666666 [Link] = fileadmin/fonts/[Link] [Link] = 1 [Link] = 2,0

` une propri imgMap vous permet dacc eder a et e de GIFBUILDER qui cr ee une carte dimages ` partir du GifBuilderObj TEXT. La propri largit (imagemap) pour le chier image a et e explode e la zone sensible avec les coordonn ees x/y.
[Link] = 3,2

l Le signe plus qui pr ec` ede chaque e ement de menu est mis en pratique via deux GifBuilderObj de type BOX.
# | 20 = BOX [Link] = -5,-6,1,5 [Link] = #666666 # 30 = BOX [Link] = -7,-4,5,1 [Link] = #666666
}

L etat actif ACT reprend toutes les propri et es de lobjet NO. Lobjet 20 de la liste num erique est avec les objets 40, 50, 60 et 70. supprim e ( plus devient moins ), et un cadre est cr ee
ACT < .NO ACT { 20 > #- en dessous 40 = BOX [Link] = -9,0,9,1 [Link] = #666666 # - au-dessus 50 < .40 [Link] = -9,-8,9,1 # | ` a gauche 60 < .40 [Link] = -9,-8,1,9 # | ` a droite 70 < .40 [Link] = -1,-8,1,9 } ACT = 1
}

Le menu est termin e. Int egrez le gabarit TS temp.navigation_imgmenu et lobjet temporaire [Link] dans le gabarit principal et testez le r esultat dans le frontend. 316

5.10 Menus

5.10.7 Menus JavaScript (JSMENU)


L el ement de menu JSMENU congure une navigation pour laquelle les pages sont s electionn ees via deux listes d eroulantes de menus qui d ependent les unes des autres. Chaque menu de s election repr esente un niveau du site Web. La caract eristique la plus importante de ce menu ` un simple menu de s par rapport a election est que les niveaux les plus bas sont repris avec les entr ees correspondantes qui d ependent du plus haut niveau s electionn e, sans que la page ne tre recharg doive e ee dans le navigateur. Un JSMENU peut afcher jusqu` a cinq niveaux (cinq listes d eroulantes de menus). Exemple : navigation principale dans B2B Dans cet exemple, nous modions la navigation principale du site B2B avec le gabarit tat nal TS temp.navigation_tswrap_jsmenu. La gure suivante montre le menu dans son e lorsque la sous-page Produit 1 est s electionn ee.
Figure 5.75: Le menu principal en JSMENU
R ef erence

421175

D enissez lobjet temporaire temp.jsmenu_tswrap comme un cObject HMENU et le premier niveau du menu comme un JSMENU.
temp.jsmenu_tswrap = HMENU temp.jsmenu_tswrap.1 = JSMENU

` afcher est d ` laide de la propri Le nombre de niveaux a etermin ea et e levels=2.


temp.jsmenu_tswrap.1 { levels = 2

La liste num erique vous permet de d enir le comportement de diff erents niveaux. La liste d eroulante des menus de niveau 1 est s epar ee de la liste d eroulante pour le niveau suivant ` lavance la page active, alors par un s eparateur espace vide . Si vous voulez s electionner a l posez la valeur showActive=1. Si aucune page nest s electionn ee, alors le premier e ement de ` la liste d eroulante na normalement pas de valeur. Dans ce cas, vous pouvez donner un nom a l ` la propri cet e ement gr ace a et e rstLabel.
1 { wrap = |&nbsp; showActive = 1 firstLabel = Menu: }

317

5 TypoScript

cras Les valeurs du premier niveau passent au deuxi` eme niveau et seul leur nom est e e.
2 < .1 [Link] = Sous-menu:
}

Le menu est termin e : vous pouvez linclure dans le gabarit principal du site B2B .

5.10.8 Menus .special


R ef erence

743914

Le cObject HMENU afche par d efaut la structure de la page sous la forme dune arborescence, ` la propri mais il peut g en erer dautres structures gr ace a et e special. Par exemple, un menu ` ceci : rootline afche les pages du rootline. Une conguration simple ressemble a
[Link] = HMENU [Link] = 0 [Link] = rootline [Link] { 1 = TMENU [Link] = |/&nbsp; }

Ce code produit le r esultat suivant :


B2C-Accueil/ Produits/ Produit 2/

La propri et e special d etermine la structure particuli` ere que le HMENU doit cr eer. Les types suivants sont disponibles. Les propri et es de chaque type de menu se trouvent dans le document TSref. directory ` partir des sous-pages de lID des pages sp Le type directory g en` ere un menu a eci ees ` partir de la page courante. ou a list list vous permet de cr eer un menu pour des pages pr ecises d etermin ees par leur ID. updated t ` jour ou non, utilisez Si vous voulez afcher des pages selon quelles ont e e mises a updated. Rootline ` la page active aide dhabitude lutilisateur a ` garder une Le chemin de la page racine a vue densemble des applications complexes. Ce menu rootline est g en er e par le type rootline. browse ` travers les pages de diff Le type browse vous permet de naviguer a erentes mani` eres (pr ec edent, suivant, . . .) keywords Le type keywords cr ee un menu de pages qui ont un ou plusieurs mots-cl es en commun avec la page courante dans len-t ete de page. Cela facilite lafchage des pages interd ependantes. 318

5.10 Menus

userdened ` contr Le type userdened sert a oler les menus avec votre propre script PHP. La r ef erence TSref contient un exemple d etaill e de ce menu. Exemple : directory Presque chaque application comprend des pages ne devant pas appara tre dans le contexte de l la navigation principale. Dans lapplication exemple BT3 , ceci sapplique aux e ements de menu m eta Accueil , Impression , Plan de site et Contact . Ils doivent toujours tre pr e esents et sont stock es ici dans le Dossier Syst` eme Fonctions de larborescence des pages. Utilisez le type de menu directory pour lafchage. tre structur Le menu doit e e comme sur la gure suivante, et plac e en dessous de la navigation secondaire, sur la gauche de la page.
Figure 5.76: Information m eta e par la propri cr ee et e [Link]

Cr eez votre propre gabarit TS temp.metas_html pour le site B2C et d enissez un HMENU comme objet temporaire. La propri et e special rec oit le type de menu d esir e avec la valeur directory. La propri et e value reprend les ID des pages auxquelles le menu se r ef` ere. Puisque la valeur fait r ef erence aux ID des pages du Dossier Syst` eme Fonctions, cest une constante ` la valeur. d enie en cons equence qui est assign ee a
temp.metas_html = HMENU temp.metas_html.special = directory temp.metas_html.[Link] = {$[Link]}

Vous pouvez congurer le menu comme vous lentendez ; dans lexemple, il est congur e en TMENU et est pr esent e sous forme de tableau.
temp.metas_html.1 = TMENU temp.metas_html.1 { wrap = <br /><br /><br /><table width="170" cellspacing="0" cellpadding="0" bord er="0">|</table><br /><br /><br /> NO { linkWrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="2" color=" #666666" class="metas">|</font> allWrap = <tr><td><img src="[Link]" width="10" height="1" alt="" border="0" ></td><td align="left" valign="top">|</td></tr> ATagBeforeWrap = 1

` la commande [Link]= Les images pr ec edant le titre des pages sont afch ees gr ace a media (le champ Fichiers dans len-t ete des pages correspondantes). 319

5 TypoScript
# obtenez limage de la page (le champ Fichiers des pages de type Avanc e) [Link] = uploads/media/ [Link] = media [Link] = 0
} }

Pour les sites B2B et B2C bas es sur des balises <div>, le m eme menu est r ealis e par le gabarit TS temp.metas_autoparser_tswrap :
temp.metas_autoparser_tswrap = HMENU temp.metas_autoparser_tswrap.special = directory temp.metas_autoparser_tswrap.[Link] = {$[Link]} temp.metas_autoparser_tswrap.1 = TMENU temp.metas_autoparser_tswrap.1 { noBlur = 1 wrap = <ul id="metas">|</ul> NO { wrapItemAndSub = <li>|</li> [Link] = uploads/media/ [Link] = media [Link] = 0 } }

` pr A esent, ins erez la navigation m eta dans le gabarit principal ad equat avec Include basis template et remplacez les balises sp eciques en copiant les objets temporaires correspondants. Utilisez le cObject COA pour lint egration, puisque la navigation secondaire et linformation m eta doivent safcher group ees dans une sous-partie ou dans une balise <div>. Exemple B2C :
page.10 { ... [Link] = COA [Link].10 < temp.subnavigation_html [Link].20 < temp.metas_html

Exemple B2B / B2E :


page { ... # Gauche / menu secondaire 40 = COA 40.10 < temp.subnavigation_autoparser_tswrap 40.20 < temp.metas_autoparser_tswrap [Link] = <div id="subnavigation">|</div>

Exemple : rootline ` lutilisateur le Un menu rootline est pr evu dans len-t ete de lapplication exemple. Il montre a chemin courant. Les titres des pages apparaissent sous forme de liens. En pratique, cela devrait ` la gure suivante : ressembler a 320

5.10 Menus

Figure 5.77: Le menu rootline indique le chemin de la page courante

D enissez en premier lieu un HMENU avec la propri et e special=rootline.


temp.rootline_html= HMENU temp.rootline_html.special = rootline

La propri et e range vous permet de pr eciser les niveaux de d ebut et de n. Si vous omettez la ` -1), le chemin complet est afch valeur de n (ou si vous la xez a e. Avec -2, la page courante ne sera pas incluse dans le chemin, avec -3, les deux derniers niveaux ne sont pas repris, etc. Notez que vous ne pouvez pas utiliser despace dans la valeur.
temp.rootline_html.[Link] = 0|-2

Dans lexemple, le menu est un TMENU bas e sur du texte. La propri et e wrap ins` ere deux fois le l ` caract` ere deux points devant les e ements de menu. linkwrap fournit une balise <font> a l etat normal NO.
temp.Rootline_html.1 = TMENU temp.Rootline_html.1 { wrap = &nbsp;&nbsp;::| target = _top NO { linkWrap = <font face="Arial,Helvetica,sans-serif,sans-serif" size="1" color=" #666666" class="Rootline">|</font>

l l Les e ements de menu sont ici s epar es par une barre oblique, sauf pour le dernier e ement de ` la n du menu, utilisez allWrap=/. menu. Pour ins erer une barre oblique a La solution est dutiliser la fonction optionSplit qui est disponible pour une s erie de propri et es et de valeurs des objets de menu. optionSplit est utilis ee principalement lorsque vous devez xer des valeurs pour toute une s erie d el ements. Pour les menus, la m eme valeur est normale l ment d enie pour plusieurs e ements de menu. Si vous utilisez optionSplit, la valeur est ana l lys ee par la fonction et, selon la d enition, des valeurs diff erentes sont assign ees aux e ements. ` ce niveau-ci de remarquer que trois valeurs s Il est int eressant a epar ees par la syntaxe |*| sont l pr esentes dans la propri et e allWrap. Le dernier e ement de menu nest pas termin e par une ` barre oblique. La syntaxe et les r` egles de priorit e de cette fonction sont expliqu ees plus loin, a la section 5.11.1.
# optionSplit: "/" apr` es chaque e l ement sauf le dernier allWrap = |*| <font face="Arial,Helvetica,sans-serif,sans-serif" size="1" colo r="#666666" class="Rootline">|&nbsp;/&nbsp;</font> |*| |*| ATagBeforeWrap = 1 } }
R ef erence

819809

` partir du gabarit TypoScript temp.Rootline_autoparser_ Pour nir, voici le menu rootline a l tswrap pour les sites B2B et B2E . Les e ements de menu apparaissent sous la forme dune liste num erique et sont mis en forme avec CSS. 321

5 TypoScript
temp.rootline_autoparser_tswrap = HMENU temp.rootline_autoparser_tswrap.special = rootline temp.rootline_autoparser_tswrap.[Link] = 0|-2 temp.rootline_autoparser_tswrap.1 = TMENU temp.rootline_autoparser_tswrap.1 { wrap = <ul>::&nbsp;|</ul> noBlur = 1 NO { linkWrap= <li>|</li> # optionSplit: "/" apr` es chaque e l ement sauf le dernier allWrap = |*| |&nbsp;/&nbsp;|*| |*| } }

Ins erez les menus rootline et v eriez le r esultat dans le frontend. ` ce stade de la construction, lapplication BT3 est presque compl` A ete. Tous les menus sont congur es et int egr es. Seules quelques fonctionnalit es manquent comme par exemple la version pour limpression. Celles-ci seront ajout ees au chapitre suivant. En outre, dautres cObjects y seront introduits, et les fonctions seront d ecrites plus en d etail.

5.11 TypoScript en d etail


5.11.1 La fonction optionSplit
R ef erence

819808

La fonction optionSplit est disponible dans les propri et es TS dont le type de donn ees porte le m eme nom. Elle est souvent utilis ee dans les objets de menu. Cette fonction permet dassigner ` des groupes d des valeurs diff erentes a el ements faisant partie dune s erie. La syntaxe Les r` egles de base sont simples mais deviennent plus complexes lorsquelles sont combin ees. |*| R epartit les valeurs dans les zones principales, respectivement les zones Premi` ere, M ediane et Derni` ere. Divise les zones principales en trois sous-zones au maximum : premi` ere, deuxi` eme et troisi` eme. Les valeurs sont assign ees dans lordre suivant : dabord Derni` ere, puis Premi` ere et enn M ediane. Si la valeur M ediane est vide (""), la derni` ere partie de la Premi` ere valeur est r ep et ee. Si la Premi` ere valeur et la valeur M ediane sont vides, la premi` ere partie de la Derni` ere valeur est r ep et ee avant la Derni` ere valeur. Les valeurs de la zone principale M ediane sont r ep et ees.

||

322

5.11 TypoScript en d etail

Exemple : COLUMNS ` plusieurs colonnes avec du contenu. Cet Le cObject COLUMNS permet de cr eer un tableau a objet admet entre autres la propri et e gapBgCol du type de donn ees HTML-color / stdWrap +optionSplit. Elle d etermine une couleur darri` ere-plan pour les interstices entre les cellules de ` la fonction optionSplit, vous pouvez sp la table. En acc edant a ecier des couleurs diff erentes pour certains interstices.
Figure 5.78: au type de Grace donn ees, vous v eriez si optionSplit est disponible.

` sept colonnes, donc avec six interstices. Nous congurons rapidement ci-dessous une table a Les propri et es tableParams et totalWidth xent respectivement les param` etres de la balise ` 500 pixels. L <table> et la largeur, ici a epaisseur des interstices et des lignes entre les colonnes est pr ecis ee dans gapWidth et gapLineThickness et le nombre de colonnes est x e dans rows. Enn, nous assignons du contenu aux diff erentes colonnes.
10 = COLUMNS 10 { tableParams = cellspacing="0" cellpadding="0" border="0" totalWidth = 500 gapWidth = 30 gapLineThickness = 1 rows = 3 gapBgCol = red 1 = TEXT [Link] = colonne1 ... 7 = TEXT [Link] = colonne7 }

` Nous voudrions attirer lattention ici sur une propri et e int eressante qui utilise optionSplit, a savoir gapBgCol, qui a rec u uniquement la valeur red jusqu` a pr esent : tous les interstices sont vidence les couleurs dans les gures suivantes). donc rouges (nous avons mis en e
Figure 5.79: Valeur : red

Lorsque vous sp eciez trois valeurs (une pour chaque zone principale) avec optionSplit :
gapBgCol = red |*| green |*| yellow

alors le premier espace est rouge, le dernier jaune et tous les autres prennent la m eme couleur que lespace m edian (r` egle 4). 323

5 TypoScript

Figure 5.80: Valeur : red |*| green |*| yellow

La r ep etition de la valeur m ediane (r` egle 4) est mieux perc ue si la valeur est divis ee en souszones.
gapBgCol = red |*| green || fuchsia |*| yellow

Ici, nous avons choisi les couleurs verte et fuchsia pour la zone m ediane et elles seront donc afch ees en alternance.
Figure 5.81: Valeur : red |*| green || fuchsia |*| yellow

` pr Les zones principales Premi` ere et Derni` ere sont a esent subdivis ees en plusieurs valeurs. La Premi` ere zone rec oit trois valeurs, la zone M ediane une et la Derni` ere deux.
gapBgCol = red || aqua || grey |*| green |*| yellow || fuchsia

Tous les interstices sont repr esent es dans leur couleur correspondante :
Figure 5.82: Valeur : red || aqua || grey |*| green |*| yellow || fuchsia

Fixez ensuite trois valeurs pour les zones principales Premi` ere et Derni` ere (ou r eduisez le nombre de colonnes avec la propri et e rows) :
gapBgCol = red || aqua || grey |*| green |*| yellow || fuchsia || aqua

Les zones principales sont trait ees dans lordre d eni pr ec edemment pour d eterminer les cou` afcher ; en effet, nous avons sp leurs a eci e sept couleurs pour six interstices. Dabord les valeurs de la zone principale Derni` ere sont trait ees, ensuite celles de Premi` ere et enn celles tant de M ediane (r` egle 1). La valeur de la zone principale M ediane nest plus prise en compte, e t donn e que tous les interstices ont d ej` ae e d enis par les zones Derni` ere et Premi` ere.
Figure 5.83: aqua || grey |*| green |*| yellow || fuchsia || aqua

` la zone principale M Si aucune valeur nest assign ee a ediane,


gapBgCol = red || grey |*||*| yellow

la derni` ere valeur de la zone principale Premi` ere est r ep et ee (r` egle 2). Notez quil ne devrait pas y avoir despace entre les s eparateurs. Dans lexemple, la valeur grey est r ep et ee. 324

5.11 TypoScript en d etail

Figure 5.84: Valeur : red || grey |*||*| yellow

Si les zones principales Premi` ere et M ediane ne contiennent pas de valeurs, la premi` ere valeur de la zone principale Derni` ere est r ep et ee (r` egle 3).
gapBgCol = |*||*| yellow || fuchsia || aqua

Dans lexemple, les valeurs de la zone principale Derni` ere sont x ees en premier. Les interstices restants prennent la couleur jaune, comme la premi` ere valeur de la zone principale Derni` ere.
Figure 5.85: Valeur : |*||*| yellow || fuchsia || aqua

Nous avons d ej` a utilis e la fonction optionSplit pour les menus rootline des gabarits TS temp. rootline_html et temp.rootline_autoparser_tswrap. Une caract eristique particuli` ere de cette ` tous les objets du GIFBUILDER avant que les e l fonction est quelle est appliqu ee a ements de s. Il en va de m menu ne soient cr ee eme pour toutes les propri et es allWrap utilis ees.
temp.rootline_autoparser_tswrap.[Link] { ... # optionSplit: "/" apr` es chaque e l ement sauf le dernier allWrap = |*| |&nbsp;/&nbsp;|*| |*| ... }

La propri et e allWrap rec oit trois valeurs : La Premi` ere zone est vide |*|. ` savoir lenveloppe |&nbsp;/&nbsp;|*|. La zone M ediane contient une valeur qui se r ep` ete, a La Derni` ere zone contient un espace vide : cest pourquoi il y a un dernier s eparateur |*|. ` la n de la cha Sinon, les espaces vides au d ebut et a ne de caract` eres seraient supprim es, conform ement aux r` egles de TypoScript. ` premi` La fonction optionSplit peut sembler plut ot complexe a ere vue, mais elle est aussi tr` es tant donn ` une s puissante, e e que vous pouvez assigner diff erentes valeurs a erie d el ements sans aucune programmation suppl ementaire. Pour les menus, optionSplit est un outil dont on se passe difcilement.

5.11.2 Travailler avec des images et le GIFBUILDER


Si TYPO3 est install e avec les biblioth` eques graphiques recommand ees, vous pouvez manipuler les images avec la fonction GIFBUILDER. Les menus graphiques en particulier les uti` partir des e l lisent et cr eent automatiquement des images en format GIF a ements de menu. ` partir den-t Mais ils peuvent aussi produire des images a etes combin es avec des polices
R ef erence

788778

325

5 TypoScript

l de caract` ere. Cest de cette mani` ere que la disposition 5 des en-t etes pour les e ements de e, sur base du gabarit standard content (default) qui int` contenu est cr ee egre le gabarit de base [Link].gfx1. L el ement de contenu Textbox fait aussi appel au GIFBUILDER. Objets GIFBUILDER (GifBuilderObj) Le GIFBUILDER comprend une s erie de propri et es g en erales, par exemple XY, offset ou reduceColors, pour d enir respectivement la taille de limage, un d ecalage g en eral pour tous les ` partir du coin sup objets a erieur gauche de limage, et la r eduction du nombre de couleurs e dans limage a ` laide de la propri de limage GIF. Une zone de travail est cr ee et e workArea. Les objets courants sont g en er es dans une liste num erique de GifBuilderObj. Soyez attentifs : ` des objets sont x dans TSref, les r ef erences a ees exclusivement pour les GifBuilderObj et non pour les cObjects du m eme nom, comme TEXT et IMAGE. tre utilis Les objets GIFBUILDER suivants peuvent e es directement ou via dautres GifBuilderObj : TEXT ` partir de texte. Via le type de donn Le GifBuilderObj TEXT cr ee une image a ees stdWrap et getText, vous pouvez y faire r ef erence s epar ement.

SHADOW En tant que GifBuilderObj, SHADOW est une propri et e de TEXT qui cr ee un effet dombre. ` partir de lobjet TEXT auquel elle se Si elle est utilis ee seule, vous devez cr eer un lien a r ef` ere, via textObjNum. EMBOSS Les m emes remarques sappliquent au GifBuilderObj EMBOSS. Il cr ee deux copies d ecal ees derri` ere lobjet TEXT an de produire une sorte de relief. En utilisant les propri et es, vous pouvez leur donner diff erentes couleurs, les rendre plus douces ou plus transparentes. OUTLINE Le GifBuilderObj OUTLINE est aussi une propri et e de TEXT. Il renforce les contours et est seulement inuenc e par la valeur de la couleur et lintensit e. Le r esultat nest en g en eral pas tr` es bon. Il est pr ef erable dutiliser une ombre avec une forte intensit e. BOX BOX cr ee un rectangle dont vous pr ecisez la taille et lalignement.

IMAGE ` une image. Le GifBuilderObj IMAGE du type de donn ees imgResource est associ ea Vous pouvez m eme utiliser la fonction GIFBUILDER via laquelle tous les GifBuilderObj sont disponibles. EFFECT Avec EFFECT, il est possible deffectuer une rotation sur limage, de la renverser, de xer les nuances de gris, de changer les valeurs gamma, etc. Les valeurs sont ajout ees avec la propri et e value et s epar ees avec la commande tube, | . WORKAREA Si vous ins erez une nouvelle WORKAREA dans la liste num erique des GifBuilderObj, 326

5.11 TypoScript en d etail

` la nouvelle zone de travail (par exemple avec la les objets suivants feront r ef erence a propri et e offset). CROP ` des zones partielles. Ce GifBuilderObj adapte la CROP restreint lafchage de limage a workArea aux nouvelles dimensions de limage. ` l SCALE met les images a echelle gr ace aux propri et es width et height. Ce GifBuilderObj galement workArea aux nouvelles dimensions de limage. adapte e

SCALE

ADJUST ADJUST vous permet de corriger les valeurs des tons de limage en d enissant les valeurs des tons gris dentr ee et de sortie. Si vous devez corriger les valeurs gamma, utilisez le GifBuilderObj EFFECT. Les propri et es sont reprises dans une liste via value et s epar ees par le signe tube, | . [IMGMAP] IMGMAP nest pas un GifBuilderObj, mais il est utilis e conjointement avec TEXT pour cr eer une zone sensible (imagemap) pour un chier GIF. Il est utilis e pour lobjet de menu IMGMENU. +calc Si vous ajoutez +calc au type de donn ees dune propri et e du TSref, vous pourrez faire des op erations arithm etiques sur la valeur. Les op erateurs utilis es, +, -, / et * ne suivent pas de r` egles crits. Toutefois, pour le GIFBUILDER, de priorit e et sont trait es dans lordre dans lequel ils sont e vous pouvez aussi vous r ef erer aux valeurs dautres objets. Cela permet par exemple de calculer la longueur et la largeur de la gure globale en fonction de GifBuilderObj comme TEXT ou IMAGE.
... XY = [100.w]+160 , [100.h]+5

Pour les dimensions de limage, cela signie :


XY = [largeur du GifBuilderObj 100]+160 Pixel , [hauteur du GifBuilderObj 100]+5 Pixel

.niceText La biblioth` eque Freetype int egr ee dans GDLib et utilis ee par PHP ne supporte pas de mani` ere ` afcher plus satisfaisante lanti-aliasing dans toutes les versions. La propri et e niceText aide a ` TYPO3 de clairement les petites lettres. Elle fournit une solution de rechange en demandant a doubler la taille du texte sur un masque, avant de r eduire l echelle jusqu` a la taille correcte. Ce faisant, la fonction ImageMagick combine est utilis ee pour placer (pour masquer) le texte dans larri` ere-plan. Cette proc edure mobilise beaucoup de puissance de la part du serveur pour cr eer les images, mais procure un meilleur r esultat selon la version dImageMagick utilis ee. es a ` chaque appel, mais quelles le sont seulement apr` Puisque les images ne sont pas recr ee es 327

5 TypoScript

` quel endroit vous voulez le premier appel qui suit leffacement du cache, vous devez d ecider a utiliser niceText. Notez que cette propri et e peut produire diff erents r esultats selon les versions de GDlib, Freetype et ImageMagick utilis ees, de sorte que votre menu graphique sur le serveur en ligne peut avoir une autre apparence que celui sur le serveur de production. Exemple : limage dans len-t ete
R ef erence

016166

` la section Etapes ` la page 281, une A de construction avec des gabarits en cascade , a t image a d ej` ae e ins er ee dans la zone den-t ete du frontend. Le type dobjet IMAGE utilis e ` la propri accepte deux m ethodes dint egration dimages, gr ace a et e le du type de donn ees imgResource. ` un chier dans le syst` Il fait r ef erence a eme de chiers via le champ Fichiers dans len-t ete de la page. Il utilise le GIFBUILDER, une fonction qui vous permet de cr eer une image qui combine plusieurs objets graphiques tels que des images, du texte ou des bo tes. t La premi` ere m ethode a e e illustr ee dans le gabarit TS temp.header_html. Lutilisation de la fonction GIFBUILDER est illustr ee par le gabarit TS temp.GIFBUILDER_header_image. Si vous voulez suivre et reconstruire lexemple, vous le trouverez dans le Dossier Syst` eme Gabarits Principaux/cObjects. Len-t ete ne doit pas seulement comprendre limage incluse dans les en-t etes de page, comme c etait le cas jusquici, mais aussi inclure le titre de la page courante sous forme de graphique. Le texte est ombrag e et la premi` ere lettre est mise en couleur.

Figure 5.86: Inclusion du graphique comme un objet GIFBUILDER

Dabord, cr eez un objet temporaire d eni comme un cObject IMAGE. Par la propri et e le du e avec la fonction GIFBUILDER. type de donn ees imgResource, une nouvelle image est cr ee
temp.header_image_gifbuilder = IMAGE temp.header_image_gifbuilder.file = GIFBUILDER

La taille de limage est d etermin ee avec XY.


temp.header_image_gifbuilder.file { XY = 588,125

Lobjet 10 de la liste num erique du GifBuilderObj est du type IMAGE et prend en argument ` partir du champ Fichiers de len-t les images assign ees a ete de page. Le param` etre slide lance ` partir de la page courante jusquau niveau 1. une recherche dans larborescence des pages a t Cette recherche sarr ete d` es quune image a e e trouv ee.
10 = IMAGE [Link] = uploads/media/ [Link] = levelmedia:1, slide

328

5.11 TypoScript en d etail

D eterminez la position de lobjet 10 avec la propri et e offset qui prend comme r ef erence le coin sup erieur gauche de limage globale (alternativement, si workArea est activ e, cest la zone de travail qui est prise en r ef erence).
[Link] = 199,0

e. D Ensuite, la premi` ere lettre jaune du titre de la page est cr ee enissez lobjet 18 comme un GifBuilderObj de type TEXT. Sa propri et e text est du type de donn ees stdWrap et essaie dabord de lire le sous-titre de la page via [Link] = subtitle. Sil ny en a pas, cest le titre qui est lu.
18 = TEXT [Link] = subtitle // title

crit en majuscules et Les propri et es case et crop pr ecisent respectivement que le texte sera e que seule la premi` ere lettre sera afch ee.
[Link] = upper [Link] = 1

Lobjet 18 est plac e dans la gure globale avec d ecalage ; il rec oit une taille et une couleur pour la police de caract` ere.
[Link] = 62,90 [Link] = 40 [Link] = #FFCC33

La propri et e niceText am eliore la reproduction des polices de caract` ere.


[Link] = 1

Le GifBuilderObj TEXT acc` ede au GifBuilderObj EMBOSS via la propri et e emboss. Les deux copies de la lettre sont d ecal ees dune valeur sp eci ee par offset ; blur les adoucit et opacity en contr ole la transparence.
[Link] { highColor = #FFCC33 lowColor = #FFCC33 offset = 2,2 blur = 99 opacity = 50 }

De m eme, le texte entier est g en er e dans lobjet 20.


[Link] = subtitle // title [Link] = 75,85 [Link] = 20 [Link] = #333333 [Link] = 1

Ici, le GifBuilderObj TEXT acc` ede au GifBuilderObj SHADOW via shadow et produit une ombre argent ee. Elle est en d ecalage par rapport au coin sup erieur gauche de lobjet 20, via offset. ` un niveau de 60% de transparence par opacity, et son Elle est adoucie par blur, est mise a intensit e est d enie par intensity. 329

5 TypoScript
[Link] { color = silver offset = 7,8 blur = 70 opacity = 60 intensity = 15 }
}

tendre lexemple comme vous lentendez. Avec la propri Bien s ur, vous pouvez e et e mask du GifBuilderObj IMAGE, un masque noir et blanc est appliqu e sur limage.
Figure 5.87: Masque plac e sur limage

` la conguration TypoScript : Ajoutez la ligne suivante a


[Link] = fileadmin/mediapool/material_intern/[Link]

Seules les parties de limage couvertes par les zones blanches du masque sont visibles pour lobjet GIFBUILDER 10. Les zones noires sont donc invisibles.
Figure 5.88: Limage de len-t ete avec le masque

Comme variante, vous pouvez ajouter un nouvel objet GIFBUILDER (lobjet 15). Cest un GifBuilderObj du type IMAGE qui cr ee une image avec laide de la fonction GIFBUILDER. La pro` nouveau la taille de limage et lobjet GIFBUILDER 100 prend en pri et e XY permet de pr eciser a argument le chemin vers limage dans le syst` eme de chiers.
Figure 5.89: Limage pr esente le logo TYPO3 sur un fond gris
15 = IMAGE [Link] = GIFBUILDER [Link] { XY = [100.w]+160 , [100.h]+5 100 = IMAGE [Link] = fileadmin/mediapool/material_intern/[Link]

La propri et e offset permet de d eterminer la position du logo dans notre image. 330

5.11 TypoScript en d etail


[Link] = 160, 5

Larri` ere-plan de limage est rendu transparent avec transparentBackground = 1. Le m eme r esultat est obtenu via transparentColor = #CCCCCC avec la valeur de la couleur grise du logo.
transparentBackground = 1 transparentColor = #CCCCCC
}

` limage de len-t Le logo TYPO3 est donc parfaitement int egr ea ete.
Figure 5.90: Combinaison de plusieurs images

` lutilisation de la fonction GIFBUILDER. En Vous pouvez remarquer quil ny a pas de limites a n de compte, la limite, cest votre cr eativit e.

5.11.3 La fonction stdWrap


La fonction stdWrap joue un r ole central dans TypoScript et re` ete aussi le concept de TS. Nous ` partir du lavons d ej` a beaucoup utilis ee dans les exemples. Cette fonction sest d evelopp ee a concept denveloppe pour pallier au fait que TypoScript ne peut pas manipuler les structures de contr ole (sauf pour les conditions), puisque ce nest pas un v eritable langage de programmation. stdWrap, une sorte de canif suisse , propose au d eveloppeur TypoScript une s erie de pro diter des e l pri et es et de fonctions pour fournir des donn ees, changer ou e ements de contenu ou encore pour permettre de traiter des conditions. Les propri et es et les fonctions de stdWrap sont utilisables partout o` u une propri et e dobjet du type de donn ees stdWrap est d enie. Les objets ont aussi fr equemment une propri et e nomm ee stdWrap qui rend disponible cette fonction. Selon leurs nalit es, les propri et es de stdWrap sont s epar ees en trois zones : Get data, Override/Conditions et Parse data. Notez que les propri et es sont trait ees dans lordre dans lequel elles sont reprises dans TSref. Get data La zone Get data des propri et es est utilis ee pour rendre disponibles les donn ees ou pour les publier. Cela peut servir pour le titre dune page, la date courante, un cObject, un nombre de lignes dans une requ ete de base de donn ees, une liste de chiers dans un r epertoire ou une variable globale. Les propri et es les plus importantes sont data, eld, current, cObject et lelist. 331

5 TypoScript

data

Afche, via la syntaxe Type:pointeur, les valeurs de diff erents tableaux PHP comme, par exemple, des enregistrements de donn ees. Exemple : . . . .data = page:title

eld

l Renvoie g en eralement sous forme de valeur les e ements de contenu dun champ de la ` partir de lenregistrement courant de donn base de donn ees a ees. Exemple : . . . .eld = title

current D etermine, par le biais dune valeur bool eenne, lacc` es au contenu actuel du registre des donn ees. Dans TYPO3, le registre des donn ees est un tampon interne o` u sont stock ees les ` cet endroit sont valeurs courantes pour certaines fonctions. Les variables enregistr ees a cras ` diff disponibles globalement et sont publi ees, sauv ees ou e ees a erents moments du traitement. cObject Charge le contenu dun objet de contenu. Exemple : . . . .cObject = IMAGE lelist Lit un r epertoire de chiers et fournit une liste de chiers. Les param` etres suivants sont s epar es par le signe tube | : 1. 2. 3. 4. 5. Chemin Liste d elimit ee par des virgules (sans espace) des types de chiers possibles (gif, jpg, . . .) Lordre du tri : name, size, ext, date r inverse lordre du tri e avec le chemin complet et donc Si activ e (non vide), la liste de chiers est cr ee pas uniquement avec le nom du chier

Exemple : . . . .lelist = leadmin/img/|jpg,png|name||1 Une aide suppl ementaire est fournie par la publication dans le frontend de la liste de lenregistrement courant des donn ees, via la propri et e stdWrap debugData.

332

5.11 TypoScript en d etail

Figure 5.91: Afchage de lenregistrement courant de donn ees dans le frontend

Override/Conditions craser et comparer des valeurs. Vous pouvez, Les propri et es dans cette zone sont utilis ees pour e entre autres, xer une nouvelle valeur qui d epend dautres valeurs. Les propri et es les plus importantes sont : override Ecrase la valeur dun objet si la valeur de override nest pas vide ou 0. La question de savoir si lobjet original a d ej` a une valeur assign ee ou sil est vide nest pas pertinente dans ce cas. ifEmpty ` un objet si cette valeur est vide jusqu` Assigne une nouvelle valeur a a pr esent . Le z ero est ici trait e comme une valeur. listNum l Extrait la valeur d esir ee des e ements de contenu qui sont s epar es par une virgule. trim ` la ligne. Supprime les espaces vides, les tabulations et les sauts a 333

5 TypoScript

required ` stdWrap est retourn Si la valeur courante est vide , lobjet faisant lappel a e en l etat. Les propri et es stdWrap qui suivent ne sont pas prises en consid eration. if Inclut la fonction if du m eme nom. Est utile pour v erier si une ou plusieurs conditions sont satisfaites dans le but de xer certaines valeurs.

eldRequired Si le champ de lenregistrement actuel de donn ees est vide, la valeur courante est supprim ee.

Parse data La zone Parse data d etermine des propri et es pour le traitement des donn ees. Toute une s erie tre ltr dop erations sont disponibles ici. Le contenu HTML peut e e par la fonction HTMLparser, l et certaines balises supprim ees. Avec split, les e ements de contenu sont divis es en plusieurs valeurs sur base de caract eristiques pr ecises avant d etre trait es. Dautres fonctions qui sont incluses via des propri et es sont encapsLines, addParams, textStyle, tableStyle, lelink et typolink.

Get data et Parse data


t eld et data ont d ej` ae e utilis ees dans les exemples pr ec edents en tant que propri et es stdWrap de la zone Get data. eld Avec eld, le sous-titre ou le titre des pages
... NO { 10 = TEXT [Link] = subtitle // title

tre ins ou encore une image du champ Fichiers de len-t ete de page sont lus pour e er es dans les menus.
NO { # Lire limage de la page [Link] = uploads/media/ [Link] = media

data La propri et e data est utilis ee pour s electionner limage, non seulement dans la page courante, ` un mais aussi pour toutes les pages du rootline, jusquau moment o` u une image est trouv ee a niveau sup erieur. 334

5.11 TypoScript en d etail


temp.header_image = IMAGE temp.header_image.[Link] = uploads/media/ temp.header_image.[Link] = levelmedia:1, slide

tapes Les propri et es de lobjet stdWrap de la zone Parse data ont d ej` a servi dans les premi` eres e ` laide de la propri de la section 5.2. Cet exemple simple afche le texte en majuscules a et e case :
page.10 = HTML [Link] = kasper [Link] = upper

Exemple : version pour limpression Dans lapplication exemple, la version pour limpression manque. Vous devriez rajouter un bouton qui optimise la page courante en vue de son impression. La mise en page nest pas prise en compte dans la version pour limpression, seul le contenu est mis en forme suivant les styles CSS. La page est appel ee avec le param` etre URL &type=98 qui correspond en interne au nombre typeNum=98 r eserv e pour limpression. An de cr eer le lien vers laperc u avant impression, utilisez les propri et es des zones Get data et Parse data de lobjet stdWrap.
Figure 5.92: Le bouton dimpression appelle la page avec le param` etre &type=98

Cr eez un nouveau gabarit TS. Dans les exemples, vous le trouverez sous lappellation [Link] dans le Dossier Syst` eme Gabarits Principaux/Fonctions. Le bouton dimpression est g en er e et nous d enissons une page qui restituera le r esultat correspondant. Cr eez dabord un cObject temporaire de type COA.
[Link] = COA [Link] {

avec la propri ` lensemble de lobjet. Le bouton est cr ee et e wrap appliqu ee a


wrap = <a href="|" name="Printversion" title="Printversion" target="_blank" clas s="printversion">$printlabel</a>

Toutefois, lURL contenant le param` etre &type=98 nest pas encore reli ee au bouton. Dans ce t but, la propri et e 10 de la liste num erique du COA a e e d enie comme un cObject TEXT.
10 = TEXT

` la Les propri et es stdWrap, qui sont des outils du cObject TEXT, sont directement appliqu ees a base de lobjet, ce qui ne correspond pas au comportement standard des autres objets. An dobtenir lURL de la page courante, cest la propri et e data qui est utilis ee. 335

5 TypoScript

La propri et e est du type de donn ees getText, ce qui signie quelle peut afcher les valeurs de diff erents tableaux, accessibles par le syst` eme en utilisant la syntaxe Type:pointeur.
R ef erence

293098

Ladresse courante est d etermin ee par le type getIndpEnv et le pointeur REQUEST_URI.


[Link] = getIndpEnv:REQUEST_URI

tre encore trait Le tableau contient d` es lors une valeur telle que /[Link]?id=18. Elle peut e ee par la propri et e wrap an dajouter le param` etre &type=98.
[Link] = |&type=98
R ef erence

463307

Notez quil sagit ici dun simple exemple de cr eation du lien vers les versions dimpression. Si vous utilisez loption TS [Link], cet exemple et le suivant, ne fonc` mettre en e vidence les propri tionneront pas ces derniers sont uniquement destin es a et es stdWrap. Une extension permettant de cr eer des liens correctement est disponible dans le TER (Typo3 Extension Repository). Une autre possibilit e est dutiliser la propri et e split. Elle vous permet de diviser la valeur en plusieurs parties via les propri et es de la fonction du m eme nom9 . ` utiliser comme s [Link]=/ d etermine la cha ne de caract` eres a eparateur. /[Link]?id =18 est divis e en deux valeurs. La premi` ere est vide et la seconde contient la cha ne de caract` eres qui suit le s eparateur : [Link]?id=18. Lobjet [Link] du type de donn ees cObjNum +optionSplit sert de pointeur vers les cObjects dune liste num erique. Ces objets (1, 2, 3, . . .) sont appel es pour traiter les valeurs s epar ees par optionSplit. cObjNum d etermine quels objets sont appel es pour chaque valeur s epar ee. Si cObjNum=1, chaque valeur ` lobjet 1 pour le traitement. s epar ee est pass ee a Vous pouvez aussi utiliser optionSplit pour traiter chaque valeur s epar ee par un objet diff erent. ` la section 5.11.1. Dans la Le mode de fonctionnement exact de optionSplit est expliqu ea ` partir de la valeur s conguration suivante, lobjet 2, qui ajoute le param` etre type a epar ee avec current=1, est appel e uniquement pour la derni` ere valeur ([Link]?id=18. Toutes les autres valeurs s epar ees sont trait ees par lobjet 1, qui xe une valeur vide avec override=.
/* Variante 2: traitement par la fonction split [Link] = / [Link] = 1 |*| 1 |*| 2 [Link] = [Link] = 1 [Link] = |&type=98 */
}

` celui de la premi` Le r esultat est identique a ere variante, qui est plus courte. ` pr Vous devez a esent d enir le gabarit pour lafchage de la page dans son format dimpression t ` la avec typeNum=98. La s election de gabarits par lutilisation de type/typeNum a e e vue a section 5.8.
9 Ceci na pas de sens dans ce contexte, puisquune seule valeur est trait ee ; nous lutilisons ici uniquement pour expliciter la fonction split

336

5.11 TypoScript en d etail


# un autre gabarit de page pour le type 98 (=version impression) alt_print = PAGE alt_print { typeNum = 98

La CSS suivante d etermine le format de lafchage.


CSS_inlineStyle = body, p, h1, h2, h3, h4 { font-family: Arial, Verda na, sans-serif; font-size: 11pt; } h1, h2, h3, h4 { font-size: 12pt; fo nt-weight: bold; }

Pour nir, le contenu de la colonne Normal est publi e.


10 < [Link]
}

Override/Conditions
` des condiComme nous lavons fait remarquer au d ebut, il est possible de lier les propri et es a crasent les valeurs ou xent les conditions ont d tions. Les propri et es stdWrap qui e ej` a servi dans les exemples. listNum Pour le menu temp.metas_html qui reprend linformation m eta, la premi` ere image du tableau t taient lues a ` partir de lenae e param etr ee avec la propri et e listNum=0 lorsque les images e t ete de page. M eme sil y a plusieurs images dans le champ Fichiers, seule celle-ci est afch ee.
NO { [Link] = uploads/media/ [Link] = media [Link] = 0

ifEmpty t Pour la mise en page de base du gabarit TS ts CTABLE template, un espace vide (&nbsp;) a e e pass e en argument dans la propri et e ifEmpty pour que le tableau soit toujours afch e m eme sil ne poss` ede pas de contenu.
page.30 = CTABLE page.30 { ... c.10 = COA c.10.5 = HTML [Link] = <table border="0" cellspacing="0" cellpadding="0" width= "586"><tr> c.10.10 < [Link] [Link] = <td align="left" valign="top">|<br /><br /></td> c.10.25 = HTML [Link] = </tr></table> [Link] = &nbsp;

337

5 TypoScript

Exemple : utilisation de deux colonnes tait afch Jusqu` a pr esent, seul le contenu de la colonne Normal e e dans les gabarits princi tait inclus dans la colonne Right de la paux. Il ny a que le gabarit TS ts wrap template qui e disposition de base. Une solution pour ins erer du contenu dans une deuxi` eme colonne est la suivante : cr eer deux gabarits TS diff erents inclus dans larborescence des pages et les utiliser selon les besoins. Puisque certaines pages ne sont pas publi ees en deux colonnes, nous avons besoin dune solution plus exible, qui cr ee la zone de droite dans le gabarit seulement si les l e ements de contenu existent vraiment. ` laide du gabarit TS auto parser template. Pour ce faire, Nous allons pr esenter cette solution a nous cr eons plusieurs objets dans le chemin dobjet temp.*. Dabord, lobjet [Link] l est copi e dans [Link] pour rechercher les e ements de contenu de la table tt_content dans la colonne Normal (colPos=0).
# contenu de gauche [Link] < [Link]

l Le second objet temporaire, [Link], afche les e ements de contenu de la colonne Droite (colPos=2) avec lobjet [Link].
### contenu de droite ### [Link] < [Link]

La propri et e [Link] force larr et du traitement de stdWrap si lobjet na produit aucun contenu : dans ce cas, le contenu de la colonne de droite. Sil y a du contenu dans la colonne de droite, il est entour e par une balise <div> pour le disposer sur la page en utilisant la propri et e stdWrap innerWrap.
[Link] = 1 [Link] = <div id="right"><div id="content_right">| </div><div id="rightfooter"></div> </div>

Le contenu de la colonne Normal est plac e devant cela avec la propri et e preCObject et est envelopp e dune balise <div>.
# placement du contenu de gauche en tant que cObject avant le contenu de droite [Link] < [Link] [Link] = <div id="content_left"> | </div>

l La conguration [Link] d enit un objet qui afche les e ements de contenu des colonnes Normal et Droite, pourvu que du contenu soit pr esent dans la colonne de droite ; sinon, rien nest afch e. La colonne Normal est param etr ee ici avec lID content_left au lieu de content tre congur dans la balise <tag>, ce qui signie que la colonne peut e ee plus nement par CSS que pour un afchage en une seule colonne. Lobjet [Link] est remplac e par [Link] sil y a du contenu dans la colonne de droite. On r ealise cela avec la propri et e stdWrap override. La propri et e override est elle-m eme du type de donn ees string/stdWrap et peut donc afcher une cha ne de caract` eres ou des donn ees via les propri et es du groupe de fonctions Get Data de stdWrap. 338

5.11 TypoScript en d etail


[Link] < [Link]

Le contenu de lobjet [Link] est nalement copi e dans la sous-partie.


[Link] = TEMPLATE [Link] { ... [Link] < [Link] }

La mise en page qui en r esulte comporte deux zones de contenu sil y a du contenu dans la colonne Droite.
Figure 5.93: Afchage dans le frontend

Vous voyez que la fonction stdWrap est un outil puissant pour lire le contenu, pour construire des structures de contr ole de comparaison, et enn pour traiter le contenu. Sil vous manque des fonctionnalit es, vous avez la possibilit e de traiter le contenu avec vos propres fonctions PHP, via les propri et es preUserFunc et postUserFunc.

5.11.4 Conditions
tre satisfaites pour que le code TS qui Nous avons d ej` a introduit les conditions. Elles doivent e les suit soit pris en compte. Elles constituent une autre structure de contr ole. Rappelez-vous que si plusieurs conditions sont v eri ees, seule la premi` ere condition satisfaite est prise en ` compte. Les conditions se terminent par [END] ou [GLOBAL]. Elles ne peuvent appara tre a lint erieur dun op erateur { } qui repr esente lembo tement de propri et es. La condition [ELSE] est forc ement remplie si la condition qui la pr ec` ede ne lest pas.
R ef erence

315080

339

5 TypoScript

Vous pouvez aussi combiner les conditions, comme dans lexemple suivant, o` u le code TS est tant un syst` trait e uniquement si le syst` eme appelant peut sidentier comme e eme Linux, ou si son IP est du type 145.153.102.*.
[system = linux] [IP = 145.153.102.*] ... [END]

Nous navons pas encore utilis e de conditions dans nos exemples. Nous commenc ons donc par pr esenter les conditions reprises dans la derni` ere version de TSref avant dindiquer par un exemple comment on les met en pratique. Vue densemble
R ef erence

501292

La vue densemble qui suit reprend toutes les conditions que vous pouvez utiliser. Les valeurs exactes se trouvent dans TSref. browser Syntaxe : [browser =navigateur1, navigateur2,...] ` toutes les versions de MS Internet Explorer [browser = msie] sapplique a ` tous les navigateurs MS Internet Explorer et [browser = msie, opera] sapplique a Opera ` tous les navigateurs Opera [Link] dont, par exemple, [browser = opera7] sapplique a Opera 7.1. tre identi Notez que les navigateurs peuvent e es sous dautres noms, de sorte que la requ ete ne m` ene pas alors au r esultat d esir e. version Syntaxe : [version =value1 ,>value2 ,=value3 ,<value4,...] ` virCette condition concerne la version du navigateur. Les valeurs sont des nombres a gule ottante avec . comme s eparateur d ecimal. Les trois op erateurs suivants sap` la valeur de la version : = La valeur doit correspondre exactement. [version pliquent a = 5.5] tre plus grand que la valeur pr > La num ero de la version doit e ecis ee. [version = > 5.5] tre plus petit que la valeur pr < Le num ero de la version doit e ecis ee. [version = < 5.5] system Syntaxe : [system=system1,system2 ] ` la premi` La cha ne de caract` eres est compar ee a ere partie de lidentication du syst` eme dexploitation, et on consid` ere que la condition est vraie sils correspondent. ` Win95 et Win98. [system = win9] correspond a [system=win,mac] correspond aux syst` emes dexploitation Windows et Mac. device Syntaxe : [device=device1,device2 ] La condition est vraie si la cha ne de caract` eres correspond au mat eriel acc edant au site (pda, wap, grabber, robot).

340

5.11 TypoScript en d etail

useragent Syntaxe : [useragent=agent ] Pour v erier sil y a une correspondance avec les variables getenv("HTTP_USER_AGENT"). tre utilis ` la n de la cha Last erisque * peut e ee au d ebut et/ou a ne de caract` eres. ` HTTP_USER_AGENT Lo[useragent=Lotus-Notes/4.5(Windows-NT)] correspond a tus-Notes/4.5(Windows-NT) . galement. [useragent = Lotus-Notes*] y correspond e language Syntaxe : [language =lang1,lang2,...] La variable getenv(HTTP_ACCEPT_LANGUAGE) est compar ee avec une valeur donn ee ; la condition est vraie si la correspondance est v eri ee dans son ensemble. IP Syntaxe : [IP =ipaddress1,ipaddress2,...] ` la valeur donn La variable getenv(REMOTE_ADDR) est compar ee a ee. Cette derni` ere peut contenir le symbole * ou consister en une, deux ou trois parties : ` toutes les adresses IP qui commencent par 145. [IP = 145.*.*.*] correspond a

hostname Syntaxe : [hostname =hostname1,hostname2,...] La valeur qui s ecrit sous forme dune liste de noms de domaines, s epar es par des vir` la variable getenv("REMOTE_HOST"). Le symbole * est permis, gules, doit correspondre a tre utilis mais ne peut e e dans une cha ne de caract` eres. [hostname = votredomaine.*.com] est correct. [hostname = votredomaine*.com] est erron e. hour Syntaxe : [hour =heure1,>heure2,<heure3,...] ` lheure sur le serveur. Les valeurs (0-23), s epar ees par des virgules, sont compar ees a Les op erateurs possibles sont =, > et <.

minute Syntaxe : [minute =...] ` la minute sur le serveur. La minute sp eci ee (0-59) est compar ee a dayofweek Syntaxe : [dayofweek =...] ` 6/samedi) est compar Le jour de la semaine (de 0/dimanche a e au jour de la semaine sur le serveur et la condition renvoie vrai si les deux correspondent. dayofmonth Syntaxe : [dayofmonth =...] ` 31) est compar Le jour du mois (1 a e au jour sur le serveur. month Syntaxe : [month =...] ` 12/d Les mois (de 1/janvier a ecembre) sont compar es au mois sur le serveur. usergroup Syntaxe : [usergroup =groupe1-uid,groupe2-uid,...] 341

5 TypoScript

La condition est satisfaite si lutilisateur identi e dans le frontend est un membre du groupe dutilisateurs sp eci e. Le symbole * couvre tous les groupes dutilisateurs congur es, sp eci es par la variable globale gr_list. loginUser Syntaxe : [loginUser =fe_users-uid, fe_users-uid,...] Luid dun utilisateur frontend identi e est compar e avec le nombre entier donn e. Le symbole * est utilis e pour savoir si lutilisateur est bel et bien identi e. treeLevel Syntaxe : [treeLevel =niveau1,niveau2,...] Si lun des nombres entiers donn es correspond au niveau actuel dans le rootline, alors la condition est remplie. 0 correspond au Rootlevel, 1 correspond au premier niveau de menu. [treeLevel = 2,3] PIDinRootline Syntaxe : [PIDinRootline =pages-uid,pages-uid,...] ` lun des pid sp La condition est satisfaite si la page actuelle correspond a eci es ou si lune de ses sous-pages est impliqu ee. Cest seulement dans ces cas que le code TypoScript qui suit est ex ecut e. Si vous souhaiter assigner une valeur de couleur diff erente aux en-t etes dans diff erentes zones de larborescence des pages, utilisez le code suivant :
[PIDinRootline = 37] [Link].header1 = <h1 class="bleu">|</h1> [END] [PIDinRootline = 16] [Link].header1 = <h1 class="rouge">|</h1> [GLOBAL]

Len-t ete de la page 37 et ses sous-pages sont en bleu, la page 16 et ses sous-pages en rouge. PIDupinRootline Syntaxe : [PIDupinRootline =pages-uid,pages-uid,...] Voir PIDinRootline. La diff erence r eside en ce que lID de la page actuelle nest pas repris dans la comparaison. globalVar Syntaxe : [globalVar=var1=valeur,var2<valeur2,var3>valeur3,...] ` la valeur des variables La condition est remplie si la valeur de la variable correspond a syst` eme. Les variables sont s epar ees par des virgules. Les op erateurs possibles sont : >, <. ` lURL ...[Link]?id=45&L=3. [globalVar = GP:L=3] sapplique par exemple a globalString Syntaxe : [globalString=var1=valeur,var2=*valeur2,var3=*valeur3*,...] Idem que globalVar sauf que les valeurs sont compar ees en tant que cha nes de ca tre plac ` la n. ract` eres. Le symbole * peut e e au d ebut ou a [globalString = HTTP_HOST=[Link]] et [globalString = HTTP_HOST=*. ` la valeur [Link] [Link]] correspondent tous les deux a 342

5.11 TypoScript en d etail

userFunc Syntaxe : [userFunc =user_match(checkLocalIP)] Avec userFunc, vous utilisez vos propres fonctions PHP pour la v erication. tendre la version pour limpression Exemple : e Le bouton que nous avons utilis e jusqu` a pr esent dans le gabarit TS [Link] pour appeler la version pour limpression fonctionne tr` es bien, mais uniquement tant que vous ne cr eez pas dadresses URL statiques avec loption TS [Link]. tendu ci-apr` dit Cest pourquoi le gabarit est e es. La cha ne de caract` eres est e ee et rec oit diff erents param` etres selon le type dURL. Pour lobjet existant temp.*, lobjet 10 est dabord recongur e pour les adresses URL statiques.
[Link] = COA [Link] { wrap = <a href="|" name="Printversion" title="Printversion" target= "_blank" class="printversion">$printlabel</a> # simulateStatic Version, tous les liens inclus # seront aussi trait es. 10 = TEXT [Link] = getIndpEnv:REQUEST_URI

LURL afch ee via la propri et e stdWrap est divis ee en cha nes de caract` eres par la propri et e l [Link] et sa valeur . . En posant listNum=0, seul le premier e ement de la valeur est pris en compte et il est envelopp e par |.[Link]. (Le tout fonctionne si vous avez inclus les param` etres avec cong.simulateStaticDocuments_pEnc_onlyP en tant que valeur ladresse URL statique.) de hachage MD5 lorsque vous avez cr ee
[Link] = . [Link] = 0 [Link] = |.[Link]
}

` une Condition et nest trait Lobjet [Link].10 d ej` a existant est soumis a e que si celle-ci est v eri ee. globalString v erie si la variable du serveur ENV:REQUEST_URI contient la valeur /[Link]*. ` v Le symbole * sert a erier la cha ne de caract` eres juste pour la valeur de d epart /[Link].
# version "normale", pour les pages contenant [Link], avec les param` etres si # n ecessaire, par exemple : ?id=3434&L=1 [globalString = ENV:REQUEST_URI = /[Link]*]

Si la condition est remplie, lobjet actuel [Link].10 est supprim e et red eni, comme dans la version pr ec edente.
[Link].10 > [Link] { 10 = TEXT [Link] = getIndpEnv:REQUEST_URI [Link] = |&type=98 }

343

5 TypoScript

La condition se termine avec [global].


[global] ...

` pr tre utilis Le gabarit de la page reste inchang e. La version pour limpression peut a esent e ee dans les deux versions.

Exemple : s election de la langue


TYPO3 convient tr` es bien aux applications multilingues. Nous avons d ej` a montr e comment le r edacteur sacquitte dans le backend de la maintenance du contenu en plusieurs langues. tre s Celles-ci devraient maintenant pouvoir e electionn ees dans le frontend via un lien qui appelle la page par le param` etre &L=[sys_language_uid], lien devant lequel est plac e un petit ` choisir. drapeau repr esentant la langue a
Figure 5.94: Changement de langue : Franc ais est actif, English tre choisi (` peut e a gauche) et vice versa (` a droite)

Ceci est mis en pratique via un script PHP, mais peut se faire plus simplement en TypoScript. tant la Dans le setup du nouveau gabarit TS [Link], le franc ais est d eni comme e langue par d efaut (sys_language_uid=0) via la propri et e language=fr du TLO cong.
config.sys_language_uid = 0 [Link] = fr

Si lURL contient le param` etre L=1, la langue dont lID est 1 (sys_language_uid=1), langlais tant la deuxi` dans notre cas, est d enie comme e eme langue. Puisquil ne sagit pas dune d enition globale, la donn ee GET/POST est v eri ee par la condition [globalVar=GP:L=1].
# Langue anglaise, sys_language.uid = 1 [globalVar = GP:L = 1] config.sys_language_uid = 1 [Link] = en [global]

Le lien effectif est d eni comme un objet temporaire via le cObject COA. Lobjet 10 de type dobjet TEXT fournit une langue alternative qui d epend de la langue courante. Cest pourquoi value est une constante. Un tableau qui met en forme lafchage est plac e autour de lensemble de lobjet avec la propri et e stdWrap outerWrap. Cette derni` ere contient le drapeau de la langue alternative, qui est aussi une constante. 344

5.12 Travailler avec des cadres


[Link] = COA [Link] { 10 = TEXT [Link] = {$languageVersion} [Link] = <table width="160px" bgcolor="#FFFFFF" border="0" cellpadding="1" cellspacing="0"><tr><td width="12px"><img src="[Link]" width="10px" height="26p x" alt="" /></td><td width="16px"><img src="{$flagSmall}" width="14px" height="11px" border="0" /></td><td width="170px">|</td></tr></table>

La propri et e stdWrap typolink permet dafcher lobjet 10 sous forme de lien. La propri et e parameter d etermine lID actuel. Avec additionalParams, la troisi` eme constante est assign ee ` la balise <a>. au param` etre additionnel &L. AtagParams ajoute une classe CSS a
[Link] { [Link] = page:alias // TSFE:id additionalParams = &L={$foreignLanguageID} ATagParams = class="lang" }
}

Il ne vous reste plus qu` a d enir les constantes exactes pour le lien, en fonction de la langue choisie. Si celle-ci est la langue par d efaut, le franc ais ([globalVar=GP:L=0]), aucune condition ` 1. Le texte nest requise et le param` etre du lien est congur e en xant foreignLanguageID a et lic one du drapeau sont sp eci es respectivement par languageVersion et par agSmall. Constantes :
foreignLanguageID = 1 languageVersion = English version flagSmall = fileadmin/images/icons/[Link]

Si la langue s electionn ee est diff erente de la langue par d efaut, le franc ais, cest-` a-dire que le param` etre L de lURL courante a une valeur >0 ([globalVar=GP:L>0]), alors ajoutez une condition avec globalVar dans le champ constants et red enissez les constantes.
[globalVar = GP:L>0] foreignLanguageID = 0 languageVersion = Version franc aise flagSmall = fileadmin/images/icons/[Link] [global]

Ins erez le changement de langue dans le gabarit principal et v eriez le r esultat dans le frontend. Vous verrez que tout fonctionne uniquement avec du code TypoScript.

5.12 Travailler avec des cadres


tant la meilleure pratique, M eme si travailler avec des cadres nest plus consid er e comme e nous d esirons, par souci dexhaustivit e, vous montrer comment construire avec TYPO3 des sites bas es sur des cadres. 345

5 TypoScript

` laide de cadres, vous pouvez diviser le champ visuel de votre navigateur en diff A erents segments que vous d enissez librement. Chaque segment forme des pages distinctes dune application Web et peut en appeler dautres via des liens et lattribut target=nom du cadre. Un chier HTML comprenant le code suivant agence les pages [Link], [Link], [Link] et [Link] dans un jeu de cadres.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "[Link] <html> <head> <title>Le titre</title> </head> <frameset rows="205,*,50" framespacing="4" frameborder="1" bordercolor=" #000000"> <frame src="[Link]" name="top" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"> <frameset cols="195,*"> <frame src="[Link]" name="menu" frameborder="0" scrolling="no" marginwidt h="0" marginheight="0"> <frame src="[Link]" name="content" frameborder="0" scrolling="no" marg inwidth="0" marginheight="0"> </frameset> <frame src="[Link]" name="bottom" frameborder="0" scrolling="no" marginwid th="0" marginheight="0"> </frameset> </html>

Si la page est appel ee par le navigateur, elle afchera clairement les cadres. Le contenu est fourni par des pages particuli` eres.
Figure 5.95: R esultat de lexemple HTML dans le navigateur

5.12.1 Cr eation de cadres


R ef erence

234280

Pour cr eer un site avec des cadres en utilisant TYPO3, vous devez d enir quelques pages dans un gabarit TS.
myframeset = PAGE top = PAGE menu = PAGE content = PAGE bottom = PAGE

346

5.12 Travailler avec des cadres

Chaque page rec oit une valeur diff erente via la propri et e typeNum.
[Link] = 0 [Link] = 1 [Link] = 2 [Link] = 3 [Link] = 4

pour chaque page, except Un objet de contenu de type TEXT est cr ee e myframeset.
top.10 = TEXT [Link] = en-t ete menu.10 = TEXT [Link] = menu content.10 = TEXT [Link] = contenu bottom.10 = TEXT [Link] = bas de page

Vous pouvez d ej` a appeler les pages individuellement dans le navigateur via lid et le param` etre t type correspondant. Le concept de s election de gabarit avec type/typeNum a d ej` ae e pr esent e ` la section 5.8. a
Figure 5.96: Afchage de pages avec le param` etre type

` la valeur par d Si vous appelez une page sans le param` etre type, ce dernier sera x ea efaut ` pr (0) et appellera donc le gabarit myframeset. Nous d enissons a esent ce dernier comme un jeu de cadres. En tant quobjet de premier niveau du type dobjet PAGE, myframeset admet la propri et e frameSet du type dobjet FRAMESET. Il cr ee la balise <frameset> et les cadres respectifs ou les jeux de cadres, via les objets de la liste num erique. Pour plus de clart e, leurs t attributs ont e e standardis es en constantes et d eplac es vers le champ Constants. Constants
frameSetParams = border="1" frameborder="1" framespacing="0" frameParams = scrolli ng="auto" frameborder="1" border="1" framespacing=" 0" marginheight="0" marginwidth="0" noresize

Setup Le nombre de lignes et de colonnes du cadre ainsi que sa taille sont sp eci es dans les propri et es ` params. rows et cols ; une constante est assign ee a
... [Link] = 205,*,50 [Link] = $frameSetParams

347

5 TypoScript

` pr Les cadres et jeux de cadres sont a esent d enis via la liste num erique. Lobjet 10 est du type dobjet FRAMESET et sa propri et e obj est un pointeur vers le TLO repr esentant, la page top. Les attributs du cadre contenus dans la propri et e params sont aussi des constantes dans notre cas.
[Link] { 10 = FRAME 10 { obj = top params = {$frameParams} }

Lobjet 20 du type dobjet FRAMESET repr esente un jeu de cadres imbriqu e dans le jeu de ` cr ` afcher les pages menu cadres principal. Les objets 24 et 26 servent a eer deux cadres et a et content dans le jeu de cadres du milieu.
20 = FRAMESET [Link] = 195,* [Link] = {$frameSetParams} 20 { 24 = FRAME 24 { obj = menu params = {$frameParams} } 26 = FRAME 26 { obj = content params = {$frameParams} } }

Pour nir, nous cr eons le cadre 30 qui comprend le TLO bottom.


30 = FRAME 30 { obj = bottom params = {$frameParams} }
}

` nouveau la page dans votre navigateur sans le param` Si vous appelez a etre, le r esultat corres` celui de lexemple HTML. pondra a

5.12.2 Le site exemple avec des cadres


Pour cr eer le site exemple avec un jeu de cadres, nous avons choisi de diviser la page en trois cadres verticaux dans le gabarit TS ts wrap template (frames). Le menu de gauche, le contenu effectif et les colonnes de droite sont int egr es dans la zone de contenu m ediane content. Cette disposition facilite les r ef erences aux cadres cibles avec les menus. Sur la gauche, ils poss` edent ` la gure suivante. border a e t tous lattribut target="content". Le r esultat est afch ea e x e ` 1 an de mettre les cadres en e vidence. a 348

5.12 Travailler avec des cadres

Figure 5.97: Site exemple avec des cadres

` chaque fois les m ` nouveau Pour ne pas devoir red enir a emes param` etres des cadres, ils ont a t e e sauv es dans des constantes et d enis dans le champ Constants. Constants
frameSetParams = border="1" frameborder="1" framespacing="0" frameParams = scrolling="auto" frameborder="1" border="1" framespacing="0" marginh eight="0" marginwidth="0" noresize

s ; chacun deux rec Dans le champ Setup, quatre TLO du type PAGE sont cr ee oit son propre typeNumber dans typeNum. Setup
myframeset = PAGE top = PAGE content = PAGE bottom = PAGE [Link] = 0 [Link] = 1 [Link] = 2 [Link] = 3

` la propri Le chier CSS responsable de la mise en forme est assign ea et e stylesheet des objets de page cens es afcher du contenu.
[Link] = fileadmin/styles/[Link] [Link] = fileadmin/styles/[Link] [Link] = fileadmin/styles/[Link]

` nouveau Le jeu de cadres est appel e via le TLO myframeset par la propri et e typeNum=0. Il est a d eni avec lobjet frameSet et ses propri et es. Le nombre de cadres et leur taille sont d enis dans rows ; params prend en argument les attributs des cadres sous forme de constantes du champ Constants. Les cadres sont eux-m emes g en er es en tant quobjets de la liste num erique. 349

5 TypoScript
[Link] = 205,*,50 [Link] = {$frameSetParams} [Link] { 10 = FRAME 10 { obj = top params = {$frameParams} } 20 = FRAME 20 { obj = content params = {$frameParams} } 30 = FRAME 30 { obj = bottom params = {$frameParams} } }

` pr tre ajout Le jeu de cadres est d ej` a d eni, et seul le contenu des pages doit encore e e. A esent, tre nous assignons aux pages top, content et bottom des objets temporaires, devant encore e s . cr ee
top.10 < [Link] content.10 < [Link] bottom.10 < [Link]

Pour d enir le contenu, nous protons du fait que nous pouvons r eutiliser des gabarits TS tre existants. Les menus et les fonctionnalit es inclus dans la liste suivante doivent, bien s ur, e incorpor es dans lenregistrement de gabarit avec Include basis template. Le gabarit de base ` lui, int content (default) est, quant a egr e de la m eme mani` ere.
Figure 5.98: TypoScript Object Browser

tre plac Chaque objet temporaire est ici un COA. Ceux-ci doivent e es au d ebut du champ Setup an d etre d enis avant lanalyse syntaxique des objets de page. 350

5.12 Travailler avec des cadres

Les objets TS d esir es sont copi es dans les objets de la liste num erique et envelopp es par la balise <div>. Les menus sont ajust es dans le m eme temps. Par exemple, [Link] rec oit la page ` utiliser pour les objets embo content en argument. Si vous n etes pas s ur des propri et es a t es, le TypoScript Object Browser vous aidera. l [Link] reprend les e ements de contenu du cadre top. Le menu rootline (10), le bouton pour la version imprimable (40), limage de len-t ete (20) et la navigation principale (30) sont afch es.
[Link] = COA [Link] { ## Menu Rootline 10 < temp.rootline_autoparser_tswrap ## ajustement du menu [Link] = content [Link] = <div id="rootline">|</div> ## En-t ete 20 < temp.header_tswrap_autoparser [Link] = <div id="header">|</div> ## Navigation principale 30 < temp.navigation_autoparser_tswrap ## ajustement du menu [Link] = content [Link] = <div id="navi">|</div> # Version impression 40 < [Link] [Link] = <div id="printversion">|</div> }

l Les objets des e ements de contenu de la navigation secondaire (100), linformation m eta (200), la colonne Normal (20) et la colonne Droite (30) sont copi es dans lobjet [Link] pour le cadre content. Remarquez qu` a lint erieur du COA [Link], lobjet 10 de la liste t num erique a e e d eni lui-m eme comme un COA.
[Link] = COA [Link] { # Gauche / navigation secondaire + meta 10 = COA 10 { 100 < temp.subnavigation_autoparser_tswrap ## Ajustement du menu [Link] = content [Link] = content 200 < temp.metas_autoparser_tswrap [Link] = content } [Link] = <div id="subnavigation">|</div> # Contenu gauche 20 < [Link] [Link] = <div id="content">|</div> # Contenu droit 30 < [Link] [Link] = <div id="right"><div id="rightcontent">|</div><div id="rightfo

351

5 TypoScript
oter">&nbsp;</div></div> [Link] = 1 }

Lobjet temporaire [Link] pour le cadre bottom reprend les propri et es de lobjet temp. copyright_tswrap_autoparser via lobjet 20, an dafcher le sigle copyright dans le bas de page de lapplication.
[Link] = COA [Link] { # Bas de page 10 = TEXT [Link] = <div id="footer"></div> ## Copyright 20 < temp.copyright_tswrap_autoparser [Link] = <div id="copyright">|</div> }

Pour nir, les cadres cibles sont d enis dans le champ Constants pour que les formulaires l et les liens des e ements de contenu pointent vers le bon cadre. Ils sont ins er es en tant que diter avec constantes via content (default) avec la valeur par d efaut page, et vous pouvez les e le Constant Editor.
Figure 5.99: Les attributs des liens ` content sont x es a

Constants
PAGE_TARGET = content [Link] = content

tre sufsant pour sen faire une premi` Cet exemple dutilisation de cadres devrait e ere id ee. ` celui obtenu Si vous regardez le r esultat dans le frontend, vous verrez quil est identique a tre ajust dans les exemples pr ec edents. Quelques fonctionnalit es doivent encore toutefois e ees. Par exemple, le menu rootline nafche pas encore le chemin de la page courante, mais cela pourrait constituer lune de vos premi` eres t aches. 352

5.13 Futur et perspectives

5.13 Futur et perspectives


5.13.1 XHTML et accessibilit e
` la cr Le besoin de s eparer le contenu de la forme na pas contribu e uniquement a eation de syst` emes de gestion de contenu, mais a aussi inuenc e les technologies sous-jacentes. LHTML t ` lorigine en tant que langage bas l ae e d evelopp ea e sur des balises,10 avec des e ements de ` structurer les documents (les d mise en page destin es a ecouper en diff erentes parties), an dajouter dautres m edias tels que des images dans le corps de texte, et an dinterconnecter les documents par des liens. La prolif eration rapide des sites Web, surtout dans le secteur commercial, a eu une inuence sur limportance du graphisme comme outil de diff erenciation ou de personnalisation des sites. t Pendant longtemps, les tableaux ont e e utilis es comme outil principal pour mettre en forme ` construire les mises en page des listes. De plus en plus dastuces comme celle-ci ont servi a avec HTML, an de r epondre aux exigences dun m edia visuel. Beaucoup dastuces et de solutions de rechange, ainsi que les particularit es introduites dans les diff erents navigateurs, ont mis en danger la coh erence de la syntaxe HTML et, par cons equent, ` les interpr laptitude des programmes a eter logiquement, tels que les navigateurs destin es aux moins valides. Le consortium WWW dirig e par le d eveloppeur HTML Tim Berners-Lee a tent e tendant les sp quelquefois de satisfaire aux exigences du graphisme en e ecications HTML et en les rendant plus coh erentes, tout en standardisant la syntaxe et en accordant moins de libert e aux navigateurs pour linterpr etation. tait pr Lid ee de base derri` ere HTML, et m eme derri` ere son pr ed ecesseur SGML, e ecis ement de s eparer la forme du contenu11. D evelopp ees relativement t ot, les feuilles de style en cascade (CSS) constituent une technologie qui respecte cette id ee. Mais en pratique, leur acceptation diteurs de navigateurs et les d t par les e eveloppeurs de sites Web a e e tr` es lente. t L evolution des id ees de ces derni` eres ann ees a e e acc el er ee par les faits suivants : La maintenance du contenu et les changements dans le graphisme demandent beaucoup de travail, car les deux sont interd ependants. Puisque les documents sont inutilement longs, ils consomment de la bande passante et du temps de chargement. ` des co La restitution sur dautres mat eriels est impossible, si ce nest a uts prohibitifs. t De nouvelles technologies bien plus exibles et efcaces telles que le XML ont e e d evelopp ees. ` s Des lois sont pass ees dans plusieurs pays, obligeant a eparer la forme et du contenu pour des raisons daccessibilit e, du moins pour les sites Web des institutions publiques et des autorit es.
10 HTML est un d t eriv e du SGML, qui a e e d evelopp e comme un langage purement bas e sur des balises. Le XML a les m emes origines, et des efforts sont entrepris pour r etablir XHTML comme un langage de balisage pur. 11 On associe g ` une pr en eralement le d ebut du mouvement pour un langage g en erique a esentation ` une r faite par William Tunnicliffe, pr esident de comit e Graphic Communications Association (GCA), a eunion du Canadian Government Printing Ofce en septembre 1967 : son sujet la s eparation du contenu des documents de leur forme dans Charles F. Goldfarb, The Roots of SGML, a personal recollection , [Link]

353

5 TypoScript

Le XHTML joue un r ole important en tant que standard et comme successeur de lHTML. Il fait l le lien entre lHTML et le XML. Avec lintroduction du XHTML, les e ements de graphisme ont t tre contr e e, dans une grande mesure, supprim es du langage. La mise en forme devrait e ol ee exclusivement par CSS, autant que cela est possible, pour s eparer plus strictement le contenu tant de la forme. En outre, la tol erance des fautes est aussi fortement r eduite. La syntaxe e plus stricte, les navigateurs utilisent moins de ressources pour la correction des erreurs et fonctionnent donc de fac on tr` es efcace sur beaucoup de dispositifs diff erents, en ce compris sur les t el ephones intelligents. Les avantages du respect des standards en g en eral, et de XHTML en particulier, sont les suivants : ` de plus courts temps de chargement et a ` Faibles co uts : une meilleure performance due a ` une charge plus faible sur le serveur ; simplication de la maintenance des sites Web due a ` la s du code plus l eger et a eparation du contenu de la forme. Rentabilit e de linvestissement : le respect standard assure la compatibilit e des nouveaux ` dautres langages bas dispositifs dafchage et de lextension a es sur du XML. Plus grand champ dapplication : laccessibilit e est am elior ee pour diff erentes plates-formes, navigateurs et technologies dassistance ; enn, le dernier avantage, qui nest pas des moindres, est lam elioration du positionnement dans les moteurs de recherche.
R ef erence

895351

Le dernier point explique pourquoi XHTML et laccessibilit e sont souvent mentionn es ensemble : le Web Content Accessibility Guidelines (WCAG) ou le Barrierefreie Informationstechnologie-Verordnung (BITV) allemand recommande le respect des standards, car cela permet un support plus large pour les technologies dassistance, comme les lecteurs d ecran, les navigateurs vocaux et les lecteurs de lignes en braille pour les personnes ayant des handicaps physiques. Ainsi, en respectant les standards (X)HTML, nous avons d ej` a fait la moiti e du chemin vers un site Web au contenu accessible. Dans la version 3.6.0., TYPO3 est en conformit e avec XHTML1.0 Transitional . Tout le code t source du cur a e e r eam enag e pour respecter ce nouveau standard. Les extensions nont t ` jour progressivement par leurs auteurs pas e e impliqu ees dans ce processus et seront mises a respectifs. Voici les changements essentiels de XHTML1.0 : l Syntaxe : les e ements ne peuvent pas se chevaucher et doivent avoir des balises fermantes. l crits en minuscules. Les noms des e ements et des attributs sont e Les valeurs des attributs sont toujours plac ees entre des guillemets anglais, par exemple border="0". Les attributs peuvent ne pas appara tre sous une forme minimale, mais doivent tre transcrits en entier, par exemple checked="checked" au lieu de checked. e l tre d Les e ements vides doivent e elimit es, par exemple par <br /> ou <br></br>. l Le contenu des e ements de script et de style suit une syntaxe pr ecise ou, mieux, est d eplac e dans un script externe ou dans des documents de style.

354

5.13 Futur et perspectives

V eriez si vos pages Web sont conformes au XHTML avec la validation (X)HTML du consortium WWW (voir la r ef erence ci-contre). Les techniques de g en eration de pages Web acces tre sibles d ecrites dans la section suivante fonctionnent en respectant le XHTML, et devraient e consid er ees dans ce contexte. Voir les d enitions TypoScript les plus importantes concernant le XHTML congur ees via cong : doctype Type de donn ee : cha ne de caract` eres Exemple : xhtml_trans | xhtml_frames | xhtml_strict | xhtml_11 | xhtml_2 | none D eclaration du type de document. Montre les standards que le navigateur devrait respecter. doctypeSwitch Type de donn ee : bool een/cha ne de caract` eres Exemple : 1 Utilis e pour placer le prologue XML en dessous de la d eclaration Doctype une solution de rechange pour certains navigateurs. xmlprologue Type de donn ee : cha ne de caract` eres Exemple : none ` supprimer le prologue <?xml version="1.0" encoding="utf-8"?>. Sert a htmlTag_setParams Type de donn ee : string Congure les attributs de la balise <html> ; lorsque doctype est ins er e, tout est d ej` a tre utilis viter certaines incoh correctement d eni. Cette propri et e peut e ee pour e erences. htmlTag_langKey Type de donn ee : cha ne de caract` eres Exemple : en-US Permet de xer la valeur du langage pour les attributs xml:lang et lang de la balise ` condition que cong. doctype= xhtml ait e t <html>, a e sp eci e. htmlTag_dir Type de donn ee : cha ne de caract` eres Exemple : rtl | ltr La direction du ux de texte, par exemple pour larabe ou lh ebreu. removeDefaultJS Type de donn ee : bool een/string Exemple : external | 1 JavaScript est soit d eplac e ailleurs, soit enti` erement supprim e. inlineStyle2TempFile Type de donn ee : bool een Exemple : 1 Les d enitions de style, de type inline, sont d eplac ees dans des chiers s epar es.

R ef erence

570674

R ef erence

728651

355

5 TypoScript

xhtml_cleaning Type de donn ee : cha ne de caract` eres Exemple : all | cached | output Solution de rechange, par exemple pour les extensions.

5.13.2 Accessibilit e
En Allemagne, par exemple, le BITV (Barrierefreie Informationstechnik-Verordnung Ordinance t suite a ` la loi sur l on Barrier-Free Information Technology) a e e cr ee egalit e des chances pour ` lorigine que les organismes publics. Sur le les personnes handicap ees. Le BITV ne concerne a ` la n de 2005, t ` une large e chelle. A plan f ed eral, cette ordonnance a e e mise en pratique a devront avoir des sites toutes les institutions f ed erales et de nombreuses institutions dEtat Web accessibles aux personnes handicap ees. ` ces personnes les m ` linformation. Le but premier est de garantir a emes chances dacc` es a M eme celles ayant un handicap mineur, comme les myopes ou les daltoniens, devraient en b en ecier. Un autre effet positif est lam elioration g en erale de lergonomie des sites Web, ce qui contribue au bien commun. Voici un r esum e de ces principes directeurs, en accord avec les recommandations WCAG2.0 t daccessibilit e les plus r ecentes du Consortium W3C (qui nont pas encore e e publi ees ofciellement). tre : Pour les personnes handicap ees, les sites Web accessibles doivent e Perceptibles (du contenu de rechange comme les attributs alt pour les images) Utilisables (avec toute une s erie de dispositifs et de restrictions physiques, navigation ais ee, aide disponible) Compr ehensibles (langue, abr eviations) Robustes (conformes aux standards) ` la cr En pratique, ces principes directeurs concernent tous ceux qui contribuent a eation dun site Web bas e sur TYPO3 : d eveloppeurs du code source, d eveloppeurs dextensions, d evelop t peurs de sites Web et r edacteurs. Une bonne partie du travail a d ej` ae e r ealis ee dans le code source, mais il en reste beaucoup pour les extensions. Toutefois, les d eveloppeurs Web et les ` assumer leur part de responsabilit r edacteurs sont invit es a e. Ladaptation pratique la plus importante pour les d eveloppeurs du Web est le bannissement dans l(X)HTML du contr ole de la mise en page. Une des cons equences de cette technique est vidence et les la gestion de la mise en page sans tableau. La disposition de base, la mise en e autres techniques de graphisme sont principalement impl ement ees au niveau du CSS. LHTML reprend purement et simplement la structure du document. Ceci explique pourquoi le code source de toutes les pages accessibles est tellement semblable. Par exemple : dans une page HTML conventionnelle, de nombreux d eveloppeurs du Web mar l quent les en-t etes avec des e ements comme font-size et font-weight. Un lecteur d ecran ne sait que faire avec de tels marquages. Par contre, si les en-t etes sont marqu es avec des 356

5.13 Futur et perspectives

l e ements h1-h6, les lecteurs d ecran les reconnaissent pour ce quils sont, et pourraient par exemple afcher dabord les en-t etes pour une meilleure navigation dans un grand document. Outre les propri et es d ej` a mentionn ees ci-dessus, concernant la conformit e standard et les d eclarations, il existe aussi un certain nombre doptions de contr ole sp eciques au niveau de ` laccessibilit TypoScript qui touchent a e. En voici quelques exemples : La conguration suivante d esactive la fonction JavaScript dans les menus, an de supprimer lafchage dun cadre peu esth etique autour des images lorsque vous cliquez dessus.
noBlur = 1

Cette fonction est inoffensive en elle-m eme. Malheureusement, elle a pour effet demp echer tre supprim la navigation avec la touche de tabulation, et elle doit donc e ee. tiquettes dun formulaire et allant vers les e l Le lien partant des e ements ad equats du formu tre structur l laire doit e e de mani` ere claire. Le XHTML fournit un e ement label pour ce faire. Avec la propri et e
accessibility = 1

tiquettes et les du formulaire, nous activons la fonctionnalit e qui cr ee automatiquement des e l lie aux e ements de donn ees correspondants. Voici un exemple du r esultat :
<label for="email">Your Email:</label> <input type="text" id="email" name="email" />

Les contradictions avec le langage pr edominant sont pr ecis ees dans le code TypoScript :
[Link] = <span xml:lang="en" lang="en">Browser</span>

Il en r esulte une meilleure lisibilit e lorsque vous utilisez des lecteurs d ecran. ` A lint erieur des menus, vous pouvez utiliser
accesskey = 1

` d pour cr eer des attributs, servant a enir les cl es dacc` es qui permettent de naviguer avec les commandes du clavier. Lutilisation pratique de cet attribut HTML est controvers ee. En TYPO3, s a ` partir de la premi` les raccourcis clavier sont cr ee ere lettre de l el ement de menu en question. tant donn Cela entra ne quelques probl` emes, e e que de nombreux raccourcis clavier sont d ej` a r eserv es par le syst` eme dexploitation et le navigateur. Une opinion largement r epandue est ` 9 devraient e tre utilis que les nombres de 0 a es comme cl es dacc` es pour offrir des options de tre mise en pratique par cette navigation centralis ees. Cette fonctionnalit e ne peut toutefois e propri et e TypoScript : cest pourquoi vous feriez mieux de ne pas lutiliser. Adaptations TYPO3 Les tableaux HTML et les formulaires complexes qui satisfont aux recommandations daccessi tre afch bilit e ne peuvent pas encore e es. Dans de tels cas, les d eveloppeurs/administrateurs du 357

5 TypoScript

l ` cet effet, par exemple Web devraient stocker statiquement les e ements de contenu pr epar es a gr ace au type de contenu HTML de TYPO3. Nous pouvons supposer que la conformit e standard et laccessibilit e vont jouer un r ole plus tudi important dans la cr eation future de sites Web ; les effets sur TYPO3 sont e es par le projet TYPO3 Accessibility .

R ef erence

563588

5.13.3 TemplaVoil` a
R ef erence

003991

t Un certain nombre de nouveaux concepts ont e e introduits dans TYPO3 par TemplaVoil` a12 . ` partir dun module backend, vous pouvez Outre la possibilit e de pr eparer des gabarits HTML a aussi cr eer de nouveaux types de contenus exibles qui ne sont pas restreints par la structure dune table de base de donn ees. De plus, le concept de colonne est d epass e ; vous d enissez des zones qui nacceptent que certains types de contenu. Pour ce faire, un nouveau module de page est disponible dans le backend. Comme nous lavons d ej` a mentionn e, le d eveloppement de TemplaVoil` a nest pas encore termin e, mais cette extension nen est pas moins un outil puissant qui a d ej` a fait ses preuves en production, et dont une vue densemble est pr esent ee ici. Une pr esentation plus d etaill ee se ` la r trouve dans le didacticiel Futuristic Template Building disponible a ef erence ci-contre. ` lapplication, il est en fait constitu M eme si TemplaVoil` a semble convenir parfaitement a e de plusieurs composants diff erents, dont certains sont utilisables s epar ement. Pour illustrer les nouvelles possibilit es, les composants sont pr esent es individuellement, mais TemplaVoil` a peut tre vu comme un ensemble. n eanmoins e Int egration visuelle des gabarits Une fonction fondamentale de TemplaVoil` a est le traitement et lint egration ais es de gabarits HTML. Cette fonction est similaire au Template Auto-Parser, except e que les zones du gabarit ` utiliser ou a ` remplacer sont s ` un module a electionn ees par un simple clic de souris, gr ace a backend.

Figure 5.100: S election et conguration des zones du gabarit ` HTML par TemplaVoila avec un clic de souris

12 Le nom est inspir e du un jeu de mots voil` a d ej` a votre gabarit pour insister sur le fait quun gabarit HTML se cr ee tr` es rapidement dans TYPO3.

358

5.13 Futur et perspectives

Structures de donn ees(DS, Data Structures) et objets gabarits (TO, Template Objects) Apr` es la mise en correspondance par TemplaVoil` a, la conguration du gabarit HTML est sauv ee ` c dans deux structures de donn ees XML (DS et TO). Elle contient, a ot e de linformation sur le type dobjets ou de donn ees que ces zones acceptent, de linformation sur les zones s electionn ees. Les structures de donn ees (DS, Data Structures) et les objets gabarits (TO, Template Objects) sont d enis s epar ement mais sutilisent lun lautre. Les structures de donn ees contiennent ` la des d enitions abstraites des zones, des champs et des types de champs, comparables a d enition des champs dans une base de donn ees avec seulement quelques astuces suppl ementaires. ` une DS et d l Les objets gabarits font r ef erence a enissent lafchage dun e ement dune DS. ` utiliser pour lafchage et, Par exemple, un TO contient de linformation sur les chiers HTML a ` quel endroit int a egrer les valeurs des champs d enis dans la structure. Plusieurs TO peuvent tre d e enis pour un DS ; cela permet dafcher la m eme information sous diff erentes formes. Il y a de plus en plus dendroits o` u les DS et les TO sont disponibles. Vous pouvez utiliser les ` la fois la disposition de base et les types de contenu. Il est aussi possible DS pour d enir a dint egrer TypoScript dans des TO et de fournir des options dynamiques pour les types de ` lorigine plut contenu qui sont a ot rigides. La DS suivante (abr eg ee) d enit un champ de s election de chiers dimages (TCEforms) et inclut dans le m eme temps une conguration TypoScript pour leur restitution (<TypoScript>).
<T3DataStructure> <ROOT type="array"> <tx_templavoila type="array"> <title>ROOT</title> <description></description> <eType>input</eType> <tags></tags> </tx_templavoila> <type>array</type> <el type="array"> <field_image type="array"> <tx_templavoila type="array"> <title>Ein Bild</title> <eType>image</eType> <TypoScript> 10 = IMAGE [Link] = uploads/tx_templavoila/ [Link] = 1 [Link] = 0 [Link] = 150 [Link] = align=&quot;right&quot; </TypoScript> </tx_templavoila> <TCEforms type="array"> <config type="array"> <type>group</type> <internal_type>file</internal_type> <allowed>gif,png,jpg,jpeg</allowed>

359

5 TypoScript
<max_size>1000</max_size> <uploadfolder>uploads/tx_templavoila</uploadfolder> <show_thumbs>1</show_thumbs> <size>1</size> <maxitems>1</maxitems> <minitems>0</minitems> </config> <label>Bild</label> </TCEforms> </field_image> </el> <section>0</section> </ROOT> </T3DataStructure>

S election et restitution de gabarit La conguration TypoScript la plus simple pour afcher le contenu de la colonne Normal ` ceci : ressemble a
page = PAGE [Link] = 0 page.10 < [Link]

Il manque ici une mise en page de base. Les enregistrements de donn ees de la colonne Normal sont afch es au moyen de la conguration par d efaut du gabarit standard (par exemple content (default)). TemplaVoil` a adopte une approche diff erente, en red enissant compl` etement la restitution dune page. La conguration TypoScript correspondante se pr esente comme suit :
page = PAGE [Link] = 0 page.10 = USER [Link] = tx_templavoila_pi1->main_page

Il nest pas n ecessaire dinclure des colonnes ici, car la d enition des zones de contenu (en colonnes ou non) est d enie dans la DS. Elle est s electionn ee dans len-t ete de la page pour ` une page ou pour une partie de larborescence des pages. Nous choisissons un TO associ ea une DS pour d eterminer la mise en page. ` ceci : Le processus de restitution de TemplaVoil` a ressemble a Recherche dune DS et dun TO dans le rootline. Afchage du gabarit. Lecture de linformation sur la mise en correspondance des enregistrements de donn ees ` partir de lenregistrement de page courant, pour les zones de la DS qui acceptent les a l e ements de contenu. l Restitution des e ements de contenu et afchage de ceux-ci dans les zones ad equates. l Restitution des e ements de contenu qui contiennent eux-m emes des zones de contenu. 360

5.13 Futur et perspectives

` D enissez dans len-t ete de page et, pour chaque page, les DS et les TO correspondants a utiliser. Ainsi, vous pr ecisez les zones de contenu et la mani` ere dont ces zones seront restitu ees. Assignation du contenu aux pages De fac on surprenante, le contenu incorpor e de mani` ere habituelle nest pas afch e automatiquement avec TemplaVoil` a. Dans le module de page de TemplaVoil` a, un tel contenu appara t comme un enregistrement inutilis e . ` une page se fait simplement en situant les enregistreNormalement, associer du contenu a ments dans la page (le champ pid de la table de donn ees). Par opposition, TemplaVoil` a sauve l ` une page dans lenregistrement de linformation sur lafliation dun e ement de contenu a l la page lui-m eme. Cela signie que les e ements de contenu de la page peuvent provenir de tre r ` de nombreuses reprises, sans devoir nimporte quelle autre page et peuvent e eutilis es a l cr eer une copie de ces e ements, et sans devoir int egrer ceux-ci dans la page avec Insert record. Pour plus de clart e, le contenu est sauv e dans les pages dans lesquelles il sera publi e, comme c etait le cas auparavant. Flexforms Les Flexforms vous fournissent un autre moyen pour entrer et sauver des donn ees en TYPO3. Ils sont d ej` a largement impl ement es et sont utilis es de mani` ere extensive par TemplaVoil` a.
Figure 5.101: ement de contenu El avec Flexform et RTE

tre consid Si lon excepte lutilisation typique de TYPO3 comme CMS, ce syst` eme peut e er e comme un syst` eme de gestion de bases de donn ees bas e sur une interface Web. En principe, tre trait tous les types denregistrements peuvent e es avec TYPO3. Mais on est toujours limit e ` par la structure de la table de base de donn ees correspondante. La table tt_content qui sert a sauver plusieurs types de contenu tels que Texte, Image, Table ou Formulaire est utilis ee de mani` ere exible les formulaires pour linsertion des donn ees de types de contenu sont de taille variable mais ceci nest quune astuce, puisque chaque enregistrement sauv e contient tous les champs des autres types de contenu, m eme si ceux-ci ne sont pas utilis es. Si vous tendre voulez sauvegarder des donn ees suppl ementaires dans un enregistrement, vous devez e la table de base de donn ees. ` laquelle vous pouvez utiliser pratiquement auLes Flexforms apportent une solution gr ace a tant de champs que vous le d esirez dans un enregistrement. En outre, chaque enregistrement 361

5 TypoScript

peut utiliser dautres champs. Puisque TYPO3 est construit sur un syst` eme de bases de donn ees relationnelles (par exemple MySQL) qui ne peut traiter de telles donn ees, nous avons besoin ` utiliser un champ de base de donn dun nouvel artice. Il consiste a ees sufsamment grand, dans lequel les donn ees sont sauv ees dans leur propre format. Par cons equent, les donn ees de Flexform sont sauv ees dans des enregistrements normaux. Dans les cas extr emes, la table utilis ee peut ne contenir quun seul champ pour le contenu qui ` sauver les donn sert a ees. Toutefois, les champs correspondants peuvent servir plusieurs fois tre m ` des champs conventionnels. et e elang es a Les structures de donn ees (DS) d ej` a famili` eres sont aussi utilis ees pour les Flexforms en d enissant les types de champs quils utilisent. Les options disponibles dans la structure de donn ees sont les m emes que celles des TCEForms. Par exemple, le code XML suivant comprend un extrait de la DS pour la d enition dun champ de texte, en int egrant le RTE.
<field_newstext type="array"> <tx_templavoila type="array"> <title>Newstext</title> <eType>text</eType> <proc type="array"> <HSC>1</HSC> </proc> </tx_templavoila> <TCEforms type="array"> <config type="array"> <type>text</type> <cols>48</cols> <rows>5</rows> </config> <label>Texte</label> <defaultExtras>richtext[paste|bold|italic|underline|formatblock|class|left |center|right|orderedlist|unorderedlist|outdent|indent|link|image]:rte_transform[f lag=rte_enabled|mode=ts]</defaultExtras> </TCEforms> </field_newstext>

Les donn ees du Flexform sont elles-m emes sauv ees sous le format XML. Comme vous le voyez, les composants de base du traitement XML existent d ej` a dans TYPO3. ` On peut se demander si les Flexforms sufsent a eux seuls pour traiter les donn ees. La r eponse est quil nest pas facile de s electionner ou de parcourir les donn ees de la base de donn ees. La base de donn ees ne peut ni traiter les donn ees XML enregistr ees, ni distinguer le contenu du code XML qui lentoure. D` es lors, les Flexforms ne sont pas r eellement ad equats pour les tre s donn ees qui doivent e electionn ees sur base de leur contenu. Les Flexforms sont aussi disponibles ind ependamment de TemplaVoil` a. Contenu exible Lint egration visuelle des gabarits HTML, lutilisation de la DS, les possibilit es des Flexforms ` TemplaVoil` permettent a a dintroduire de nouveaux types de contenus exibles qui viennent sajouter aux types de contenu classiques tels que Text, Text w/image, etc. Ici, le d eveloppeur 362

5.13 Futur et perspectives

` partir dun gabarit HTML, dispopeut d enir assez facilement un nouveau type de contenu a nible imm ediatement pour le traitement et afch e correctement dans le frontend. De plus, il ` plusieurs endroits. Par exemple, un e l est possible de d enir des zones qui sont reprises a ement de contenu peut contenir jusqu` a trois liens avec des descriptions. Vous pouvez aussi utiliser des types de contenu exibles sans un gabarit dafchage, m eme sans TemplaVoil` a dans ce cas, seuls les Flexforms sont utilis es. Nous navons besoin que dune structure de donn ees (DS) pour ce faire, un objet gabarit (TO) nest donc pas indispensable. Cest une bonne id ee que de cr eer un gabarit simple, et ce, m eme si ce gabarit sera inutile par la suite, car TemplaVoil` a d epend dun gabarit HTML pour cr eer des structures de donn ees. Contenu restrictif Bien que le nouveau type de contenu se nomme Flexible content, vous pouvez utiliser le m eme concept pour des types de contenu tr` es restrictifs. Avec le nouveau module Web ` restreindre le Page de TemplaVoil` a, une zone de contenu du gabarit est d enie de fac on a ` deux. Si ces deux types de contenu sont d nombre de types de contenu sp eciques a enis ` linsertion de contenu sp eciquement pour cette zone, vous avez une solution qui va r eagir a ` travers tout le site Web. Il sagit non conforme, et ainsi garantir une mise en page universelle a ` celui que TYPO3 a utilis dun concept oppos ea e jusqu` a pr esent, dans lequel les r edacteurs jouissaient dune grande libert e. Vous pouvez bien s ur combiner les deux m ethodes de nimporte quelle mani` ere. ` la place des colonnes Des zones de contenu a M eme si le concept des colonnes semble toujours pratique et satisfaisant, avec TemplaVoil` a, ` ce genre de division. M vous n etes plus oblig e de vous limiter a eme sans TemplaVoil` a, vous diter et inclure du contenu dans des zones pr pouvez certainement e ecises, puisque vous pouvez ajouter et utiliser autant de colonnes que vous le d esirez. Cependant, cela devient plus ` partir du moment o` difcile pour les r edacteurs de garder une vue densemble a u la mise en page se base de moins en moins sur les colonnes.
Figure 5.102: Edition de contenu avec le module de la page

363

5 TypoScript

Pour cette raison, TemplaVoil` a contient un nouveau module de page qui, dans la derni` ere tape de son d e eveloppement, est pr evu pour afcher sch ematiquement la mise en page, pour tre facilement e dit que les diff erentes zones puissent e ees. En outre, vous avez la possibilit e de congurer des r` egles pour contr oler lutilisation de certains types de contenu dans certaines zones.

Utilisation de TemplaVoil` a
R ef erence

673845

Si vous regardez ces possibilit es comme un tout, vous voyez que TemplaVoil` a convient particuli` erement bien aux sites Web qui changent fr equemment de mise en page, pour lesquels les pages sont divis ees en zones et en colonnes, ou encore qui utilisent beaucoup de types t diff erents de contenu. En fait, TemplaVoil` a a pr ecis ement e e d evelopp e dans le contexte dun projet ayant ces exigences. Le projet requ erait un workow dans lequel un graphiste Web de l ` partir de gabarits HTML. vait produire des e ements de contenu dans une interface WYSIWYG, a tude de cas a e t ` la r Une e e r ealis ee pour ce projet. Elle est disponible a ef erence ci-contre. ` la gure 5.103, nous navons pas utilis Comme vous le voyez a e de colonnes dans le site Web. ` divers gabarits dans le site Web, ayant chacun Nous avons par contre eu tr` es souvent recours a des zones de contenu diff erentes.

Figure 5.103: ` utilis TemplaVoila e en production

364

5.13 Futur et perspectives

TemplaVoil` a est un outil puissant pour la mise en forme du contenu et des gabarits et, pour une version alpha, il a atteint un bon niveau de qualit e. Il sera certainement encore am elior e ` ce stade, TemplaVoil` pour inclure les fonctions manquantes et en ajouter de nouvelles. A a a d ej` a introduit plusieurs innovations de base qui peuvent vous servir, m eme sans utiliser le module.

365

6
6.1 Aperc u

Extensions

tendre ses fonctionnalit Une des caract eristiques principales de TYPO3 est de pouvoir e es gr ace au syst` eme des extensions. Les extensions se pr esentent sous forme de paquetages simples ` installer pouvant contenir des modules, des plugins, du code TypoScript, etc. Les extensions a ` partir dun r sont install ees sur le serveur, gr ace au gestionnaire dextensions, a epertoire central, le r epertoire dextensions. t tait Les extensions ont e e introduites dans la version 3.5 de TYPO3. Avant cette version, il e d ej` a possible de compl eter le syst` eme avec des interfaces. Les extensions dont les tables de base de donn ees d ebutent avec tt_ sont issues de cette p eriode. Si ces extensions avaient le tait une t m erite dexister, leur installation e ache ardue, impliquant diff erentes congurations dans plusieurs syst` emes de chiers s epar es. Il y avait aussi un risque dincompatibilit e entre les diff erentes extensions. Lintroduction du syst` eme dextensions a provoqu e la cr eation dune interface dinstallation t claire. De plus, les interfaces existantes ont e e group ees, permettant pour la premi` ere fois un 367

Chapitre

6 Extensions

d eveloppement d ecentralis e de TYPO3, lui donnant un second soufe. Depuis lapparition dune architecture dextensions et du r epertoire dextensions, la quantit e dextensions a rapidement augment e. Les extensions, disponibles gratuitement, sont d evelopp ees soit par des programmeurs amateurs ambitieux, soit par des fournisseurs professionnels de services Internet. On y retrouve, en partie, de petites am eliorations des fonctions existantes, mais dans la plupart des cas, ces ` part enti` extensions sont des applications a ere, telles que des archives de publication, des gestionnaires de biblioth` eques, des calendriers d ev enements, ou un syst` eme de r eservation pour tels. les ho Le syst` eme dextensions na pas seulement le m erite de faciliter le d eploiement dextensions ` laide dune interface dadministration. Il offre aussi aux programmeurs une s a ecurit e et une ` jour le code source de TYPO3. architecture claire, ce qui garantit la possibilit e de mettre a

6.2 Le syst` eme dextensions


Le syst` eme dextensions consiste en plusieurs composants interd ependants : Extension API Interface vers le noyau du syst` eme, permettant lint egration dextensions dans le syst` eme TYPO3 Gestionnaire dextensions Module backend pour ladministration et linstallation dextensions R epertoire dextensions ` partir de, ou R epertoire central en ligne permettant le t el echargement dextensions a vers le site [Link] ` quoi ressemblent-ils concr` Ces composants forment la base des extensions mais a etement ?

6.2.1 Structure dextensions


Une extension consiste en plusieurs chiers rassembl es dans un r epertoire. Le nom du r epertoire repr esente aussi la cl e dextension pour cette extension. Les sous-r epertoires sont utilis es pour les composants (plugins, modules, etc.) de cette extension. Voici le r epertoire pour lextension mininews :
mininews/ doc/ [Link] wizard_form.dat wizard_form.html ext_emconf.php ext_icon.gif ext_localconf.php ext_tables.php ext_tables.sql ext_typoscript_setup.txt icon_tx_mininews_news.gif

368

6.2 Le syst` eme dextensions


[Link] locallang_db.php pi1/ ce_wiz.gif class.tx_mininews_pi1.php class.tx_mininews_pi1_wizicon.php [Link] [Link] [Link]

Seul le programmeur manipule ces chiers individuellement, sil d esire apporter des modications directement dans lextension. Un administrateur ou programmeur de site Web nacc` ede ` ces chiers, ou na pas a ` sen inqui m eme pas a eter, puisque les extensions sont install ees en paquetages, comme nous allons le voir.

6.2.2 Cl e dextension
Le nom du r epertoire dune extension d enit sa cl e dextension, et cette cl e constitue la base ` lint des noms des chiers et du code PHP a erieur de lextension. Ceci signie que si vous renommez le r epertoire (ou la cl e), vous devez aussi renommer les chiers, et modier le code PHP. tre unique car toutes les extensions sont install La cl e dextension doit e ees dans un seul r epertoire. Dans un m eme temps, un espace de nommage au sein de TYPO3 est d eni par tre enregistr les cl es uniques, permettant d eviter les conits. Les cl es dextension doivent e ees dans le r epertoire dextensions de TYPO3 (TER). Nous y reviendrons plus loin.

6.2.3 Composants dextensions


Pour augmenter les capacit es du syst` eme, une extension peut contenir les composants suivants : Nouvelles tables de base de donn ees* 1 . Extension de tables de base de donn ees existantes* Tables de base de donn ees avec des donn ees statiques Fonctions frontend TypoScript* ements de contenu* El Menus frontend* TypoTags* Plugins frontend de toutes sortes* Fonctions backend Modules backend*
1 Les composants marqu tre cr s a ` laide de lExtension Kickstarter, qui simplie es dune ast erisque (*) peuvent e ee ` la section 7.2. consid erablement le d eveloppement de telles extensions. Le Kickstarter est d ecrit en d etail a

369

6 Extensions

Entr ees dans des menus contextuels* TSCong page et utilisateur* Services* Biblioth` eques Conguration syst` eme Habillage backend (couleurs et ic ones) Extension/modication de chaque classe PHP du syst` eme

6.2.4 Cat egories dextensions


Les extensions sont class ees en cat egories de base, en fonction de leur place dans larchitecture TYPO3. Ces cat egories sont afch ees dans le gestionnaire dextensions et correspondent fon` une division technique. Elles sont aussi class damentalement a ees dans le r epertoire dextensions en fonction de leur application. On y retrouve des cat egories telles que communication, eCommerce, habillage, administration, et autres. Backend Les extensions list ees dans cette cat egorie compl` etent la fonctionnalit e du backend, mais napparaissent pas en tant que modules. Backend Modules Les modules backend y sont list es ; on y retrouve de nouveaux modules principaux (ex. : Web, Outils), des modules (ex. : Web Liste) ou des fonctions de sous-modules (ex. : Web Fonctions Importer). Frontend Les extensions de cette cat egorie contiennent de petites fonctionnalit es ou congurations frontend (balises m eta, nouvelles balises TYPO3) Frontend Plugins Cette cat egorie contient toutes les extensions qui compl` etent lafchage et les fonc l tionnalit es du frontend comme des e ements de contenu, des menus, des bordures de texte ou des applications frontend compl` etes (livre dor, actualit es, etc.). Miscellaneous Vous y trouverez toutes les extensions qui nentrent pas dans dautres cat egories, telles que des tables de base de donn ees statiques, des fonctions pour cr eer des chiers PDF ou programmer des biblioth` eques. Services tre utilis Cette cat egorie contient des fonctions pouvant e ees par dautres extensions ou par le syst` eme. Ces fonctions repr esentent une autre interface dextension dont la complexit e est moindre que celle des extensions. Templates Dans cette cat egorie sont regroup es les gabarits TypoScript de sites entiers sous forme dextensions. Ils correspondent aux gabarits des sites compris dans TYPO3, se trouvant dans les enregistrements de gabarits sous Static templates. 370

6.2 Le syst` eme dextensions

Examples Cat egorie pour exemples de tous types ; ce sont souvent des extensions construites dans des didacticiels ou illustrant lutilisation dune API. Documentation Cette cat egorie contient des extensions de documentation bas ees sur des documents OpenOfce.

6.2.5 Installation: niveau syst` eme, global ou local


tre install Les extensions peuvent e ees dans trois r epertoires diff erents du syst` eme : typo3/sysext/ (type : syst` eme) On y trouve les extensions syst` eme telles que cms et lang. Ici, aucune extension ne peut tre install e ee avec le gestionnaire dextensions. typo3/ext/ (type : global ) On y retrouve les extensions globales. Ces derni` eres sont normalement celles fournies par TYPO3. Ces extensions contiennent surtout des modules backend et fournissent des tendues n ` la plupart des applications TYPO3. Il fonctionnalit es de base ou e ecessaires a ` laide de lInstallation Tool an est possible de congurer loption allowGlobalInstall a de permettre linstallation dextensions dans ce r epertoire. Les param` etres par d efaut ne lautorisent pas, parce que des conits entre les versions pourraient appara tre dans un environnement o` u plusieurs sites TYPO3 partagent une m eme installation TYPO3. typo3conf/ext/ (type : local ) Les extensions sont normalement toutes install ees dans ce r epertoire. On les appelle extensions locales, parce quelles ne sont valables que pour linstance TYPO3 locale. En fait, elles ont m eme priorit e sur les extensions globales. Cela signie que lorsquune extension est install ee localement et globalement, linstallation locale est toujours comprise ` celui de linstallation dans le syst` eme, m eme si son num ero de version est inf erieur a globale. Plusieurs instances (sites Web) TYPO3 peuvent partager une m eme installation TYPO3 en utilisant des liens symboliques, par le biais desquels ils partagent aussi des extensions globales. Toutefois, les extensions locales ne demeurent visibles que pour une instance particuli` ere dun site.

6.2.6 R epertoire dextensions


Dans le r epertoire dextensions TYPO3 (TER), les extensions sont enregistr ees de fac on cen tre t trale et peuvent e el echarg ees vers votre propre installation TYPO3, puis install ees. Le r epertoire se trouve sur le site de [Link]. Les programmeurs peuvent transf erer une extension vers le r epertoire en quelques clics de souris via le gestionnaire dextensions. Lextension est alors disponible soit pour certains utilisateurs, soit pour tous, en fonction de sa conguration. Il est tout aussi simple de t el echarger une extension, en quelques clics seulement.
R ef erence

617220

371

6 Extensions

Figure 6.1: Aperc u des cat egories dextensions dans le TER sur [Link]

t Lorsquune extension a e e t el echarg ee et install ee, la liste des extensions disponibles dans le r epertoire dextensions de [Link] est reprise dans le module Gest dExtensions de votre propre installation TYPO3. Lorsquune extension est s electionn ee et install ee, le r epertoire envoie un chier (dextension .t3x), contenant le r epertoire complet de lextension, avec tous les chiers n ecessaires, vers le gestionnaire dextensions de linstallation locale. Ce dernier ` d esarchive le paquetage vers le r epertoire dextensions. Lextension est maintenant pr ete a tre install ` laide du gestionnaire dextensions. Lors de linstallation, certains chiers du e ee a r epertoire dextensions sont d etect es, lus et ins er es dans le syst` eme. Le gestionnaire dextensions fournit aussi des fonctions dinstallation pour cr eer les tables de base de donn ees ` lutilisateur. n ecessaires, ou offrir une s election doptions de conguration a La voie inverse, cest-` a-dire lenvoi dune extension vers le r epertoire, fonctionne dune fac on ` la section 7.3.3. similaire et est expliqu ee a Le processus dinstallation est tr` es simple et pratique pour lutilisateur : si une extension est install ee, lutilisateur ou lutilisatrice trouvera de linformation dans les chiers install es, mais ` lic ce nest pas n ecessaire. Vous pouvez v erier quune extension est d ej` a install ee gr ace a one verte dans le gestionnaire dextensions en mode Loaded Extensions ou Available extensions to install. Au moment de la publication de ce manuel, il existe plus de 1000 extensions disponibles. Toutefois, une grande quantit e des extensions enregistr ees dans le r epertoire ne sont pas dis t ponibles pour le public, probablement parce quelles nont pas e e correctement compl et ees, ou parce que les programmeurs continuent den am eliorer le code, ou encore parce quau-

372

6.3 Gestionnaire dextensions

cune documentation nexiste. Nous souhaitons toutefois souligner que les projets OpenSource vivent gr ace aux contributions actives des utilisateurs, et quil est d eplorable de penser que taient publi clat dans certains de ces diamants bruts pourraient, sils e es, retrouver un nouvel e les mains dautres programmeurs ! Il est aussi beaucoup plus simple de trouver de laide et du soutien si vous poss edez d ej` a une version beta appropri ee, ou une description de projet.2

6.2.7 Documentation
Dans le r epertoire dextensions, vous trouverez aussi la documentation compl` ete de TYPO3, sous forme de documents OpenOfce. Ces extensions ne contiennent que de linformation, et ` la cat appartiennent a egorie documentation. Les documents sont disponibles sur [Link] en tant que pages HTML dans la section Documentation , o` u vous pouvez aussi ajouter des commentaires. En dehors de ces extensions de documentation, qui contiennent g en eralement des r ef erences et des didacticiels, il peut, et devrait, y avoir de la documentation sp ecique pour chacune des extensions. Le m eme syst` eme que pour les extensions de documentation sapplique ici, hormis que ces extensions contiennent aussi un plugin, un module ou dautres donn ees. La ` une extension peut, si n tre t ` partir du documentation sp ecique a ecessaire, e el echarg ee a r epertoire en m eme temps que lextension. On la retrouve ensuite dans le chier OpenOfce [Link] dans le sous-r epertoire doc/ de lextension. Les documents OpenOfce proposent certains avantages sur dautres formats tels que HTML, PDF ou DocBook : Un traitement de texte puissant et disponible gratuitement facilite la r edaction. Les chiers OpenOfce .SXW sont imprim es dans le format d esir e. ` partir dOpenOfce. Il est possible de cr eer des chiers PDF directement a ` lire et a ` convertir Le format de chier OpenOfce qui est ouvert et bas e sur XML est simple a (en HTML par exemple). Il est possible dafcher la documentation directement en format HTML dans [Link], ` Document Suite. gr ace a
R ef erence

280413

6.3 Gestionnaire dextensions


Le gestionnaire dextensions (EM3 ) est un module backend pr evu pour ladministration des extensions. Le module est situ e dans le module principal Outils, ce qui implique quil est normalement r eserv e aux administrateurs. Les fonctionnalit es du gestionnaire dextensions comprennent : La liste des extensions install ees Linstallation et la d esinstallation des extensions
2 Les descriptions de projet se trouvent dans la section Projects du site [Link], au m eme titre que les projets ` la recherche daide et de sponsors. Nimporte qui peut e crire une description de projet, ce qui constitue une d ej` aa fac on efcace daborder des id ees et des concepts an de les mettre ensuite en pratique sur [Link]. 3 NdT : EM est labr eviation dExtension Manager

373

6 Extensions

Le transfert des extensions vers votre propre installation par un chier T3X Le transfert des extensions du r epertoire en ligne (TER) vers votre propre installation (t el echargement) Le transfert de vos propres extensions vers le r epertoire dextensions TYPO3 Le d eveloppement de vos propres extensions (Kickstarter) crans correspondants du gestionnaire dexLa section suivante pr esente les fonctions et les e tensions.

6.3.1 Liste des extensions disponibles


Ce mode afche toutes les extensions disponibles dans linstallation TYPO3. Elles sont list ees dans le tableau avec de linformation compl ementaire. Lic one +/- situ ee au d ebut de chaque ligne indique si une extension est install ee (ic one verte). En cliquant sur cette ic one, vous installerez ou d esinstallerez lextension correspondante.
Figure 6.2: Afchage des extensions disponibles dans le gestionnaire dextensions

Chaque extension est afch ee avec son nom et son ic one propres. Quelques-unes ont un point dinterrogation pour ic one, ce qui signie que le programmeur de lextension na pas encore dic cr ee one pour celle-ci. Les autres d etails afch es sont la cl e dextension ainsi que le num ero de version. Dans la colonne suivante, une ic one document peut appara tre. Elle signie quun chier OpenOfce [Link] existe dans le sous-r epertoire doc/ de cette extension. La documentation se trouve aussi sur [Link] dans la liste dextensions. ` la fois globalement et localement. Une telle instalIl est possible dinstaller une extension a lation est marqu ee comme Local GL dans le gestionnaire dextensions. De cette fac on, les 374

6.3 Gestionnaire dextensions

tre modi extensions install ees localement peuvent e ees selon vos propres exigences, et vous tre assur pouvez e e que cette version-l` a sera int egr ee dans le syst` eme, plut ot que loriginale.

6.3.2 Importer des extensions du r epertoire


tre import ` partir du r Les extensions peuvent e ees simplement a epertoire en ligne vers votre installation. Pour ce faire, s electionnez loption Import extensions from online repository du menu principal du gestionnaire dextensions.
Figure 6.3: Connexion au r epertoire et transfert dun paquetage dextension vers le serveur

` partir du r Avant daller plus loin dans notre description du transfert dextensions a epertoire, tre nous expliquerons bri` evement comment un chier de paquetage dextension (*.t3x) peut e ` laide du bouton Upload extension le. Vous devez transf er e directement vers votre serveur a s electionner le chier T3X ainsi que le r epertoire dinstallation, puis transf erer le chier vers ` la le serveur en cliquant sur Upload extension le. Linstallation comme telle correspond a reprise des donn ees en provenance du r epertoire, et est d ecrite ci-dessous. Vous pouvez acc eder au r epertoire dextensions en cliquant sur Connect to online repository. tablie vers le r Une connexion est alors e epertoire et vous obtenez une liste des extensions disponibles. De plus, vous pouvez sp ecier une cl e dans le champ Look up, avec laquelle vous ` des versions sp pouvez acc eder a eciales des extensions. Une version dextension prot eg ee de cette mani` ere nest pas publique, et nest accessible quen sp eciant la cl e. Cest utile si vous quipe de d voulez communiquer une extension aux testeurs dune e eveloppement. La liste en provenance du r epertoire dextensions contient dautres informations en plus de celles d ej` a mentionn ees. La premi` ere colonne afche des ic ones de t el echargement si lextension nest pas encore disponible sur le serveur local, ou si une version plus r ecente est disponible. La colonne du centre vous permet de comparer le num ero des versions. La colonne tes le propri Access montre si vous e etaire (Owner ) de lextension ou un membre (Member ). Les membres dune extension peuvent t el echarger celle-ci, m eme si elle nest pas disponible tats (disponible localement ou nondans le r epertoire pour tous les utilisateurs. Les diff erents e vidence par une couleur diff disponible, propri etaire/membre)4 sont aussi mis en e erente des lignes du tableau.
4 Les fonctions des membres ne sont pr esentes que si vous avez un compte utilisateur sur [Link] et que vous avez saisi les donn ees dacc` es dans le menu Settings du gestionnaire dextensions.

375

6 Extensions

Figure 6.4: Liste des extensions disponibles dans le r epertoire dextensions

crans, on peut cocher loption Shy extensions pour afcher les extensions Dans tous les e qui composent le paquetage de base, disponibles dans la plupart des installations. Les menus ` dautres modes dafchage. Order by et Show permettent dacc eder a Si vous avez d ecid e de t el echarger une extension, celle-ci est dabord transf er ee sur votre serveur, mais pas imm ediatement install ee. Pour linstaller, cliquez sur lic one + qui appara t t dans la liste, apr` es que lextension a e e t el echarg ee. Vous avez aussi la possibilit e dinstaller ` laide de lic lextension dans le mode Available extensions to install a one +. Vue d etaill ee et options Si vous souhaitez avoir plus de d etails sur une extension avant de la t el echarger, cliquez sur son nom. Vous verrez alors un aperc u pr ecis donnant des informations telles que son nom, lauteur, la version, mais aussi les chiers et les tables de base de donn ees quelle contient. ` Dans la vue d etaill ee, vous pouvez s electionner la version a t el echarger. Si loption allowGlobalInstall est activ ee dans le $TYPO3_CONF_VARS (Outil dinstallation), vous pouvez aussi s electionner le chemin pour linstallation des extensions globales dans typo3/ext/. Si loption em_alwaysGetOOManual est aussi activ ee, la documentation de lextension sera automa tre r tiquement t el echarg ee en m eme temps, action qui, sinon, devrait e ealis ee s epar ement. Loption Include most recent translation permet dintroduire toutes les traductions dispo tre utile si le programmeur na pas encore int nibles dans lextension. Ce qui peut e egr e les traductions souhait ees, disponibles via le TER, dans la version consid er ee. En fonction du type dextension et des modules et plugins quelle contient, une ou plusieurs tapes seront n ` linstallation. Quelques extensions peuvent e tre install e ecessaires a ees en un 376

6.3 Gestionnaire dextensions

tapes dinstallation seul clic. Pour les autres, on vous demande si vous voulez effectuer les e n ecessaires, telles que par exemple cr eer de nouvelles tables de base de donn ees, ou vider le cache. Il est parfois n ecessaire de mettre en place la conguration et de la modier pendant tre modi linstallation. Les param` etres pouvant e es sont d ecrits, soit sur le moment m eme, soit dans la documentation fournie avec lextension.
Figure 6.5: Vue d etaill ee de lextension General Ofce Displayer

Toutefois, apr` es avoir install e les modules, ces derniers ne sont pas imm ediatement visibles dans le backend. Vous devez alors recharger le backend en cliquant sur le bouton rafra chir Ctrl + R ). de votre navigateur (ou en utilisant le raccourci clavier Les extensions sont d esinstall ees de fac on similaire, en cliquant sur lic one verte - . Assurezvous que les tables de base de donn ees utilis ees seulement par cette extension ne sont pas automatiquement effac ees. De cette fac on, vous pouvez conserver les donn ees. Par contre, ` long terme, il est probable que plusieurs tables inutilis a ees saccumulent dans la base de tre enlev ` laide de loutil dinstallation que nous avons donn ees. Elles peuvent alors e ees a pr esent e plus t ot.

6.3.3 Le Kickstarter
Le Kickstarter est loutil pour le d eveloppement dextensions, permettant la mise en place ra e. pide et simple du cadre dans lequel une extension sera cr ee Le Kickstarter est enregistr e dans une extension s epar ee (r epertoire dextension Kickstarter : extrep_wizard ?) ; si elle nest pas disponible dans votre installation, commencez par t el echarger lextension. D` es quelle est install ee, le Kickstarter appara t dans le menu Make new extension du gestionnaire dextensions. 377

6 Extensions

Figure 6.6: ` Le Kickstarter pr et a cr eer une nouvelle extension

Le chapitre suivant explique comment utiliser le Kickstarter et les fonctions du gestionnaire dextensions pr evues pour les programmeurs.

378

D eveloppement dextensions
TYPO3 est un framework pour les applications Web. On peut l etendre, ladapter, ou m eme le changer compl` etement gr ace aux extensions. Le noyau de TYPO3 est un syst` eme de gestion de contenu Web reposant sur une base de donn ees. On le remarque par exemple au fait que le CMS est mis en place sous forme dextension, ce qui signie quil est une application de TYPO3. Cette s eparation entre noyau et applications r eduit la complexit e et facilite un ` une API dextension bien d d eveloppement continu du syst` eme, gr ace a enie et bien structur ee. De plus, chaque extension poss` ede son propre espace de nommage. La combinaison vite les conits et permet d de ces deux propri et es e etendre TYPO3 dans presque toutes les directions. t Le gestionnaire dextensions a d ej` ae e pr esent e au chapitre 6. Nous avons alors expliqu e les diff erents types dextensions existants et la fac on de les mettre en ligne. Dans ce chapitre, nous verrons comment programmer par vous-m eme diff erents types dextensions (plugins, modules, ...). Pour y parvenir, vous avez besoin de bases solides en PHP, en programmation orient ee objet, et en SQL. M eme si vos connaissances dans ces domaines ne tendues, nayez pas peur de lire ce chapitre : TYPO3 constitue un bon moyen de sont pas tr` es e

Chapitre
379

7 D eveloppement dextensions

se familiariser avec les langages PHP et SQL. Dans ce cas, nous vous recommandons toutefois ` port davoir de la documentation plus pr ecise a ee de main. ` souligner que ce chapitre est une introduction au d Nous tenons a eveloppement de TYPO3, et ` son compte une bonne partie du quil ne fournit quun aperc u. M eme si le Kickstarter prend a ` la documentatravail du programmeur, il sera quand m eme parfois n ecessaire de sattaquer a tion. La plupart des sections d ebutent avec une r ef erence vers dautres sources dinformation.

7.1 Un compteur de visiteurs en 20 minutes


An dillustrer combien il est simple et rapide d etendre TYPO3, nous allons programmer un tant seulement de donner un aperc plugin simple. Notre but e u g en eral, nous ne donnerons pas dexplications d etaill ees dans cet exemple. ` l Nous allons programmer un compteur de visiteurs, linvention qui, a age de pierre du Web, a probablement fait la joie de millions dauteurs de pages daccueil. Le plugin utilise une table de base de donn ees pour enregistrer le statut du compteur. Le compteur ne devrait compter ` la session utilisateur, cr e et g chaque visiteur quune fois ; on y parvient gr ace a ee er ee automatiquement par TYPO3, et ce, m eme si un visiteur visite plusieurs fois la m eme page au cours dune session. ` laide de l On ins` ere normalement un plugin dans une page a el ement de contenu Ins erer un plugin, mais nous verrons quil existe dautres fac ons dutiliser un plugin. tre pr Le plugin doit e et en 20 minutes. Alors allons-y !
00 :00

Nous avons dabord appel e le backend, et nous s electionnons maintenant le Kickstarter, auquel on acc` ede par le gestionnaire dextensions via le mode Make new extension. Il faut dabord sp ecier une cl e dextension. Nous utiliserons user_visitcounter. Rafra chissons maintenant le formulaire en cliquant sur Update.

Figure 7.1: Information g en erale sur lextension sous General Info

l Une extension peut comporter plusieurs e ements : plugins, modules, table de base de donn ees, ` etc. D ebutons en ajoutant l el ement General info, qui contient de linformation g en erale a propos de lextension. Nous remplissons maintenant le formulaire, et nous enregistrons lentr ee en cliquant sur Update. Le compteur a besoin dune table de base de donn ees pour pouvoir compter ; nous la cr eons avec loption New Database Tables. 380

7.1 Un compteur de visiteurs en 20 minutes

La table a besoin dun nom explicite, qui sera ensuite afch e dans le backend. Nous lappellerons Visitor Counter. Derri` ere le champ dentr ee, le mot [english] appara t. Il nous rappelle que nous souhaitons aussi avoir des descriptions dans dautres langues. Nous ajoutons donc le ` cette extension en cliquant sur Setup languages et nous s franc ais a electionnons French.
Figure 7.2: Edition de langues suppl ementaires dans le Kickstarter

tre trait Cependant, la table nest pas encore termin ee, et doit encore e ee. Nous s electionnons la table Visitor Counter dans le menu New Database Tables, qui est d ej` a list ee en tant que composant de cette extension. Nous pouvons maintenant sp ecier pour celle-ci un nom franc ais.
Figure 7.3: Nouvelle table de base de donn ees avec un nom anglais et un nom franc ais pour lafchage dans le backend

` la table dans lequel le statut du compteur sera De plus, nous ajoutons un autre champ a enregistr e.
Figure 7.4: Ajout dun champ dans la table

Nous devons encore sp ecier quelques options, comme le montre lillustration suivante, avant que la table ne soit termin ee.
Figure 7.5: Options de la table autres que des valeurs par d efaut

381

7 D eveloppement dextensions

Nous ins erons maintenant un plugin dans lextension, nous sp ecions les titres en anglais et en franc ais, et nous ajustons quelques options suppl ementaires.
Figure 7.6: Ajout du plugin et dautres composants dans lextension

Pour nir, nous ajoutons du code TypoScript statique et nous g en erons un aperc u du r esultat tre cr e dans le r avec View Result. Lextension peut alors e ee epertoire typo3conf/ext/user_visitcounter/ en cliquant sur WRITE.
Figure 7.7: Lextension est tre termin ee et peut e g en er ee

Le Kickstarter cr ee enti` erement le code pour un plugin et la table de base de donn ees. Nous diter une pouvons directement installer cette extension avec le gestionnaire dextensions, e nouvelle table dans le backend et s electionner le plugin frontend (qui toutefois nafchera que des valeurs exemples). 382

7.1 Un compteur de visiteurs en 20 minutes

Cest tout, du moins pour le d ebut. En moins de quatre minutes, la base du compteur de visiteurs est fonctionnelle. Mais le plugin ne compte pas encore les visiteurs, bien s ur. ` un environnement de d Nous passons maintenant a eveloppement PHP et retirons le code et ` ce plugin. les chiers qui ne sont pas n ecessaires a Nous devons effacer les donn ees : pi1/[Link] et ext_typoscript_editorcfg.txt Dans le chier ext_localconf.php, les lignes de code int egrant le chier ext_typoscript_editorcfg.txt sont effac ees. Nous cr eons un chier nomm e ext_typoscript_setup.txt qui contiendra plus tard le code TypoScript standard pour le plugin. diter la table dans le Le chier [Link] contient des d enitions n ecessaires pour pouvoir e backend. Dans le Kickstarter, nous s electionnons le type Integer, 10=1000 pour le champ ` nos besoins. Nous modierons donc la d counter, ce qui ne convient pas exactement a enition du champ comme suit :
counter => Array ( ... config => Array ( type => input, size => 5, max => 10, eval => int, default => 0 ) ),

03 :39

ditons ensuite le chier pi1/class.user_visitcounter_pi1.php, qui contient le code PHP Nous e pour le plugin, et retirons le code exemple du Kickstarter. Nous pouvons maintenant commen` congurer le compteur. cer a
require_once(PATH_tslib.class.tslib_pibase.php); class user_visitcounter_pi1 extends tslib_pibase { var $prefixId = user_visitcounter_pi1; // Same as class name var $extKey = user_visitcounter; // The extension key. /** * Main plugin function */ function main($content,$conf) { // We do this, because its a USER_INT object! $this->pi_USER_INT_obj=1;

5 :20

La fonction main sera appel ee par le syst` eme frontend an de cr eer le contenu du plugin. Tout dabord, nous devons initialiser la variable $table ; elle est utilis ee assez fr equemment, et rend le code r eutilisable.
$table = user_visitcounter;

` TypoLe compteur doit cr eer un enregistrement pour la page consid er ee ; nous demandons a Script de trouver lID de la page via le param` etre pid. Si ce param` etre nest pas d eni, $pid est ` lID de la page s ajust ea electionn ee, qui est aussi disponible via $GLOBALS[TSFE]"->id . 383

7 D eveloppement dextensions
// $pid = // $pid = any page id configured? intval($this->cObj->stdWrap($conf[pid], $conf[pid.])); if not use current page $pid ? $pid : $GLOBALS[TSFE]->id;

Nous connaissons maintenant lID de la page et recherchons un enregistrement compteur. Sil ` z ny en a aucun, nous cr eons un nouveau tableau et nous initialisons le compteur a ero.
// search for counter record $res = $GLOBALS[TYPO3_DB]->exec_SELECTquery(*, $table, pid=.$pid, , , 1); if ($res) { $row = $GLOBALS[TYPO3_DB]->sql_fetch_assoc($res); } else { // initialize a new counter $row = array(); $row[counter] = 0; }

` pr ` Nous regardons a esent si lutilisateur est d ej` a connu, et sil ne lest pas, le compteur passe a la valeur 1. Une v erication est effectu ee pour savoir si la cl e dextension existe dans la session e, et les donn crites, ce utilisateur. Si ce nest pas le cas, elle est cr ee ees de la session sont r ee qui veut dire que le compteur compte les visiteurs par session.
// check if this user should be counted $knownUser = $GLOBALS[TSFE]->fe_user->getKey(ses, $this->extKey); if (!$knownUser) { $GLOBALS[TSFE]->fe_user->setKey(ses,$this->extKey,1); $GLOBALS[TSFE]->fe_user->storeSessionData(); $row[counter] += 1;
}

tre mis a ` jour, ou cr sil nexiste pas encore. Lenregistrement du compteur doit e ee
// update the counter record if ($row[uid]) { $this->cObj->DBgetUpdate($table, $row[uid], $row, counter, true); } else { $this->cObj->DBgetInsert($table, $pid, $row, counter, true); }

Pour afcher le compteur, nous cr eons une instance de tslib_cObj1 , qui est la classe principale de restitution de contenu dans le frontend et sera expliqu ee en d etail plus loin. La m ethode cObjGetSingle() est utilis ee pour afcher le contenu en reprenant les param` etres du setup est ensuite retourn TypoScript renderObj. Le contenu cr ee e.
1 La

e au lieu dutiliser $this->cObj. section 7.5.5 explique pourquoi une instance est cr ee

384

7.1 Un compteur de visiteurs en 20 minutes


// render the counter with the TypoScript renderObj $lCObj = t3lib_div::makeInstance(tslib_cObj); $lCObj->setParent($this->cObj->data, $this->cObj->currentRecord); $lCObj->start($row, $table); $content = $lCObj->cObjGetSingle($conf[renderObj], $conf[renderObj.]); return $this->pi_wrapInBaseClass($content);
} }

Le setup TypoScript suivant est ensuite ins er e dans le chier ext_typoscript_setup.txt, qui identie lID de la page et d enit la mise en forme du compteur avec renderObj :
plugin.user_visitcounter_pi1 { [Link] = page:uid renderObj = COA renderObj { 10 = TEXT [Link] = counter [Link] = || | 20 = TEXT [Link] = visitors on this page }
}

17 :04

Bien s ur, nous avons emprunt e la voie la plus courte, et avons omis le temps de d ebogage. Mais cet exemple illustre tout de m eme comment, avec le Kickstarter et un peu dexp erience, vous pouvez obtenir rapidement des r esultats. tre congur Ce compteur a la particularit e de pouvoir e e par TypoScript. Il sagit dun concept ` la fois de g en eral dans TYPO3, qui assure un degr e de exibilit e maximum. TypoScript permet a congurer le plugin et de d enir sa restitution. On peut modier ces deux aspects, sans avoir ` effectuer de changements dans le code PHP. a Le plugin est congur e en d enissant lID de la page sur laquelle lenregistrement du compteur tre situ ` laide de pid. Vous pourriez simplement entrer lID de la page en question dans doit e ea le code PHP :
$pid = $GLOBALS[TSFE]->id;

19 :46 Termin e!

Mais nous essayons plut ot dobtenir un ID via TypoScript :


$pid = intval($this->cObj->stdWrap($conf[pid], $conf[pid.]));

` la m Le setup TS du pid est pass ea ethode stdWrap de lobjet cObj. Cest exactement la m ethode ` quel que le stdWrap TypoScript fournit. Si vous regardez la r ef erence TypoScript, vous verrez a tendue. Nous en ferons bon usage. point la gamme doptions de cet objet est e Les deux lignes de code suivantes donnent le m eme r esultat : 385

7 D eveloppement dextensions
// PHP: $pid = $GLOBALS[TSFE]->id; // TypoScript: [Link] = page:uid

tre utilis En utilisant TypoScript pour la conguration, le plugin peut e e de diff erentes fac ons. crire : Vous pouvez par exemple e
pid = 12

Le plugin ici ne comptera pas le nombre de visiteurs par page, mais le nombre de visiteurs pour tout le site, en nenregistrant le statut du compteur que sur la page ayant lID=12. Vous devriez ` cet ajustement alors modier aussi le texte afch e par le plugin. Les setups TS n ecessaires a seraient alors les suivants :
plugin.user_visitcounter_pi1 { pid = 12 [Link] = visitors on this website }

Il est donc possible, avec laide de TypoScript, de modier la fonctionnalit e des plugins dans une certaine mesure (pour autant que vous lutilisiez dans le code PHP). Vous pouvez encore faire dautres modications, par exemple traduire le titre du compteur en franc ais. Pour ce faire, red enissez [Link], ou ajoutez le texte en franc ais comme une option.
plugin.user_visitcounter_pi1 { pid = 12 [Link] = visitors on this website [Link] = Visiteurs de ce site }

Si le site Web est correctement congur e pour la langue franc aise, le texte franc ais est alors afch e automatiquement.
[Link] = fr

Bien s ur, il nest pas tr` es pratique de devoir activer le compteur sur chaque page avec l el ement de contenu Ins erer un plugin, m eme sil compte les visiteurs pour lenti` eret e du site. Ceci peut tre e vit e e en ins erant le plugin en un point appropri e du gabarit du site.
page.80 =< plugin.user_visitcounter_pi1

Le plugin est maintenant activ e sur chaque page. Puisque le plugin neffectue pas lui-m eme la restitution du compteur, mais ne fait que passer ` cObjGetSingle(), vous pouvez utiliser toutes les options les r eglages TypoScript de renderObj a offertes par TypoScript en ce qui concerne lafchage. Le compteur de visiteurs peut donc b en ecier des fonctions graphiques. 386

7.2 Assistant dextensions : le Kickstarter

` la gure suivante, vous ne devez effectuer aucune modiPour afcher le compteur comme a cation dans le code PHP, seulement quelques adaptations TypoScript.
Figure 7.8: Exemple de compteur
plugin.user_visitcounter_pi1.renderObj > plugin.user_visitcounter_pi1.renderObj = plugin.user_visitcounter_pi1.renderObj { [Link] = counter file = GIFBUILDER file { XY = [10.w]+20,27 backColor = #000000 10 = TEXT 10 { [Link] = counter fontSize = 21 fontFile = fileadmin/[Link] fontColor = #00EE00 offset = 6,22 } 20 = BOX [Link] = 0,0,200,1 [Link] = #00EE00 21 < .20 [Link] = , b 22 < .20 [Link] = 0,0,1,40 23 < .22 [Link] = r
} }

IMAGE

Notez que le compteur de visiteurs nest utilis e ici qu` a titre dexemple. Il existe certainement de meilleurs compteurs que celui-ci. Cr eer le compteur avec un habillage na servi ici qu` a t illustrer le lien entre les langages PHP et TypoScript. Si le compteur avait r eellement e e utilis e de cette fac on, le serveur aurait g en er e un total de 135 487 chiers image, qui devraient un tre supprim jour e es.

7.2 Assistant dextensions : le Kickstarter


Comme lexemple du compteur de visiteurs la illustr e, le Kickstarter cr ee un framework com` ajouter les fonctionnalit es par le Kicksplet dans lequel il reste a es. Toutes les extensions cr ee tre install tarter peuvent e ees imm ediatement, et afchent d ej` a un Hello world . Une ex tre recharg dit tension enregistr ee peut e ee et e ee par le Kickstarter, mais le code d ej` a entr e diteur pour manuellement sera perdu lors de lenregistrement, car le Kickstarter nest pas un e 387

7 D eveloppement dextensions

` en d les extensions existantes ; il sert seulement a emarrer une nouvelle. Avant de commencer ` cr a eer une extension, vous devez choisir une cl e dextension.

7.2.1 D enition dune cl e dextension


Chaque extension a son propre espace de nommage, d eni par la cl e dextension. Cette cl e ` z, de 0 a ` repr esente une courte cha ne de caract` eres pouvant comporter les caract` eres de a a 9, ainsi que _ . Il existe deux types dextensions, qui diff` erent par leur cl e : dun c ot e les tre publi extensions normales, pouvant aussi e ees dans le r epertoire dextensions TYPO3 (TER), ` un projet, qui ne peuvent pas e tre envoy et de lautre les extensions sp eciques a es vers le r epertoire dextensions. On les reconna t gr ace au pr exe user_ dans la cl e dextension. Les extensions normales peuvent avoir nimporte quelle cl e ne commenc ant pas par tx ou u. ` un projet utilisant le pr Alors que les cl es sp eciques a exe user_ peuvent porter nimporte tre enregistr quel nom, ce nest pas le cas pour les extensions normales. Celles-ci doivent e ees an d etre uniques (cf. r ef erence ci-contre). Apr` es cet enregistrement, vous disposez de dix jours pour changer lextension dans le r epertoire, sinon, la cl e sera effac ee. Si vous navez pas compl et e votre extension dans ce d elai, vous pouvez toujours la transf erer de nouveau vers le viter que la cl r epertoire, pour e e ne soit perdue. Apr` es enregistrement, lextension est dabord marqu ee comme Members only, ce qui signie quapr` es lavoir t el echarg ee, lextension nest pas visible pour les autres utilisateurs, sils ne sont pas identi es en tant que membres. Il est recommand e de choisir un nom explicite pour lextension, aussi court que possible : ` explicite, pour que vous (et les autres) puissiez reconna tre de quel type dextension il sagit a partir du nom du r epertoire de lextension, et court, parce que le code du programme utilise cette cl e comme espace de nommage. Une cl e ayant un long nom impliquerait de longs noms de variables dans les codes PHP, HTML et CSS. Vous pouvez utiliser les traits de soulignement ` confusion. La , mais le Kickstarter les enl` eve pour certains noms, ce qui peut pr eter a solution la plus simple est donc d eviter les traits de soulignement dans le nom des cl es. Une fois que vous avez d eni une cl e dextension, saisissez-la dans le champ situ e dans le coin inf erieur droit du Kickstarter.

R ef erence

104717

7.2.2 Composants de Kickstarter


tre g La gure 7.9 illustre une extension comportant tous les composants pouvant e en er es par t s lors du processus. le Kickstarter. Vous pouvez aussi y voir quels chiers ont e e cr ee tre ajout Les composants peuvent e es individuellement avec les ic ones +, et retir es avec lic one Corbeille . Si une extension contient plusieurs composants du m eme type, les r epertoires sont num erot es en cons equence : mod1/, mod2/. Les diff erents composants sont les suivants : General info Toutes les extensions doivent normalement contenir le composant General info. Il d enit de linformation g en erale concernant lextension, qui sera afch ee dans le TER (r epertoire dextensions TYPO3), et dans le gestionnaire dextensions (EM). New Database Tables ` laide dun assistant, vous pou` cr Sert a eer de nouvelles tables de base de donn ees. A 388

7.2 Assistant dextensions : le Kickstarter

vez d enir des champs et des types de champs (cha ne de caract` eres/champ de saisie, ` cocher, etc.). nombre entier/case a Extend existing Tables Ce composant permet d etendre des tables de base de donn ees d ej` a existantes. Le m eme assistant est disponible pour les d enitions de champs.
Figure 7.9: Exemple dextension utilisant tous les composants pouvant tre cr s dans le e ee Kickstarter

Frontend Plugins ` lextension. Les plugins peuvent e tendre le frontend de Ajoute un plugin frontend a l plusieurs fac ons. On peut par exemple cr eer de nouveaux e ements de contenu, des menus, ou des applications frontend. Le Kickstarter propose un choix parmi les plugins les plus courants. Backend Modules ` lextension. On peut lins Cette option ajoute un module backend a erer dans diff erents modules principaux tels que Web, Fichier ou Outils. 389

7 D eveloppement dextensions

Integrate in existing Modules tre e tendus par des fonctions de sous-module. Le Kickstarter Certains modules peuvent e les supporte dans une s erie de modules Web ainsi que pour le module Utilisateur Centre de t aches. Clickmenu items Permet de g en erer des entr ees dans le menu contextuel. Services Cr ee un composant service. Static TypoScript code ` lextension. Apr` Ce composant permet dajouter du TypoScript a es avoir install e lextension, le code TS est actif dans tout le syst` eme. TSCong Permet dajouter une conguration TS utilisateur et page. Setup languages Les plugins et les modules fournissent tous deux du support pour plusieurs langues. tre d Dans le Kickstarter, les textes (identiants de champs, titres, etc.) peuvent e enis dans diff erentes langues, si elles sont ajout ees avec ce composant.

7.2.3 Structure dune extension


R ef erence

099886

ventuelleComme d ecrit pr ec edemment, les extensions consistent en une s erie de chiers et, e ment, de r epertoires. Ces chiers remplissent des fonctions sp eciques d etermin ees suivant leur nom, ou bien sont inclus par lAPI de lextension. tant normalement cr e a ` laide du Kickstarter, elle contient donc d Une extension e ee ej` a tous les chiers et les r epertoires dans la forme appropri ee. Nous ne donnerons donc ici quun aperc u de leur contenu et de leurs fonctions. Les d etails sont expliqu es dans les exemples lorsque cest n ecessaire. De plus, nous vous signalons la r ef erence ci-contre, qui contient la documentation appropri ee. ext_emconf.php Contient toutes les informations g en erales et les donn ees m eta concernant lextension. Il sagit g en eralement de donn ees provenant du composant General info du Kickstarter. ext_localconf.php ` la fois dans le backend et le frontend, et Pour chaque requ ete, ce chier est ins er ea contient toutes les congurations de type ($TYPO3_CONF_VARS) et de type typo3conf/ tre inclus via lAPI de lextension. [Link]. De plus, du code TypoScript peut aussi e ext_tables.php ` lusage du backend. Contient la conguration des tables de base de donn ees destin ees a Les plugins et les modules sont inclus via lAPI de lextension. Le code correspondant est tre modi g en er e par le Kickstarter et doit rarement e e. ext_tables.sql Ce chier contient les donn ees SQL pour la d enition des tables. Cette d enition est

390

7.2 Assistant dextensions : le Kickstarter

reconnue et analys ee par lEM et loutil dinstallation. De cette fac on, lEM (gestionnaire tre cr e ou dextensions) et loutil dinstallation peuvent d etecter si une table doit e ee ` jour. mise a ext_tables_static+[Link] Contient des d enitions de tables SQL, y compris les donn ees ; il est pr evu pour les donn ees statiques, comme on les retrouve par exemple dans lextension Static Info ` propos des pays, des langues et des Tables. Cette extension contient des donn ees a ` loption du m devises. Labr eviation adt signie add drop table et se r ef` ere a eme e avec loutil mysqldump, de fac ` ce que les nom, utilis ee lorsque la table est cr ee on a tre plac instructions SQL correspondantes puissent e ees au d ebut du code SQL.
DROP TABLE IF EXISTS static_countries;

tre reconnue correctement, la d Pour e enition de la table doit aussi exister dans ext_ [Link]. ext_typoscript_*.txt Contient du code TypoScript int egr e globalement, pour quil ne soit pas seulement disponible via les enregistrements de gabarits (cf. static/). ext_conf_template.txt Ce chier maintient si n ecessaire les d enitions des options de conguration des extensions. En fonction de ces d enitions, ces options sont visibles pour lutilisateur dans lEM. *icon*.gif Contient les chiers ic ones pour lextension, les tables de base de donn ees, les plugins, les modules, etc. locallang*.php crits dans les diff Ces chiers contiennent des textes e erentes langues utilis ees par les plugins ou par les modules, ainsi que les d enitions TCA. class.*.php Contient les classes PHP pour les plugins et les fonctions de sous-modules. class.ext_update.php ` jour lextension dans lEM ; lextension Autorise les fonctions permettant de mettre a newloginbox en fournit un exemple. [Link] Ce chier congure un module et lins` ere dans le backend. [Link] Le chier [Link] constitue g en eralement le script principal dun module. pi1/ Ce r epertoire contient les scripts et les donn ees dun plugin. 391

7 D eveloppement dextensions

cm1/

Ce r epertoire contient les scripts et les donn ees des menus contextuels.

mod1/ Cest le r epertoire dun module. Il contient les chiers [Link] et [Link]. modfunc1/ Contient les scripts et les donn ees des fonctions de sous-modules. static/ Ce r epertoire contient des chiers gabarits TypoScript ins er es via lAPI de lextension, et qui sont ensuite disponibles dans les enregistrements de gabarits, de la m eme fac on que les gabarits statiques. R epertoire contenant des services. R epertoire pour toutes sortes de donn ees ( resources ). R epertoire pour la documentation ; contient aussi le chier wizard_form.dat, dans lequel se trouve lensemble de la d enition g en er ee par le Kickstarter. Il est possible de ` partir de cette information, sur base cr eer une nouvelle extension dans le Kickstarter a dune extension existante.

sv1/ res/ doc/

7.2.4 R` egles de base des extensions


Composants Comme on la d ej` a mentionn e, une extension peut avoir plusieurs composants. Toutefois, toutes les combinaisons nont pas de sens : par exemple, une extension ne devrait contenir que les composants dune seule application. Une extension pour effectuer une r eservation est un bon exemple dextension comportant plusieurs composants : des tables de base de donn ees, un plugin pour afcher les donn ees dans le frontend et permettre de faire des r eservations, ainsi quun module backend pour lafchage et ladministration des r eservations. Il ne serait pas logique de lui ajouter un plugin afchant les actualit es de lofce du tourisme de votre localit e. Il sagit dune fonctionnalit e distincte, qui devrait constituer une extension s epar ee. On ` moins quil ne soit r applique la r` egle suivante : a eellement utile dinstaller tous les composants dans une m eme extension, ils devraient avoir chacun leur propre extension. Documentation M eme sil nest pas toujours possible de fournir une documentation compl` ete avec une extension, elle devrait au moins contenir un manuel (doc/[Link]) comportant la section Introduction . Cette section doit contenir une description, et si possible une capture d ecran. l Pour un plugin, il est important de pr eciser sil sagit dun e ement de contenu, par exemple, tre int ` laide dIns ou sil doit e egr e dans une page a erer un plugin. 392

7.3 Gestion dextensions pour les programmeurs

En g en eral, il nest pas n ecessaire que cette description soit particuli` erement longue : elle peut tant afch ne fournir quun aperc u. La section Introduction e ee dans la vue d etaill ee de lextension dans le TER de TYPO3, vous pouvez alors d ej` a avoir une bonne id ee de ce quest ` lusage que vous lextension. Cette information vous permet de juger si lextension convient a vite de souhaitez en faire. Pour quelquun qui recherche une extension en particulier, cela lui e ` essayer diff perdre du temps a erentes extensions. Notez quun manuel transf er e vers le r epertoire dextensions pour la premi` ere fois, comme ` la section 7.3.5, doit dabord e tre initialis d ecrit a e. Sinon, la section Introduction ne sera pas reconnue. Cat egories Il est important que les extensions soient class ees dans les bonnes cat egories. Elles doivent tre class e ees dans les cat egories de base (backend, modules backend, frontend, etc.) utilis ees ` lapplication, que pour le classement dans lEM, mais aussi dans les cat egories du TER li ees a ` lextension sur [Link] (cf. section 7.3.4). vous pouvez assigner a Alors que les cat egories de base permettent de garder un afchage clair dans lEM, les cat egories du TER permettent de trouver lextension appropri ee en fonction dun usage particulier. Publication Il est important de mentionner encore une fois que toutes les lignes de code utilis ees dans ` lextension que vous avez vous-m crite) sont le cadre de TYPO3 (qui correspondent a eme e ` la licence GPL. Cela ne signie pas que vous devez publier votre automatiquement soumises a ` lesprit que plusieurs ann t ` ce projet, extension, mais gardez a ees de travail ont e e consacr ees a ` TYPO3 de progresser vous est aussi protable. et que toute contribution permettant a

7.3 Gestion dextensions pour les programmeurs


7.3.1 Fonctions du gestionnaire dextensions
` Le gestionnaire dextensions propose plusieurs fonctions int eressantes qui sont tr` es utiles a ladministration de vos propres extensions. On retrouve ces fonctions dans la vue d etaill ee dune extension, obtenue en cliquant sur le nom dune extension list ee dans lEM. Un menu safche alors, contenant diff erentes fonctions.
Figure 7.10: Fonctions dans la vue d etaill ee de lEM

393

7 D eveloppement dextensions

Information ` propos de lextension est reprise ici. Hormis les d De linformation d etaill ee a etails g en eraux tels que le nom, la description et le num ero de version de lextension, on y retrouve de linformation sur les chiers et les tables de base de donn ees. On y voit aussi ventuellement les erreurs relatives a ` lextension consid e er ee ; comme une violation de lespace de nommage de lextension, ou des d enitions XCLASS manquantes (cf. section 7.10). Les messages derreur sont marqu es en rouge. Edit les tre utile Vous permet d editer en ligne les chiers de lextension ; ce qui peut parfois e pour corriger de petites erreurs sur le serveur Web. Backup/Delete l Un certain nombre de fonctions sont regroup ees dans cet e ement, comme vous pouvez ` la gure suivante. Celles-ci sont d le constater a ecrites dans les paragraphes suivants.
Figure 7.11: Fonctions du menu Backup/Delete dans lEM

Backup Extension les Il est certainement tr` es utile de pouvoir t el echarger lextension en tant que chier tre r ` lEM. T3X. Ce paquetage contient toute lextension, et peut e einstall e gr ace a De cette fac on, il est possible denvoyer les extensions simplement par email, sans ` compresser manuellement tous les chiers n avoir a ecessaires dans une archive zip. De plus, il arrive fr equemment que lextension PHP pour la d ecompression de chiers ne soit pas disponible, en particulier sur les serveurs Windows. Ainsi, certains paquetages risquent de demeurer compress es. On reconna t les paquetages ` la n du nom du chier *-z.t3x). au -z apparaissant a Backup Data tables Cette fonction permet de t el echarger la table de base de donn ees de lextension, si elle existe. Delete ` condition quelle ne Cette fonction efface compl` etement lextension du serveur, a soit pas active. 394

7.3 Gestion dextensions pour les programmeurs

Update EM CONF ` jour le chier ext_emconf.php ou une extension. Ce Vous permet de mettre a chier fait le compte, en quelque sorte, des versions des chiers de lextension, ce ` v t ` qui aide a erier si les chiers ont e e modi es, rendant n ecessaire une mise a jour de la version dans le TER. Cette information est afch ee en cons equence dans laperc u disponible sous Information. Il est recommand e dutiliser cette fonction avant de transf erer une extension vers le TER. Make new extension Cette fonction vous permet dutiliser lextension comme gabarit, ou de cr eer une nouvelle extension dans le Kickstarter. On peut y sp ecier une nouvelle cl e dextension, puis d evelopper la nouvelle extension. Mais cela ne signie pas que la fonctionnalit e de cette extension est reprise dans la nouvelle extension, car le Kickstarter cr ee un nouveau framework qui ne reprend pas le code sp eciquement crit pour lextension s e electionn ee. Cette fonction est utile, par exemple, si vous souhaitez cr eer une extension ayant une table de base de donn ees identique ou ` celle dune extension pr similaire a eexistante. Dump DB ` jour la d Vous pouvez lutiliser pour mettre a enition de la base de donn ees dans ext_tables.sql. Cette fonction est utile si, par exemple, vous avez effectu e des modi` laide de phpMyAdmin, et que vous d cations dans la d enition de tables a esirez les ins erer dans lextension. Noubliez pas que les d enitions de la table du TCA ont peut tre besoin d e etre adapt ees. Upload Cette fonction permet de transf erer lextension vers le TER. Elle est d ecrite plus en d etail dans les sections qui suivent.

7.3.2 Compte utilisateur TER


Avant de pouvoir t el echarger des extensions vers le TER (sur [Link]), vous devez dabord cr eer un compte utilisateur sur [Link] (cf. r ef erence ci-contre). Ensuite, saisissez votre nom dutilisateur et votre mot de passe dans lEM sous Settings. Nous vous signalons que lEM, tes seulement avec ces donn ees dacc` es, peut afcher les extensions pour lesquelles vous e consid er e comme membre (Members only).
R ef erence

900162

Figure 7.12: Saisie des donn ees dacc` es au r epertoire TER dans lEM

Un mot de passe est n ecessaire au t el echargement dune extension. Il peut varier dune exten` lautre. Si vous utilisez souvent le m sion a eme mot de passe, vous pouvez entrer un mot de 395

7 D eveloppement dextensions

passe standard dans le champ default upload password. Le mot de passe est d eni lors de tre modi lenregistrement de la cl e dextension, mais peut e e par la suite.

7.3.3 Transfert dune extension vers le TER


` la vue d Pour transf erer une extension vers le TER, vous devez acc eder a etaill ee en cliquant sur le nom de lextension en question (dans la liste fournie par le gestionnaire dextensions). ` la gure suivante. S electionnez ensuite le menu Upload an dafcher le formulaire illustr ea
Figure 7.13: Pr eparation dune extension an quelle soit transf er ee dans le r epertoire dextensions en ligne

` utiliser avec le num Normalement, il vous suft de s electionner la proc edure a ero de version de tre directement incr lextension. Elle peut e ement ee par le transfert. Cependant, lincr ementation du num ero de version ne signie pas quelle sera afch ee dans lEM ou le TER en tant que tre utile si, par exemple, vous devez apporter de l nouvelle version. Cette action peut e eg` eres ` la documentation, et quil ne vaudrait pas la peine que les utilisateurs la modications a t t el echargent de nouveau. Si toutefois une erreur a e e recti ee, vous devrez s electionner le ` jour le num chiffre au centre, an de mettre a ero de version. Si vous avez choisi un mot de passe de transfert sp ecial pour lextension s electionn ee, vous devez le saisir ici. Sinon, la valeur default upload password d enie dans Settings sera automatiquement utilis ee. Si une extension est transf er ee pour la premi` ere fois vers le TER, elle est marqu ee en tant que Members only, et nest donc accessible que pour les membres identi es. Loption Private propose une fac on de fournir la version courante de votre extension avec un mot de passe. Cette option est tr` es utile si vous voulez faire tester une nouvelle version dune extension d ej` a disponible par certaines personnes, sans la rendre publique. En cliquant sur Upload extension, vous transf erez lextension. Quand la proc edure est ter t min ee, un message appara t. Le num ero de version ayant e e incr ement e dans le r epertoire ` jour doit encore e tre dextension, il doit bien s ur l etre aussi dans la version locale. La mise a t conrm ee apr` es que le num ero de version a e e modi e. Le transfert vers le TER est alors termin e. 396

7.3 Gestion dextensions pour les programmeurs

7.3.4 Gestion dextensions TER


Vous avez la possibilit e de g erer vos extensions dans le TER sur [Link]. Pour ce, vous de l vez dabord vous identier. Si vous s electionnez ensuite un e ement du menu principal, vous ` vos propres extensions via loption additionnelle My extension keys. pouvez acc eder a ` la gure suivante. Vous pouvez classer vos extensions selon Une liste safche, comme illustr ea divers crit` eres, et afcher quelques donn ees statistiques. Si vous cliquez sur une des entr ees de ` propos de lextension, et proposant la liste, un formulaire appara t, donnant quelques d etails a quelques options de conguration.
R ef erence

156502

Figure 7.14: Liste de vos propres extensions sur [Link]

` cet endroit, modier le nom et la description de lextension. Lextension peut Vous pouvez, a tre class aussi e ee dans de nouvelles cat egories, que vous pouvez visualiser dans la vue Categories du TER. Les versions transf er ees jusqu` a pr esent y sont list ees. Vous pouvez effacer tre fait r les anciennes versions ; ce qui devrait e eguli` erement, an de lib erer de lespace de m emoire dans le r epertoire.
Figure 7.15: Information d etaill ee et conguration pour une extension

397

7 D eveloppement dextensions

Si lextension contient des chiers de langues locallang, vous aurez aussi un aperc u des traduc tape achev tions vers dautres langues. Cette e ee, vous pouvez ensuite congurer le r epertoire ` la section suivante. contenant la documentation. Vous trouverez de plus amples explications a Members only La restriction de lacc` es aux membres constitue une fonction importante : elle est tr` es utile ` certains testeurs davoir pendant la phase de d eveloppement, pour permettre seulement a acc` es aux versions beta des extensions. Comme mentionn e plus haut, toute extension est ` une extension, saisisdabord marqu ee comme Members only. Pour ajouter des membres a ` cet effet sez leurs noms, ou leurs noms dutilisateur dans [Link], dans le champ pr evu a ` cette dans Lookup users. Si vous soumettez le formulaire, tous les utilisateurs r epondant a description seront list es ; vous navez alors plus qu` a choisir. An de rendre une extension disponible pour le grand public, cest-` a-dire de la publier dans le TER, vous devez d esactiver loption Members only. Vous ne pouvez toutefois pas la r eactiver : une fois quune extension est publi ee, elle le demeure. Il est possible de garder cach ees les versions individuelles dune extension d ej` a publi ee, si celles-ci sont transf er ees avec loption Private, ce qui ne les rend accessibles quaux utilisateurs munis dun mot de passe appropri e.
Figure 7.16: Saisie des membres dune extension

7.3.5 Publication de documentation


Chaque extension devrait avoir sa propre documentation dans le format sp eci e. Cela ne si tre publi gnie toutefois pas quune extension ne peut pas e ee en labsence de documentation. ` publier un travail non document En cas de doute, lesprit du projet consiste a e mais concret, ` essayer datteindre un tr` plut ot que de perdre trop de temps a es haut niveau de qualit e. La documentation dune extension se trouve dans le chier [Link] du sous-r epertoire doc/. Ce chier contient le manuel en format OpenOfce, et est transf er e avec lextension vers le TER. Ce syst` eme de documentation nest pas seulement utilis e pour les extensions comportant des modules et des plugins, mais aussi pour la documentation g en erale. Les extensions de type documentation contiennent seulement les chiers ext_emconf.php et ext_icon.gif en plus du chier doc/[Link]. ` parSi vous navez pas encore OpenOfce, vous devriez linstaller maintenant (t el echargez-le a tir de [Link] Il sagit dun paquetage bureautique tr` es puissant, disponible gratuitement pour les plate-formes Unix/Linux, OS X et Windows. Lavantage du format OpenOfce est quil est ouvert. Le format est document e et disponible en tant que XML, ce ` dautres logiciels de le lire et de le convertir facilement. Cest aussi la raison pour qui permet a laquelle la documentation safche automatiquement sur le site de [Link] apr` es que vous avez t el echarg e votre extension. 398

7.3 Gestion dextensions pour les programmeurs

tre remplies. Vous devez dabord Pour documenter une extension, certaines conditions doivent e ` partir de [Link] (cf. r t el echarger le gabarit du manuel a ef erence ci-contre) et lenregistrer dans le r epertoire doc/ sous le nom [Link]. Le gabarit contient d ej` a des sections explicatives. ` la documentation. Compte tenu du Si n ecessaire, vous pouvez ajouter de nouvelles sections a ` chaque extension, votre manuel ne doit pas fait que chaque section nest pas indispensable a ` la n du gabarit se trouve une secobligatoirement reprendre toutes les sections du gabarit. A tion contenant des indications g en erales pour la cr eation de documentation avec OpenOfce, tre enti` qui devraient e erement effac ees. La r ef erence ci-contre donne une courte version du guide Writing documentation for TYPO3 . Lorsque vous avez termin e votre documentation, vous la rendez disponible en transf erant lextension vers le TER. Il est recommand e dy ins erer au moins la section Introduction , qui donne une description g en erale de lextension. Apr` es le premier transfert ou si vous lui avez ` jour la table des mati` ajout e de nouvelles sections vous devez initialiser ou mettre a eres sur [Link]. Pour ce faire, afchez la vue d etaill ee de lextension dans le r epertoire, en s electionnant loption Edit TOC meta data dans la section doc/[Link]. Apr` es avoir soumis le formulaire, vous pouvez adapter la table des mati` eres. Les sections provenant du gabarit t crit doit e tre sont reconnues automatiquement. La langue dans laquelle le document a e ee assign ee en cons equence. M eme si la langue standard de la documentation au sein du projet TYPO3 est langlais, vous avez aussi la possibilit e d ecrire votre documentation dans dautres langues. Pour chaque section, vous pouvez aussi d enir le groupe cible pour lequel elle pr esentera un int er et : r edacteurs, administrateurs ou d eveloppeurs. On y parvient en s electionnant les vidence. Vous avez certainement remarqu ic ones repr esentant diff erentes couches mises en e e quil sagissait du logo TYPO3. Ces niveaux repr esentent les trois r oles utilisateur ; le premier niveau (le plus proche de la surface) repr esente le r edacteur, celui du centre, ladministrateur, et le plus bas (le plus proche du noyau), le d eveloppeur.

R ef erence

167050

R ef erence

600297

Figure 7.17: Edition de la structure du contenu dun manuel dextension

399

7 D eveloppement dextensions

7.4 Le framework TYPO3


tre e tendu efcacement TYPO3, avec son architecture, repr esente un framework qui peut e par des extensions. La modularit e du framework permet de maintenir les principes de larchitecture malgr e son haut degr e de fonctionnalit e. Cette capacit e dexpansion est rapidement ` laide de lExtension Kickstarter, qui a d disponible a ej` a convaincu de nombreux d eveloppeurs, lev es. Leffet de synergie caus comme latteste le nombre e e dextensions publiques d ej` a cr ee e par lutilisation combin ee des fonctions rendues disponibles par le cur du syst` eme et par dautres extensions permet deffectuer de nouveaux d eveloppements dun niveau signicativement plus haut que ceux bas es sur des solutions autonomes. Nous allons fournir une vue densemble du framework TYPO3 ci-dessous. Nous aborderons les concepts, les mod` eles de donn ees, les fonctions du cur du syst` eme ainsi que des notes g en erales sur la programmation. Certaines remarques, du point de vue de la programmation dans le frontend ou le backend, sont reprises dans les sections qui suivent. Donner une vue densemble ne signie pas remplacer la documentation et les r ef erences existantesce qui naurait de toute fac on aucun sens. Vous devrez toujours garder un il sur le mat eriel de r ef erence, pour examiner les d etails des fonctionnalit es et des options. Mais nous pensons que cette vue densemble vous fournira un bon point de d epart pour comprendre la logique du syst` eme.

7.4.1 Structure du framework


` tel point qu` TYPO3 nest pas monolithique : sa structure est modulaire. A a la fois le frontend tre remplac et le backend peuvent e es ou supprim es. M eme si plus de 99 pour cent des installations TYPO3 sont utilis ees comme CMS, le syst` eme est en premier lieu un syst` eme de gestion de bases de donn ees, qui repose sur les technologies du Web. Le cur de TYPO3 se d enit essentiellement par un mod` ele de base de donn ees et de fonctions dacc` es correspondantes dans le chier class.t3lib_tcemain.php (TCE). Dans ce mod` ele, vous pouvez organiser nimporte quelle table de base de donn ees dans un type de r epertoire ` un syst` similaire dans sa structure a eme de chiers. Ladministration des utilisateurs et de leurs droits fait d ej` a partie du syst` eme de base. Le CMS utilise ce mod` ele de donn ees pour la gestion de la structure des pages avec leur contenu. Cela signie que le frontend, ainsi que les tables de base de donn ees associ ees (tt_content, . . .) et les types de pages (Extended, Not in the menu, . . .) repr esentent une application (une extension) du framework TYPO3. Il est possible par exemple de d evelopper un logiciel intranet de comptabilit e sur base du backend TYPO3, sans m eme installer le frontend du CMS. Un autre sc enario envisageable est davoir un frontend sp ecialis e tr` es performant, qui nest pas structur e selon la technique TypoScript, mais qui produit tout de m eme imm ediatement un r esultat (HTML, XML, . . .). M eme le backend est remplac able, comme nous lavons prouv e en pratique. Si vous nutilisez pas depuis longtemps TYPO3, vous ne connaissez probablement pas le Classic Backend. Ce tait une application JavaScript assez impressionnante mais, de laveu g backend e en eral, un ` maintenir. peu lente et difcile a 400

7.4 Le framework TYPO3

Figure 7.18: Structure du framework TYPO3

` laide des extensions. Le CMS Comme vous le savez d ej` a, TYPO3 peut s etendre simplement a lui-m eme est une extension. Du point de vue du framework, les extensions se divisent fondamentalement en cinq cat egories : Bas ees uniquement sur le cur de lapplication Bas ees sur le backend standard (typo3/) Bas ees sur le frontend du CMS (sysext/cms/) Bas ees sur un autre backend Bas ees sur un autre frontend Les trois premi` eres cat egories se m elangent fr equemment les unes aux autres : par exemple, dans une extension avec une table de base de donn ees (le cur) et un plugin appropri e (le CMS) pour lafchage. Les deux derni` eres cat egories sont bien plus rares, puisque TYPO3 est g en eralement utilis e comme un CMS avec un backend et un frontend standards.

7.4.2 Conventions d ecriture


Avant de consid erer le framework de plus pr` es, nous devrions introduire bri` evement les conventions d ecriture du code adopt ees par le projet TYPO3. Elles vous aideront en particulier si vous tes habitu ` int e ea egrer du code PHP directement dans les documents HTML, car cette pratique nest presque plus utilis ee dans TYPO3. Ainsi, du code sous la forme :
<?php for ($a=1;$a<=$count;$a++) { ?> <input type="file" name="upload_<?php echo $a ?>" size="50" /><br />; <?php } ?>
R ef erence

485098

401

7 D eveloppement dextensions

nappara t jamais dans TYPO3. Au lieu dint egrer du code PHP dans de lHTML, avec TYPO3, nous faisons exactement linverse :
for ($a=1;$a<=$count;$a++) { $code.= <input type="file" name="upload_.$a." size="50" /><br />; } ... echo $code

Cette proc edure est peut- etre nouvelle pour vous : la premi` ere possibilit e est encore beau crite plus clairement et coup utilis ee, surtout dans les petits projets, m eme si la seconde est e sex ecute en outre plus rapidement. En g en eral, dans le projet TYPO3, laccent est mis sur le respect des conventions suivantes par le code PHP et HTML : compatibilit e avec XHTML (transition) et CSS utilisation de simples guillemets anglais pour les cha nes de caract` eres utilisation de htmlspecialchars(), $GLOBALS[TYPO3_DB]->quoteStr() et de intval() pour emp echer les attaques de type cross-site scripting ` laide de commentaires Javadoc/ documentation compl` ete des classes et des fonctions a PHPDoc Presque tout le code TYPO3 est ins er e dans des classes. Seules quelques fonctions et variables tre respect globales sont pr esentes dans le code. Cette pratique doit aussi e ee dans les extensions, car cest le seul moyen de garantir la s ecurit e et la stabilit e du syst` eme lorsque plusieurs dizaines dextensions sont install ees. Les classes sont instanci ees sous la forme dobjets, ` quelques exceptions pr` a es, comme par exemple pour la classe de class.t3lib_div.php qui sert uniquement despace de nommage pour les fonctions quelle contient. ` la r De linformation plus d etaill ee sur les conventions d ecriture est disponible a ef erence de ` lesprit que la mise en forme du code dans ce livre ne respecte pas striccette section. Gardez a ` cause de lespace dimpression limit tement les conventions d ecriture, a e. Tous les exemples tre t peuvent e el echarg es et ceux-l` a sont mis en forme correctement.

7.4.3 Structure des r epertoires


Ci-dessous, vous trouvez une vue densemble de la structure des r epertoires de TYPO3, parce claircissements au sujet du quen allant regarder le code source, vous trouvez rapidement des e d eveloppement dextensions. t ` ceux qui pr La vue densemble a e e limit ee aux r epertoires contenant du code et a esentent un certain int er et.
t3lib/ t3lib/gfx/ t3lib/stddb/ tslib -> typo3/sysext/cms/tslib typo3/ typo3/t3lib -> ../t3lib

402

7.4 Le framework TYPO3


typo3/install/ typo3/ext/ typo3/mod/ typo3/sysext/ typo3/sysext/cms/ typo3/sysext/cms/tslib/ typo3/sysext/lang/

Il y a trois r epertoires de base : t3lib/, tslib/ et typo3/. t3lib/ Le r epertoire t3lib/ reprend les chiers class.t3lib_*.php qui eux-m emes contiennent des classes PHP. Certaines dentre elles sont des fonctionnalit es du cur du syst` eme, mais il y a aussi des classes de base pour les modules et les services. Dautres classes reprennent des fonctions uti` la fois par les applications frontend et backend. La section suivante, Biblioth` lis ees a eques, fournit une vue densemble.
t3lib/ class.gzip_encode.php class.t3lib_befunc.php class.t3lib_div.php class.t3lib_extmgm.php class.t3lib_extobjbase.php class.t3lib_iconworks.php class.t3lib_scbase.php class.t3lib_svbase.php ... class.t3lib_xml.php config_default.php

Le chier cong_default.php comprend la conguration par d efaut, que vous pouvez adapter dans le chier typo3conf/[Link] avec la variable de conguration $TYPO3_CONF_ VARS.
[Link] [Link] [Link] [Link]

Par exemple, les chiers JavaScript contiennent des fonctions pour v erier les entr ees des TCEForms (formulaires dans le backend).
[Link]

[Link] est utilis e dans lattribut src des balises <img> pour g en erer des vignettes.
gfx/

Ce r epertoire contient toutes les ic ones et toutes les images utilis ees par TYPO3. Vous pouvez ` laide des habillages. les adapter a 403

7 D eveloppement dextensions
stddb/ load_ext_tables.php [Link] [Link] tbl_be.php

Un certain nombre de tables de base de donn ees de base sont d enies ici, mais ce nest pas le cas des tables du CMS. tslib/ Ce r epertoire est un lien symbolique vers lextension CMS. Il est d ecrit plus en d etail dans la suite de cette section.
tslib -> typo3/sysext/cms/tslib

typo3/ Cest dans ce r epertoire que se trouve le backend, de m eme que loutil dinstallation et les r epertoires dextensions ext/ et sysext/.
typo3/ alt_clickmenu.php alt_db_navframe.php alt_doc.php ... [Link] [Link] [Link] tce_db.php tce_file.php [Link] wizard_rte.php wizard_table.php wizard_tsconfig.php

Les chiers de ce r epertoire comprennent des scripts et des classes, ainsi que des chiers JavaScript et CSS repr esentant les fonctions de base du backend.
install/

Cest ici que lon trouve loutil dinstallation qui est dhabitude appel e via lURL du site auquel on ajoute .../typo3/install/.
mod/ doc/ file/ help/ tools/ em/ user/ web/

404

7.4 Le framework TYPO3

Certains modules backend et leurs chiers [Link] sont situ es dans le r epertoire mod/. Les scripts du module eux-m emes se trouvent souvent dans le r epertoire typo3/. Normalement, ils devraient se trouver sous forme dextension dans le r epertoire ext/ ; ce nest pas le cas ici pour des raisons historiques. Les nouveaux modules sont dans tous les cas impl ement es en tant quextensions.
ext/ aboutmodules/ ... wizard_sortpages/

Les extensions globales sont install ees dans le r epertoire ext/. En g en eral, il sagit de celles fournies par TYPO3, et contenant en grande partie des modules backend.
sysext/

Le r epertoire sysext/ comprend des extensions du syst` eme. Celles-ci ne peuvent normalement tre d ` jour avec lEM est possible si loption pas e esinstall ees avec lEM. Par contre, une mise a em_systemInstall est activ ee dans $TYPO3_CONF_VARS (outil dinstallation).
cms/ ext_tables.php ext_tables.sql locallang_tca.php locallang_ttc.php tbl_cms.php tbl_tt_content.php

Lextension CMS d enit des tables suppl ementaires avec les chiers ci-dessus, ainsi que de nouveaux champs et types de pages dans la table pages.
tslib/ class.tslib_content.php class.tslib_fe.php class.tslib_fetce.php class.tslib_feuserauth.php class.tslib_gifbuilder.php class.tslib_menu.php class.tslib_pagegen.php class.tslib_pibase.php class.tslib_search.php index_ts.php [Link] [Link] [Link]

Le r epertoire tslib/ comprend le frontend et le code de g en eration des pages HTML pour le site galement utilis Web. Les classes de t3lib/ sont e ees.
lang/ [Link] locallang_core.[Link]

405

7 D eveloppement dextensions
locallang_core.[Link] locallang_core.[Link] locallang_core.[Link] locallang_core.[Link] locallang_core.[Link]

Lextension lang du syst` eme impl emente dans le chier [Link] le multilinguisme du backend. Les chiers locallang contiennent chacun des traductions pour les modules standards et pour les diff erentes fonctions du cur du syst` eme.

7.4.4 Biblioth` eques


R ef erence

569519

` part les TYPO3 fournit une s erie de classes PHP que vous pouvez utiliser dans vos projets. A biblioth` eques du frontend situ ees dans tslib/, et quelques classes du backend qui se trouvent dans le r epertoire typo3/, toutes les autres biblioth` eques sont dans t3lib/. Nous pr esentons dabord une vue densemble des classes de t3lib/ avant de nous tourner vers les biblioth` eques du frontend et du backend dans les sections suivantes. Rappelez-vous que vous nallez certainement pas utiliser toutes les classes de t3lib/ dans vos projets. Dune part, parce que les classes du cur auxquelles vous ne devriez pas acc eder directement sont situ ees dans ce r epertoire ; dautre part, vous y trouverez des classes qui ont t e e d eplac ees, venant des modules standards. Bien que ces classes soient disponibles pour vos ` lavenir. En r` projets, elles ne font pas r eellement partie de lAPI et pourraient changer a egle g en erale, les classes dont la documentation est fournie par lextension ExtDevEval font partie de lAPI ofcielle. LAPI de base : t3lib_extMgm API dextension Exemple : t3lib_extMgm::extPath(myextkey) t3lib_DB Abstraction de la base de donn ees disponible sous forme dobjet via $GLOBALS[TYPO3_ DB] t3lib_pageSelect Fonctions de page disponibles dans le frontend dans lobjet $GLOBALS[TSFE]->sys_ page Backend t3lib_BEfunc Une s erie de fonctions du backend bien utiles Exemple : t3lib_BEfunc::deleteClause(pages) t3lib_iconWorks ` utiliser dans les modules du backend et dans larborescence des G en` ere des ic ones a pages

406

7.4 Le framework TYPO3

t3lib_clipboard Met en pratique le presse-papiers pour les modules du backend

Classes de base TYPO3 fournit les classes de base suivantes pour les modules, les fonctions des sous-modules, les services et la mise en place du RTE : t3lib_SCbase Classe de base pour le module backend t3lib_extobjbase Classe de base pour les fonctions des sous-modules t3lib_rteapi Classe de base pour le RTE t3lib_svbase Classe de base pour les services Divers t3lib_div Collection de fonctions g en erales pour BE et FE t3lib_exec Appelle des applications externes ind ependamment de la plate-forme ; ces applications sont ensuite ex ecut ees avec exec() t3lib_cs Convertit le texte dans un autre codage de caract` eres

Vue en arborescence, arborescence des pages, arborescence des r epertoires t3lib_treeView t3lib_pageTree extends t3lib_treeView t3lib_browseTree extends t3lib_treeView t3lib_folderTree extends t3lib_treeView Ces classes g en` erent par exemple larborescence des pages dans la zone de navigation ` repr du backend. En m eme temps, elles servent aussi a esenter nimporte quelle table de ` collecter ses donn base de donn ees dans une arborescence ou a ees, comme par exemple dans Outils Recent changes. 407

7 D eveloppement dextensions

TCE et TCEForms t3lib_TCEmain t3lib_transferData t3lib_loadDBGroup t3lib_TCEforms t3lib_TCEforms_FE extends t3lib_TCEforms Le TCE (moteur du cur de TYPO3) et TCEForms, qui constituent le cur de la manipulation de donn ees dans la base de donn ees (TCE) et de leur traitement dans les formulaires (TCEForms), sont impl ement es par les classes ci-dessus. Identication t3lib_userAuth t3lib_userAuthGroup extends t3lib_userAuth t3lib_beUserAuth extends t3lib_userAuthGroup t3lib_tsfeBeUserAuth extends t3lib_beUserAuth ` lidentication des utiliDans les classes *Auth se trouvent les fonctions n ecessaires a sateurs dans le frontend et dans le backend (beUserAuth). TypoScript t3lib_TStemplate t3lib_tsparser_ext extends t3lib_TStemplate t3lib_tsStyleCong extends t3lib_tsparser_ext t3lib_TSparser t3lib_matchCondition Les classes ci-dessus mettent en uvre lanalyseur syntaxique de TypoScript et les fonctions qui laccompagnent. Email t3lib_htmlmail t3lib_formmail extends t3lib_htmlmail t3lib_dmailer extends t3lib_htmlmail t3lib_readmail Ces classes contiennent des fonctions pour envoyer, lire et traiter les emails (texte et HTML). Le module Direct Mail se base sur ces classes. HTML t3lib_parsehtml t3lib_parsehtml_proc extends t3lib_parsehtml ` traiter le code HTML et sont aussi utilis Ces classes servent a ees en rapport avec le RTE. 408

7.4 Le framework TYPO3

Autres t3lib_xml ` partir denregistrements G en` ere du XML a t3lib_diff Afche les diff erences entre deux textes t3lib_syntaxhl vidence du code source, par exemple Flexform XML ou dautres G en` ere la mise en e formats en fonction des besoins t3lib_div tant donn Nous allons pr esenter la classe t3lib_div s epar ement, e e quelle est constitu ee dune s erie de fonctions tr` es souvent utilis ees par les extensions. Pour cette raison, nous vous recommandons d etudier la documentation API de la classe. Les groupes de fonctions suivants sont pr esents dans la classe t3lib_div : Traitement des donn ees GET et POST Fonctions de cha nes de caract` eres Fonctions de tableaux Traitement HTML et XML Fonctions de chiers Fonctions de d ebogage Informations sur le syst` eme Fonctions TYPO3 particuli` eres

7.4.5 LAPI dextension


tendre TYPO3 sont rassembl Toutes les interfaces importantes pour e ees dans lAPI dextension. LAPI est disponible dans le frontend et dans le backend apr` es linitialisation du syst` eme, via la classe t3lib_extMgm. LAPI dextension fournit des fonctions pour les t aches suivantes : La d etermination des chemins absolus et relatifs menant aux extensions Lextension du TCA (Table Conguration Array ) Lenregistrement des modules Lenregistrement de TSCong Lenregistrement et ladministration des services Lenregistrement des plugins Lenregistrement de TypoScript 409
R ef erence

915540

7 D eveloppement dextensions

` ce point de lexpos Arriv es a e, nous nallons pas pr esenter lAPI dans ses moindres d etails, ` lAPI lors de lint puisque les appels a egration dune extension sont g en er es automatiquement par lextension Kickstarter. Vous pouvez obtenir la documentation de lAPI en utilisant par exemple le module Outils ExtDevEval. En guise dexemple, nous introduisons bri` evement les fonctions suivantes, car elles reviennent fr equemment dans les plugins et les modules. Toutes ces fonctions ont le param` etre $key en commun contenant la cl e dextension qui est pass ee en argument pour s electionner des donn ees. En outre, notez que la classe t3lib_extMgm nest pas instanci ee, de sorte que ses tre appel fonctions peuvent e ees directement. Exemple :
$extPath = t3lib_extMgm::extPath(macleextension);

function isLoaded($key, $exitOnError=0) V erie si une extension est install ee ; les fonctions qui la suivent produisent une erreur si lextension sp eci ee nest pas install ee. Cette fonction g en` ere aussi une erreur si vous donnez la valeur true au param` etre $exitOnError. function extPath($key, $script= ) Cette fonction renvoie le chemin absolu de lextension. Si n ecessaire, vous pouvez sp ecier un nom de chier en argument qui sera joint au chemin dans $script. function extRelPath($key) D etermine le chemin relatif de lextension par rapport au r epertoire du backend (TYPO3_ mainDir, typo3/) et le renvoie. function siteRelPath($key) ` lextension. Fournit le chemin relatif du r epertoire du site Web par rapport a Souvenez-vous que la d etermination des chemins des extensions requiert plus de temps que lacc` es aux variables. Pour cette raison, nous vous recommandons de sauver les chemins dans des variables et dutiliser ces variables, lorsque le chemin correspondant est souvent utilis e.

7.4.6 Structure de base de donn ees


R ef erence

641730

Le sch ema de la base de donn ees de TYPO3 est relativement simple. En tant que professionnel des bases de donn ees et gourou SQL, vous aurez probablement quelques suggestions pour am eliorer ce sch ema. Il y a deux raisons qui expliquent la structure de la base de donn ees de TYPO3 : dune part, elle est bas ee sur une approche pragmatique, comme le reste de TYPO3; t dautre part, cette base de donn ees a e e d evelopp ee lorsque MySQL ne pouvait pas encore manipuler les subselects ou les unions, par exemple. Cela signie que TYPO3 utilise un concept dans lequel la logique est impl ement ee le moins possible dans la base de donn ees, et lest plut ot dans PHP. M eme si TYPO3 supporte les relations MM (many-to-many), des champs de texte sont utilis es ` autre avec des listes dID s de temps a epar es par des virgules. Les d eveloppeurs peuvent critiquer cette pratique, mais lutilisation des relations MM napporte pas dans ce cas de gros videmment vous avantages du point de vue de la logique de programmation. Vous pouvez e

410

Figure 7.19: Les tables les plus importantes de TYPO3 et de lextension CMS ainsi que les relations principales

7 D eveloppement dextensions

` vos applications. Mais, pour quelles soient supservir de toutes les relations n ecessaires a port ees lors du traitement des enregistrements dans le backend, vous devrez certainement fournir du travail suppl ementaire. l Arborescence des pages et e ements de contenu ` laquelle est assign L el ement central dans la structure de base de donn ees est la page, a e tre r un ID unique, de sorte quelle puisse e ef erenc ee et li ee par dautres pages. Les pages rec oivent automatiquement un ID lors de leur cr eation. Cet ID est enregistr e dans le champ uid (unique id ) des pages de la table de base de donn ees. La page est afch ee dans le frontend par lURL avec lID ad hoc, par exemple [Link] Ce code a pour effet dappeler la page B2C Accueil dans lapplication courante. Ce principe permet dappeler de mani` ere univoque nimporte quelle page via le frontend. LID assign e par ` une page appara ` c le syst` eme a t si vous placez la souris sur lic one de la page situ ee a ot e du titre de page [1]. l Dans TYPO3, tous les e ements de contenu et les enregistrements sont sauv es dans une arbo` larborescence des r rescence des pages comparable a epertoires dans un syst` eme de chiers. ` une page dun niveau Cette arborescence est constitu ee de pages ; lassignation dune page a sup erieur se r ealise en utilisant le champ pid (parent id) dans lequel luid de la page parent sera enregistr e.
Figure 7.20: Arborescence des pages [1] afch ee avec phpMyAdmin et champs s electionn es de la table pages [2]

Larborescence repr esente la structure du site. Celle-ci est le concept central autour duquel sorganisent toutes les donn ees. Les menus et les sous-menus dun site Web sont g en er es ` partir de cette structure. automatiquement a Dans lexemple darborescence des pages, B2C Accueil est la page de d emarrage du site ` la valeur 0. Web dans le niveau racine ; elle na pas de page parent. Son pid est donc x ea ` B2C Accueil via Toutes ses sous-pages du premier niveau contiennent une r ef erence a la valeur 18 de leur pid. De m eme, la page Nouveaut es-D etails du second niveau est ` la page Actualit assign ee, via le pid 43, a es dont luid est 43. Lordre de lafchage dans larborescence des pages et dans les menus est d etermin e par le champ sorting. 412

7.4 Le framework TYPO3

galement aux e l Ceci sapplique e ements de contenu de la page qui, tant quils ne sont pas des extensions, sont sauvegard es dans la table de base de donn ees tt_content. Lorsquils sont s, ils rec cr ee oivent eux aussi un uid unique ; dans le m eme temps, ils sont reli esselon lendroit t s` galement o` u ils ont e e cr ee a la page correspondante, via leur pid. Lordre de lafchage est e ` lun des types de contenu organis e via le champ sorting. Pour assigner lenregistrement a disponibles (par exemple texte, image, formulaire, tableau, . . .), utilisez le champ CType. ` la gure suivante, vous voyez comment les e l A ements de contenu de la table tt_content sont ` laide du champ pid [1]. Dans notre cas, il sagit de la page Accueil assign es aux pages a avec un uid de 163. Dans lafchage liste du backend, vous voyez les changements dans le l champ sorting lorsque vous d eplacez les e ements de contenu ([2] et [3]).
Figure 7.21: Liens entre les champs uid, pid et sorting dans la table de base de donn ees tt_content dans phpMyAdmin [1] et dans lafchage liste du backend [2]/[3]

dite les en-t Le r edacteur nentre pas en contact avec cet aspect technique lorsquil e etes de l l ` page ou les e ements de contenu. Il ou elle d etermine les e ements de contenu assign es a chaque page avec linterface utilisateur, assigne un type au contenu et d enit lordre daf l chage en d eterminant ou en modiant lordre des e ements de contenu. Tables et champs Nous expliquons ici bri` evement la structure de base de la table de base de donn ees de TYPO3, m eme si le Kickstarter fournit d ej` a les champs standards n ecessaires lors de la cr eation dune table. Ceci est particuli` erement int eressant lorsque vous int egrez des applications existantes dans TYPO3. diter des tables dans le backend, vous devez vous r ` quelques convenPour pouvoir e ef erer a tions d enies par le TCA (voir la prochaine section). Chaque table doit contenir les deux champs obligatoires, uid et pid. Le champ uid (unique ID) est un champ qui sincr emente automatiquement, et dont la valeur est unique pour les enregistrements de cette table. Le champ pid ` laquelle lenregistrement appartient, cest-` (page ID) contient lID de la page a a-dire luid dans la table pages. De plus, il y a plusieurs champs standards qui ne sont pas obligatoires et dont la d enomination peut varier. Par souci de clart e, il est toutefois conseill e de conserver les noms standards. Voici quelques champs standards typiques : 413

7 D eveloppement dextensions

Tableau 7.1: Champs standards dans les tables

Champ title nav_title crdate cruser_id tstamp sorting deleted hidden starttime endtime

Signication est afch e comme titre dans le backend ` utiliser dans les menus titre alternatif a ` laquelle lenregistrement a e t (timestamp Unix) date a e cr ee lenregistrement ID de lutilisateur qui a cr ee date de la derni` ere modication (timestamp Unix) pour d eterminer lordre manuellement marque un enregistrement comme effac e sp ecie quun enregistrement est cach e (dans le frontend) ` partir de laquelle lenregistrement devient actif dans le FE (timedate a stamp Unix) ` partir de laquelle lenregistrement devient inactif dans le FE date a (timestamp Unix)

7.4.7 Base de donn ees, TCA et TCEForms


R ef erence

392081

Comme dans tout syst` eme de gestion de base de donn ees impliquant plus que les possibilit es doutils simples, linformation m eta est n ecessaire pour d ecrire la structure de la base de donn ees et de ses champs. Sans cette information, les formulaires de saisie pour les enregis tre d trements dans le backend nauraient pas pu e evelopp es. phpMyAdmin permet aussi, exactement comme TYPO3, d editer des ensembles de donn ees ` laide dune interface Web. Alors, quelle est la diff dans une table de base de donn ees a erence entre les deux ? En fait, phpMyAdmin g en` ere des formulaires de saisie pour les enregistrements ` partir de la d a enition de la base de donn ees elle-m eme. Par cons equent, phpMyAdmin est conscient du fait quun champ donn e ne peut accepter que des valeurs enti` eres, puisque ce champ est d eni comme tel dans la base de donn ees. En revanche, il ne sait pas si une donn ee naccepte des valeurs que dans une certaine fourchette, et il nest donc pas en mesure dafcher un champ de s election avec des valeurs pr ed enies. Des param` etres suppl ementaires sont n ecessaires pour ex ecuter ce genre de t ache, qui nest pas sous-entendue dans la d enition de la base de donn ees. TYPO3 se sert de ce type dinformation pour traiter correctement les tables de base de donn ees, les enregistrements et les champs, ainsi que pour rendre disponibles des fonctionnalit es que phpMyAdmin ne peut fournir.

Figure 7.22: Traitement des donn ees dans phpMyAdmin et TYPO3 (TCEForms)

414

7.4 Le framework TYPO3

` laide de cette information m A eta (TCA) et des TCEForms, l edition des formulaires est rendue disponible dans le backend. La donn ee saisie est v eri ee par le TYPO3 Core Engine (TCE, cest` -dire lendroit o` crite dans la base de donn a u les d enitions TCA sont utilis ees) et e ees. ` TYPO3 est disponible dans le TCA (Table Conguration Array ) Linformation m eta n ecessaire a dans la variable globale $TCA. La donn ee TCA est d enie dans les chiers suivants, qui peuvent servir de source dinformation pour la programmation des extensions :
t3lib/stddb/[Link] t3lib/stddb/tbl_be.php typo3/sysext/cms/ext_tables.php typo3/sysext/cms/tbl_cms.php typo3/sysext/cms/tbl_tt_content.php .../extension/ext_tables.php

tre repr La d enition actuelle du tableau TCA peut e esent ee par un arbre dans lequel vous ` des valeurs, ce qui est par exemple tr` acc edez a es utile lorsque vous voulez localiser une erreur. Ci-apr` es, nous pr esentons une vue densemble des options du TCA. Une liste exhaustive des op` la r tions sortirait du cadre de ce livre. Une telle liste se trouve a ef erence mentionn ee ci-contre. Dans la plupart des cas, les options de d enition de champs du Kickstarter sont sufsantes, de sorte que vous naurez que rarement besoin de consulter cette r ef erence.
Figure 7.23: Navigateur TCA contenant des extraits de la d enition tt_content

Voici un extrait du tableau TCA qui d enit la table tt_content. Comme nous le savons, cette ` sauvegarder des e l table sert a ements de contenu (du texte, des images, . . .). 415

7 D eveloppement dextensions

La d enition TCA d emarre par le tableau ctrl qui contient quelques d etails de donn ees m eta pour lutilisation des tables. De plus, on d enit le champ repris dans lafchage liste en mode restreint.
$TCA[tt_content] = Array ( ctrl => Array ( label => header, label_alt => subheader,bodytext,

Les trois lignes suivantes d eterminent le champ qui servira au tri (sortby), celui qui contiendra la date de derni` ere modication (tstamp) et la mani` ere de nommer la table dans le backend (title). A cette n, on cr ee une r ef erence vers le chier externe (locallang) qui contient les valeurs des titres des champs dans diff erentes langues.
sortby => sorting, tstamp => tstamp, title => LLL:EXT:cms/locallang_tca.php:tt_content, delete => deleted, type => CType, prependAtCopy => LLL:EXT:lang/locallang_general.php:[Link], copyAfterDuplFields => colPos,sys_language_uid, useColumnsForDefaultValues => colPos,sys_language_uid,

Le tableau suivant, enablecolumns, d enit les champs qui d eterminent si un enregistrement sera visible ou non dans le frontend. La fonction enableFields() g en` ere du code SQL sur cette base, code qui ltre les enregistrements invisibles.
enablecolumns => Array ( disabled => hidden, starttime => starttime, endtime => endtime, fe_group => fe_group, ), ... mainpalette => 1, thumbnail => image, ) interface => Array ( always_description => 0, showRecordFieldList => CType,header,header_link,bodytext,image,... ),

Dans le tableau columns sont d enis les champs des tables de base de donn ees. Ils comprennent essentiellement de linformation sur le type de champ de formulaire utilis e pour diter les champs de la table (champ de s ` cocher, . . .) ainsi que leur type (texte, e election, case a entier, . . .). En outre, vous pouvez d enir des fourchettes de valeurs ou xer des valeurs standards. Les TCEForms se servent de cette information pour g en erer les champs de formulaire correspondants. Le TCA forme avec ceux-ci la base de la manipulation des enregistrements (trier, dition avec TCEForms dautre part. cacher, . . .) dune part, et la base de leur e 416

7.4 Le framework TYPO3


columns => Array (

Le champ CType est ici d eni comme un champ de s election. Il sp ecie le type de contenu (texte, image, . . .).
CType => Array ( label => LLL:EXT:lang/locallang_general.php:[Link], config => Array ( type => select, items => Array ( Array(LLL:EXT:cms/locallang_ttc.php:CType.I.0, header), Array(LLL:EXT:cms/locallang_ttc.php:CType.I.1, text), Array(LLL:EXT:cms/locallang_ttc.php:CType.I.2, textpic), Array(LLL:EXT:cms/locallang_ttc.php:CType.I.3, image), Array(LLL:EXT:cms/locallang_ttc.php:CType.I.4, bullets), ... ), default => text ) ),

Figure 7.24: TCEForms afche un champ de s election pour le champ CType

` cocher ; il sert a ` d Le champ hidden est d eni comme une case a esactiver lenregistrement dans le frontend (cacher).
hidden => Array ( exclude => 1, label => LLL:EXT:lang/locallang_general.php:[Link], config => Array ( type => check ) ), ...

l bodytext est la zone de saisie qui r ecup` ere le texte des e ements de contenu Text et Text with image par exemple.
bodytext => Array ( label => LLL:EXT:lang/locallang_general.php:[Link], config => Array ( type => text, cols => 48, rows => 5, ) ) ), ...

417

7 D eveloppement dextensions

La d enition dimage est un peu plus complexe. Il sagit dun champ de s election de type group qui contient certains d etails suppl ementaires. Par exemple, le nombre maximal dentr ees est ` 200 par maxitems. limit ea
image => Array ( label => LLL:EXT:lang/locallang_general.php:[Link], config => Array ( type => group, internal_type => file, allowed => $GLOBALS[TYPO3_CONF_VARS][GFX][imagefile_ext], max_size => 1000, uploadfolder => uploads/pics, show_thumbs => 1, size => 3, maxitems => 200, minitems => 0, autoSizeMax => 40, ) ), ... ),

Figure 7.25: Champ de s election du type group pour le champ image

Dans le tableau types sont d enis les diff erents types de contenu (texte, image, . . .). Par exemple, les champs sont afch es en fonction du type denregistrement. Cest la valeur du t champ CType qui d etermine le type dun enregistrement donn e, car celui-ci a e e entr e dans le tableau ctrl comme tel, via la cl e type. Si cette valeur est text, cest-` a-dire que lenregistre tre de type text, le champ CType est afch ment doit e e avec la palette 4, le champ header avec la palette 3, le champ bodytext avec la palette 9, etc.
types => Array ( 1 => Array(showitem => CType), header => Array(showitem => CType;;4;button;1-1-1, header;;3;;2-2-2, subheader;;8), text => Array(showitem => CType;;4;button;1-1-1, header;;3;;2-2-2, bodytext;;9;... ... ),

Les palettes sont d enies dans le tableau palettes. La d enition ci-dessus, header;;3;; sp ecie tre utilis que la palette 3 doit e ee pour le champ header. Cette palette afche les champs concernant len-t ete et le champ date, comme vous le voyez ci-dessous.
palettes => Array ( 1 => Array(showitem => hidden, starttime, endtime, fe_group), 2 => Array(showitem => imagecols, image_noRows, imageborder),

418

7.4 Le framework TYPO3


3 => Array(showitem => header_position, header_layout, header_link, date), ... ) );

Les champs eux-m emes sont d ej` a d enis dans le tableau columns du dessus et sont pr esent es comme une palette en une seule ligne, au lieu de plusieurs lignes.
Figure 7.26: Palette 3 sous le champ header

7.4.8 Flexforms
Les champs de base de donn ees sont dans tous les cas utilis es dune seule mani` ere dans la tre d enition du TCA. Cela signie quun champ dans lequel on saisit un nombre ne peut e utilis e pour enregistrer une date, bien que ce soit dans les deux cas une valeur enti` ere qui est sauvegard ee. De plus, une table de base de donn ees est une structure g ee. Les Flexforms offrent une m ethode denregistrement des donn ees plus exible, comme lautorise le format XML. Les Flexforms permettent deffectuer plusieurs types de t aches. Nous les connaissons d ej` a via TemplaVoil` a. Vous trouverez de laide en consultant la r ef erence ci-contre. Puisque aucune option de requ ete nexiste actuellement pour les donn ees Flexform, leur utilit e se limite aux t aches dans lesquelles les requ etes SQL ne sont pas requises pour rechercher des donn ees enregistr ees dans les Flexforms : par exemple, les options pour congurer les plugins via l el ement de contenu Insert Plugin. Une mani` ere de rendre des options disponibles pour les plugins est dajouter un ou plu` la table tt_content an de sauvegarder la conguration. La d sieurs champs a enition TCA ` laide de l correspondante afche d` es lors les options a el ement de contenu Insert Plugin. Le d esavantage de cette m ethode est que chaque plugin ajoute ses propres champs dans tt_content, ce qui ralentit inutilement les requ etes de la base de donn ees. l ` utiliser les Flexforms qui nont besoin que dun seul Une possibilit e plus e egante consiste a champ. En fait, tt_content contient d ej` a le champ pi_exform qui, comme son nom lindique, est justement pr evu pour cette m ethode.2 Ci-dessous, nous vous indiquons comment utiliser les Flexforms avec le champ pi_exform en prenant comme exemple lextension Newloginbox.
2 Robert Lemke, cod eveloppeur de TemplaVoil` a et des Flexforms, insiste sur le fait que lutilisation des Flexforms pour congurer les plugins est recommand ee : Anyone who still inserts their own conguration elds into tt_content will be tarred and feathered. Les auteurs approuvent cette recommandation dun point de vue tech mettent des doutes sur le type de punition pr ` nique, mais e econis ee. Au lieu de cela, nous menac ons de recourir a ` toute autre m ` un dommage social lors du prochain Snowboard Tour de la moquerie ou a ethode pouvant aboutir a TYPO3.

R ef erence

353987

419

7 D eveloppement dextensions

Figure 7.27: Sauvegarde des param` etres de conguration de newloginbox avec des Flexforms

An de congurer un plugin comme newloginbox via des Flexforms, les conditions suivantes tre satisfaites : doivent e La d enition TCA du champ tt_content.pi_exform est de type ex Activation du champ pi_exform pour le plugin dans le TCA Cr eation dune d enition de structure de donn ees Activation de la structure de donn ees pour le plugin ` partir des donn Lecture de la conguration a ees Flexform dans le plugin Le champ pi_exform est d ej` a pr ed eni comme un champ de type ex. La d enition dans le TCA se pr esente comme suit :
pi_flexform => array( label => LLL:EXT:cms/locallang_ttc.php:pi_flexform, config => Array ( type => flex, ds_pointerField => list_type, ds => array( default => <T3DataStructure> <ROOT> <type>array</type> <el> <xmlTitle> <TCEforms> <label>The Title:</label> <config> <type>input</type> <size>48</size> </config> </TCEforms> </xmlTitle> </el> </ROOT> </T3DataStructure> , ) ) ),

420

7.4 Le framework TYPO3

Comme vous le voyez, le tableau cong contient les cl es ds (Data Structure) et ds_pointerField. ` son tour, ds contient un tableau dont les e l A ements contiennent eux-m emes les structures de donn ees Flexform. Ces structures de donn ees sont d enies en XML et comprennent de linformation sur les champs d esir es et leurs types de donn ees. Dans le chier ext_tables.php de lextension newloginbox, nous ajoutons le champ pi_exform au plugin pour lafchage :
$TCA[tt_content][types][list][subtypes_addlist][$_EXTKEY._pi1] =pi_flexform;

l Avec cette conguration, il ny a toujours aucun e ement Flexform visible dans l el ement de t contenu Insert Plugin. De fait, aucune structure de donn ees na encore e e enregistr ee avec la cl e newloginbox_pi1 dans le tableau ds. Le champ list_type (dans le BE sous la forme dun champ de s election avec les plugins disponibles) dans la table tt_content de cet exemple t contient la valeur newloginbox_pi1, car ce plugin a e e choisi dans l el ement de contenu Insert Plugin. Le param` etre ds_pointerField sp ecie que la valeur du champ list_type est utilis ee en tant que cl e du tableau ds. Par cons equent, list_type d etermine la structure du chier. Expliquer les d etails de la structure de donn ees newloginbox serait trop complexe dans ce ` la r cadre, et nous vous renvoyons donc a ef erence. La structure de donn ees est congur ee de la m eme mani` ere que la structure de lexemple pr ec edent, via la cl e default. La partie int eressante est celle comprise entre les balises <TCEForms>. Ces d enitions sont les m emes que dans le tableau TCAsauf quelles se pr esentent sous la forme dune structure XML. La structure pour le plugin se trouve dans lextension, dans le chier exform_ds.xml. Elle est enregistr ee via lAPI dextension dans la d enition TCA du chier ext_tables.php.
t3lib_extMgm::addPiFlexFormValue($_EXTKEY._pi1, FILE:EXT:newloginbox/flexform_ds.xml);

` pr L el ement Flexform est a esent afch e dans le formulaire plugin. La donn ee saisie dans ce formulaire est transf er ee via le TCE vers du XML et est sauv ee dans le champ pi_exform. La ` la manipulation classe de base pour les plugins, tslib_pibase, contient des m ethodes servant a des donn ees dans le plugin. tre initialis Le champ Flexform pi_exform doit dabord e e, ce que vous devriez faire au d ebut du code du plugin :
// Init FlexForm configuration for plugin: $this->pi_initPIflexForm();

` lint Vous acc edez au champ pi_exform a erieur du plugin, avec $this->cObj->data[pi_exform]. Puisque ce champ contient un tableau dans un format pr ecis apr` es initialisation, vous y acc edez via la m ethode pi_getFFvalue() qui renvoie les donn ees des pseudo-champs quil contient.
$this->pi_getFFvalue($this->cObj->data[pi_flexform], show_forgot_password,sDEF)

421

7 D eveloppement dextensions

Le plugin newloginbox contient plusieurs options class ees selon les onglets de lindex (General, Welcome, . . .). Les donn ees sont organis ees en ce quon appelle des feuilles . La ligne ` partir de la de code ci-dessus fournit la valeur du pseudo-champ show_forgot_password a feuille sDEF. Il y a beaucoup dendroits o` u les Flexforms peuvent sav erer utiles. Vous pouvez bien entendu les utiliser dans vos tables de bases de donn ees an, par exemple, de sauver les changements dans les produits dune boutique en ligne. En outre, les Flexforms poss` edent un framework permettant d editer les donn ees XML, ce qui est certainement dun grand int er et dans de nombreuses applications.

7.4.9 TYPO3 Core Engine (TCE)


R ef erence

119361

Le TYPO3 Core Engine (TCE) est situ e dans la classe t3lib_TCEmain. Il est responsable de la manipulation des donn ees enregistr ees dans les tables de bases de donn ees d enies par le TCA. Le TCE garantit la coh erence lors du traitement des enregistrements ; il est utilis e par les modules backend. De plus, il est possible dacc eder au TCE via les scripts typo3/tce_db.php et typo3/tce_le.php en sp eciant des commandes dans ces scripts. Nous montrerons cela plus ` laide dun exemple. tard a Le TCE utilise les donn ees m eta de la d enition du TCA pour v erier si les donn ees saisies sont valides. Les permissions dacc` es sont aussi prises en compte et les identications sont historis ees. Le TCE est conc u pour fonctionner de pair avec les TCEForms. Cela signie que le TCE conna t les formats de donn ees des TCEForms et en tient compte. Si, par exemple, le champ est d eni comme une relation MM dans le TCA, vous devez dabord rechercher les enregistrements de la relation avant que le formulaire d edition ne soit afch e, de sorte que tre s les enregistrements puissent e electionn es par ce formulaire. Cest exactement de la m eme mani` ere que le TCE doit congurer les enregistrements s electionn es comme des relations MM dans la base de donn ees. Si le TCE est utilis e directement via la classe t3lib_TCEmain, il appara tra comme suit :
require_once (PATH_t3lib.class.t3lib_tcemain.php); $tce = t3lib_div::makeInstance(t3lib_TCEmain); $tce->start($data,$cmd); $tce->process_datamap(); $tce->process_cmdmap();

Le TCE est contr ol e par deux tableaux, dont lun peut contenir des donn ees, datamap, et lautre des commandes, cmdmap. Ces deux tableaux sont inclus dans le TCE par la commande $tce ->start($data,$cmd). Les tableaux correspondants sont trait es avec process_datamap() et process_cmdmap(). Commandes (cmdmap) tre appliqu Les commandes suivantes peuvent e ees aux enregistrements (ou aux pages) via le cmdmap : delete Supprime un enregistrement.

422

7.4 Le framework TYPO3

copy move

Copie un enregistrement. D eplace un enregistrement.

Le tableau cmdmap a le format suivant : $cmd[nom de la table][uid ][commande] = valeur nom de la table ` traiter ; elle doit e tre d Nom de la table de la base de donn ees a enie dans le TCA uid uid de lenregistrement

commande ` ex Les commandes a ecuter : delete, copy ou move valeur Pour la commande delete, value rec oit la valeur TRUE. Pour les commandes copy et tre n move, value devrait recevoir un page id. Cette valeur peut e egative, ce qui signie alors quun enregistrement est ins er e apr` es la page ayant ce page id (en valeur absolue), t au lieu d etre ins er e dans la page si la valeur avait e e positive.

es comme suit : Les commandes sont donc cr ee $cmd[nom de la table][uid ][delete] = TRUE $cmd[nom de la table][uid ][copy] = +/-pid $cmd[nom de la table][uid ][move] = +/-pid Lexemple suivant supprime lenregistrement avec luid=54 de la table tt_content :
$cmd = array(); $cmd[tt_content][54][delete] = 1; $tce->start(array(),$cmd); $tce->process_cmdmap();

` lint Cette commande d eplace la page avec luid=1203 en premi` ere position a erieur de la page qui a luid=303.
$cmd = array(); $cmd[pages][1203][move] = 303; $tce->start(array(),$cmd); $tce->process_cmdmap();

Dans le prochain exemple, la page 1203 nest pas copi ee dans la page 303, mais au m eme niveau, directement apr` es la page (303).
$cmd = array(); $cmd[pages][1203][copy] = -303; $tce->start(array(),$cmd); $tce->process_cmdmap();

Vous pouvez sp ecier plusieurs options dans les commandes. Par exemple, loption copyTree xe la profondeur (le nombre de niveaux) des pages copi ees. 423

7 D eveloppement dextensions
$cmd = array(); $cmd[pages][1203][copy] = 303; $tce->copyTree = 3; $tce->start(array(),$cmd); $tce->process_cmdmap();

` trois niveaux de sorte que la page 1203 est copi La profondeur est ici x ee a ee, de m eme que ses sous-pages sur les trois premiers niveaux. Pour dautres options, consultez la documenta` la r tion a ef erence du d ebut de cette section. Donn ees (datamap) ` manipuler ou a ` cr Le tableau datamap sert a eer des enregistrements. Son format est le suivant : $cmd[nom de la table][uid ][nom du champ] = valeur nom de la table ` traiter ; la table doit e tre d Nom de la table de la base de donn ees a enie dans le TCA. uid ` modier ; si on cr Luid de lenregistrement a ee un nouvel enregistrement, luid doit contenir une certaine valeur avec le pr exe NEW. nom du champ ` modier ; ce champ doit e tre d Nom du champ de la base de donn ees a eni dans le TCA. valeur Nouvelle valeur du champ. tre e dit s en Lexemple suivant illustre le fait que plusieurs enregistrements peuvent e es ou cr ee m eme temps :
$data[pages][NEW9823be87] = array( title => Page 1, pid => 45 )

Il faut dabord cr eer une nouvelle page avec le titre Page 1 dans la page pour laquelle uid=45.
$data[pages][NEWbe68s587] = array( title => Page 2, pid => -NEW9823be87 )

` pr e apr` Une deuxi` eme page est a esent cr ee es la nouvelle page, et sur le m eme niveau, avec le pseudo-uid NEW9823be87. Le concept duid n egatif est utilis e de la m eme mani` ere que pour cmdmap.
$data[pages][9834] = array( title => Nouveau titre pour cette page, subtitle => Nouveau sous-titre ) $tce->start($data,array()); $tce->process_datamap();

Pour terminer, nous changeons le titre de la page dont luid est 9834. 424

7.4 Le framework TYPO3

Clear cache galement des fonctions pour manipuler le cache. Le TCE fournit e $tce->clear_cacheCmd($cacheCmd); tre entr Les commandes suivantes peuvent e ees dans $cacheCmd : page id supprime le cache pour la page sp eci ee pages supprime le cache pour toutes les pages all supprime tous les caches

tce_db.php tre appel Les fonctions fournies par le TCE peuvent aussi e ees par le script typo3/tce_db.php. Les tableaux datamap et cmdmap sont pass es en param` etres via GET ou POST avec data[] et ` la section 7.8.2 : fonctions cmd[]. Un exemple typique de lutilisation de tce_db.php se trouve a de sous-module Web Fonctions Assistants.

7.4.10 SQL et tables d enies dans le TCA


Alors que la manipulation des donn ees dans la base de donn ees est ex ecut ee via le TCE pour garantir la coh erence des donn ees, les requ etes de base de donn ees sont r ealis ees directement ` prendre en consid par SQL. Cependant, un certain nombre d el ements sont a eration ici. Dune tre prises en compte et dautre part, vous devez vous part, les permissions dacc` es doivent e assurer que les enregistrements sont actifs (cach es, supprim es, . . .). Dans les modules backend, la variable $this->perms_clause est pr ec ed ee dune condition SQL` la table pages, s WHERE qui, appliqu ee a electionne uniquement les pages auxquelles lutilisateur backend actuel a acc` es. ` v Il faut aussi voir si un enregistrement est actif ou non. Dans le backend, cela revient a erier si lenregistrement est supprim e ou non. Si vous d enissez un champ qui marque lenregistre tre ment comme supprim e, comme dans le cas de la table tt_content, alors ce champ doit e pris en consid eration pour que de tels enregistrements ne soient pas afch es dans le backend.
$TCA[tt_content][ctrl][delete] => deleted

e pour le backend avec la fonction suivante : Une instruction WHERE est cr ee


$deleteClause = t3lib_BEfunc::deleteClause(table_name);

Il existe une m ethode similaire pour le frontend dans lobjet TSFE :


$deleteClause = $TSFE->sys_page->deleteClause(table_name);

De plus, il existe une s erie de champs qui d enissent la validit e de lenregistrement pour le frontend. Ces champs sont utilis es pour cacher lenregistrement, pour le laisser appara tre un 425

7 D eveloppement dextensions

certain temps, ou pour d enir les permissions dacc` es pour les groupes dutilisateurs frontend. Tous ces champs sont appel es enable elds. Vous pouvez cr eer une instruction WHERE cor tre respondante dans les m ethodes suivantes. Dans ce cas, le code deleteClause() ne doit plus e repris, car la clause tenant compte des enregistrements supprim es est d ej` a incluse.
$enableFields = $TSFE->sys_page->enableFields(table_name); $enableFields = $this->cObj->enableFields(table_name);

` lint A erieur des plugins, cest cette derni` ere m ethode qui est utilis ee, de sorte quune requ ete ` peu pr` ` ceci : ressemble a es a
$res = $GLOBALS[TYPO3_DB]->exec_SELECTquery( *, $table, pid IN (.$pidList.). $this->cObj->enableFields($table), , crdate DESC); while($row = $GLOBALS[TYPO3_DB]->sql_fetch_assoc($res)) { ...
R ef erence

215109

La requ ete de base de donn ees est r ealis ee par les m ethodes de lobjet $GLOBALS[TYPO3_DB]. TYPO3 impl emente une couche dabstraction de base de donn ees (DBAL pour database abstraction layer ) via cette interface. LAPI se trouve dans la classe t3lib_DB. Une description du ` la r DBAL est disponible a ef erence ci-contre. Si enableFields() ou deleteClause() sont utilis es correctement dans les requ etes SQL, vous ne devez pas vous soucier de savoir quels champs et quelles fonctions sont d enis pour la table ` la table par la suite (via les dans le TCA. Si les champs starttime et endtime sont ajout es a entr ees correspondantes dans le TCA), ils seront inclus dans les requ etes sans devoir changer le code PHP du plugin, pour autant quun plugin utilise enableFields() pour les requ etes de base de donn ees.

7.4.11 Utilisateurs, sessions et identication


R ef erence

358205

TYPO3 tient compte des permissions sur les pages, des enregistrements et des chiers selon le ` une ressource doit bien s tre connu. prol dutilisateur. Un utilisateur qui veut acc eder a ur e Ceci implique deux aspects essentiels : dune part, il faut pouvoir authentier un utilisateur, ` laide cest-` a-dire reconna tre lidentit e dun utilisateur donn e. Ceci est g en eralement r ealis ea dun formulaire didentication, en v eriant le nom dutilisateur et le mot de passe. Dautre part, il faut pouvoir identier continuellement un utilisateur : puisque HTTP est un protocole tat, a ` chaque page appel sans e ee, il faut pouvoir d eterminer si lutilisateur est d ej` a connu et ` lutilisateur. Cette surveillance de lutilisateur est si les donn ees en question sont r eserv ees a appel ee une session. Un exemple typique illustrant les diff erences entre ces deux fonctions est celui de lOnline Shop. Alors que le panier dachat virtuel est une fonction de la session, lutilisateur doit sauthentier au plus tard lors du traitement de la commande (d ependant du magasin) : cela permet de lidentier.

426

7.4 Le framework TYPO3

Dans le contexte des applications Web, nous d enissons trois types dutilisateurs : les utilisateurs non-identi es les utilisateurs identi es (session utilisateur sans authentication) les utilisateurs authenti es Tandis que pour le backend, il est essentiel que lutilisateur soit authenti e, les trois types dutilisateurs peuvent entrer en ligne de compte dans le frontend. La plupart des sites Web sont accessibles sans identication, et ne d ependent pas non plus des sessions utilisateurs. Cela signie quils sont compl` etement fonctionnels pour des utilisateurs non-identi es. ` lutilisateur sont collect Toutefois, si des donn ees relatives a ees lors dune visite du site Web (comme pour les paniers dachat virtuels), il faut congurer une session. Dans une session, un utilisateur est suivi lors de sa visite dans le site Web. Ce statut nest pas le m eme que celui de tre connue dans ce cas-ci. lauthentication, puisque lidentit e de lutilisateur ne doit pas e ` des ressources pr l Lacc` es a ecises (pages ou e ements de contenu) est contr ol e via les groupes tre authenti dutilisateurs. Pour ce faire, lutilisateur doit e e. Sans session utilisateur, lauthen tre appliqu tication ne peut e ee de mani` ere sens ee. t e automatiquement par Une session utilisateur reconnue au moyen dun cookie a e e cr ee TYPO3. Ce cookie contient seulement un ID, et donc, ne contient pas de donn ees sur lutilisateur. Celles-ci sont stock ees dans la base de donn ees et sont lues apr` es identication du galement des donn cookie ; elles contiennent e ees pour la session. Ces donn ees sur lutilisateur sont aussi utilis ees pour sauver le statut de lauthentication, ce qui explique quun utilisateur donn e ne doive sauthentier quune seule fois par session. Voici un r esum e de lidentication dun utilisateur frontend : Un ID dutilisateur existant est d etect e au moyen dun cookie. Si lID nexiste pas, lauthentication est valid ee en v eriant le nom dutilisateur et le mot de passe fournis. . Un cookie contenant lID dutilisateur est alors cr ee Si lutilisateur est authenti e, les donn ees sur lutilisateur sont lues. Les donn ees de la session sont lues ; par exemple, dans le cas dun magasin, elles pourraient contenir les entr ees dun panier dachat virtuel. tre d Lutilisation de cookies dans le frontend peut e esactiv ee par la conguration suivante :
$TYPO3_CONF_VARS[FE][dontSetCookie] = 1;

An de pouvoir toujours authentier des utilisateurs et utiliser des sessions, vous pouvez congurer loption [Link] (Frontend Track User ) dans le setup TypoScript qui permet didenti` lesprit le fait que les plugins er un utilisateur au moyen des param` etres fournis. Mais gardez a qui ne g en` erent pas de liens en utilisant correctement les fonctions du syst` eme peuvent terminer une session ; cest pourquoi lutilisation de cookies est recommand ee. La gestion des sessions, lauthentication et le fait de fournir des donn ees utilisateurs sont des actions contr ol ees par les classes t3lib_*userAuth et tslib_feUserAuth. Apr` es lidentication, 427

7 D eveloppement dextensions

` votre disposition. Cet objet et lauthentication si n ecessaire, un objet de ces classes est mis a garde les donn ees concernant lutilisateur dans le tableau ->user[]. Il contient des m ethodes pour acc eder aux donn ees de la session ou pour v erier les permissions dutilisateur. Les objets dutilisateur dans le frontend et le backend sont tr` es similaires dans leur structure tant donn de base, e e que cest la m eme classe de base qui est utilis ee pour les deux. Mais il y a une diff erence entre eux, particuli` erement dans les m ethodes. Par exemple, la m ethode ->isAdmin() est disponible dans le backend, mais pas dans le frontend, puisquil ny a pas dutilisateur administrateur dans ce cas. Les objets dutilisateur sont disponibles dans les variables globales suivantes : $GLOBALS[TSFE]->fe_user Objet dutilisateur frontend $GLOBALS[BE_USER] Objet dutilisateur backend Voici quelques exemples de code impliquant les objets dutilisateur. Frontend
global $TSFE; $mySessionData = $TSFE->fe_user->getKey(ses, $mySessionKey); $mySessionData = ... $TSFE->fe_user->setKey(ses, $mySessionKey, $mySessionData); $TSFE->fe_user->storeSessionData();

Cet exemple montre comment les donn ees de la session sont sauvegard ees dans les plugins. Les tre sous nimporte quel format puisquelles sont enregistr donn ees peuvent e ees via la fonction (serialize()) et restaur ees de mani` ere correspondante par le syst` eme. Les donn ees sont iden` savoir ici ti ees via une cl e. Il est de bonne pratique dutiliser dans ce but le nom du plugin, a $this->$prexId.
$userID = $TSFE->fe_user->user[uid]; $username = $TSFE->fe_user->user[username];

Si un utilisateur est authenti e dans le frontend, alors ses donn ees sont disponibles dans le tableau user[].
$userTSconf = $TSFE->fe_user->getUserTSconf();

Les donn ees TSCong sont disponibles via getUserTSconf(). Backend


global $BE_USER; $userID = $BE_USER->user[uid];

Le tableau user[] est disponible dans lobjet dutilisateur qui contient les donn ees concernant lutilisateur. 428

7.4 Le framework TYPO3


$userIsAdmin = $BE_USER->isAdmin();

V eriez si lutilisateur a le statut dadministrateur avec isAdmin().


$uc_titleLen = $BE_USER->uc[titleLen];

La conguration de lutilisateur est sauvegard ee dans le tableau uc[] (User Cong). Vous y trouverez par exemple des donn ees issues du module Utilisateur conguration mais aussi des param` etres de modules, qui sont automatiquement sauv es dans ce tableau par la classe de base t3lib_SCbase et restaur es au prochain appel de ce module (voir la section Framework des modules). Les exemples ci-dessus ne pr esentent quune partie de lAPI Utilisateur. Vous avez de ` votre disposition sur limpl linformation suppl ementaire a ementation des objets dutilisateur ` la r a ef erence de cette section.

7.4.12 Programmation TYPO3 et plate-forme


En th eorie, TYPO3 fonctionne sur toutes les plate-formes sur lesquelles PHP fonctionne. Il y a toutefois certaines diff erences selon la plate-forme, la version PHP et la conguration du serveur utilis ees. Plusieurs fonctions PHP manquent ou se comportent diff eremment jusqu` a un certain point, surtout sous Windows. TYPO3 fournit dans son API des fonctions qui aplanissent la plupart de ces diff erences. Si, en outre, vous suivez certaines conventions, vos extensions devraient fonctionner sans probl` eme dans diff erents environnements. Variables du serveur et variables denvironnement Si vous voulez acc eder aux variables du serveur, nutilisez jamais getenv() ou m eme $HTTP_ SERVER_VARS, utilisez plut ot la fonction t3lib_div::getIndpEnv(). Cette fonction r eunit les variables connues du serveur et elle fournit de linformation suppl ementaire. ` ladresse URL de la page courante. LURL se d Certaines de ces variables ont trait a ecompose comme suit : [protocole]://[hte][:[port]][chemin][?[requte]] LURL suivante est utilis ee en guise dexemple :
[Link]
R ef erence

219501

Linstallation TYPO3 se trouve dans le r epertoire /var/www/t3livre/ alors que le r epertoire de base du serveur Web est /var/www/. Information g en erale REMOTE_ADDR Adresse IP du poste client (navigateur). REMOTE_HOST te du poste client (navigateur). Nom dho 429

7 D eveloppement dextensions

HTTP_USER_AGENT Contient le type et le nom du client appelant (navigateur). Exemple : User-Agent: Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040411 Debian/1.6-5 HTTP_ACCEPT_LANGUAGE Les langues accept ees ou demand ees par le client appelant (navigateur). Exemple : de-de,en-gb HTTP_HOST te requis par le client. [hte][:[port]] lho Exemple : [Link] TYPO3_HOST_ONLY [hte] Exemple : [Link] TYPO3_PORT [port] Exemple : 80 HTTP_REFERER [protocole]://[hte][:[port]][chemin][?[requte]] t LURL par laquelle la page courante a e e appel ee.

URL SCRIPT_NAME [chemin+chier] le nom du script et le chemin de lURL. Exemple : /t3livre/[Link] QUERY_STRING [requte] la cha ne de caract` eres de la requ ete. Exemple : id=26&tx_myext[myparam]=1234 TYPO3_SITE_SCRIPT [chier][?[requte]] le chier script appel e avec la cha ne de caract` eres de la requ ete. Exemple : [Link]?id=26&tx_myext[myparam]=1234 TYPO3_REQUEST_URL [protocole]://[hte][:[port]][chemin][?[requte]] lURL compl` ete. TYPO3_REQUEST_HOST [protocole]://[hte][:[port]] Exemple : [Link] TYPO3_REQUEST_SCRIPT [protocole]://[hte][:[port]][chemin+chier] Exemple : [Link] 430

7.4 Le framework TYPO3

TYPO3_REQUEST_DIR [protocole]://[hte][:[port]][chemin] Exemple pour un module backend : [Link] cc_beinfo/mod1/ TYPO3_SITE_URL [protocole]://[hte][:[port]][chemin] chemin de lURL menant au site Web TYPO3 Exemple : [Link] Fichiers et r epertoires TYPO3_DOCUMENT_ROOT [chemin] Chemin absolu vers le r epertoire racine du site Web. Exemple : /var/www SCRIPT_FILENAME [chemin+chier] Exemple : /var/www/t3livre/[Link] Vous pouvez rendre les variables denvironnement visibles avec les extensions FE Debug/Info output (cc_feinfo)/Backend Environment Information (cc_beinfo). GET et POST ` travers les variables $GLOBALS[HTTP_POST_ Les donn ees GET et POST sont disponibles a VARS] et $GLOBALS[HTTP_GET_VARS]. Vous devriez n eanmoins utiliser les fonctions suivantes : t3lib_div::_GET($var) t3lib_div::_POST($var) t3lib_div::_GP($var) t Les fonctions _GET() et _POST() renvoient les donn ees qui ont e e transmises par GET ou POST. Dans la plupart des cas, la mani` ere utilis ee pour transmettre les donn ees importe peu. Cest pourquoi vous pouvez utiliser la fonction _GP(). Elle recherche, dapr` es la cl e pass ee en argument, dabord dans les donn ees POST et ensuite dans les donn ees GET. Rappelez-vous que ces fonctions renvoient les donn ees sans barre oblique : la fonction $GLOBALS[TYPO3_DB] tre appliqu crites dans la base de ->quoteStr() doit e ee aux donn ees avant quelles ne soient e donn ees. ` lint A erieur des plugins, vous acc edez aux param` etres via $this->piVars[], pour que, normale` vous pr ment, vous nayiez pas a eoccuper des fonctions ci-dessus. Fichiers Lorsque vous manipulez des chiers, notez que sur les syst` emes Windows, les chiers texte et les chiers binaires sont trait es diff eremment. Mais dans la plupart des cas, cela nest pas voulu ` des dysfonctionnements. Pour e viter ceux-ci, vous devriez toujours ouvrir ces et peut mener a 431

7 D eveloppement dextensions

criture et en lecture. Le mode binaire chiers en mode binaire pour acc eder aux chiers en e est activ e en ajoutant la lettre b au param` etre mode dans fopen().
$fp = fopen ($filename, rb);

PHP fournit la fonction tempnam() pour cr eer des chiers temporaires, mais cela peut causer des probl` emes si le Safe Mode est activ e pour PHP. Pour cette raison, TYPO3 propose la fonction t3lib_div:tempnam() qui enregistre les chiers temporaires dans typo3temp/. Le lancement de programmes externes est la source de probl` emes : le chemin du programme tre connu ou congur doit e e ; les chiers ex ecutables sous Windows ont le sufxe .exe et la fonction is_executable() ne fonctionne pas sur les syst` emes Windows. Si vous voulez appeler Perl, par exemple, il y a plusieurs mani` eres de proc eder : C:/perl/bin/[Link], /usr/bin/perl ou /usr/local/bin/perl. La classe t3lib_exec essaie de r esoudre le probl` eme. Lappel suivant fournit le chemin complet vers linterpr eteur Perl :
$cmd = t3lib_exec::getCommand (perl);

On peut alors acc eder aux programmes sans congurer statiquement leur chemin.

7.4.13 Multilinguisme
R ef erence

104717

` la fois dans le backend et dans le fronTYPO3 est disponible dans de nombreuses langues, a ` tel point que les extensions que vous avez publi tre tend. A ees dans le Repository pourraient e traduites, par exemple, en swahili par un traducteur inscrit sans que vous layiez pr evu. Depuis quand navez-vous pas publi e quelque chose dans six langues diff erentes ? Les textes des modules et les plugins dans dautres langues sont contenus dans les chiers correspondant au chier dexemple locallang*.php. Le Kickstarter vous aide en g en erant ce chier lors de la cr eation de lextension. Comme vous pouvez le voir dans lexemple qui suit, ` son tour des tableaux un chier locallang contient un tableau $LOCAL_LANG qui contient a avec les traductions dans diff erentes langues.
$LOCAL_LANG = Array ( default => Array ( todos_new => Create new To-Do, todos_update => Update To-Do, todos_target => Target user, todos_type => Workflow, ), dk => Array ( todos_new => Opret ny opgave, todos_update => Opdater opgave, todos_target => M al-bruger, todos_type => Arbejdsgang, ), de => Array ( todos_new => Neue To-Do Liste anlegen, todos_update => To-Do-Liste aktualisieren, todos_target => Zielbenutzer, todos_type => Workflow, ), );

432

7.4 Le framework TYPO3

s dans la langue correspondante via les cl Au moment de lex ecution, les textes sont cr ee es (todos_new, todos_update). Ceci est impl ement e dans les plugins par la m ethode $this ->pi_getLL() et dans les modules par la m ethode $LANG->getLL(). Avec $LANG->getLL(todos_update), par exemple, le texte Update To-Do est afch e si lutilisateur backend actuel a choisi la langue anglaise ou si aucune traduction nest disponible pour la langue s electionn ee. Il est g en eralement admis que lutilisation des textes des cl es dans le code dun programme est quelque peu fastidieuse, de m eme quentrer le texte courant dans les chiers locallang. Dans ce cas, vous pouvez utiliser lextension ExtDevEval (voir la section 7.12 Outils pour le d eveloppeur ) pour extraire le texte du code et le remplacer avec les textes des cl es. galement un support pour les sites Web Comme nous lavons d ej` a mentionn e, TYPO3 offre e multilingues au sein dune seule arborescence de pages, via la table pages_language_overlay. l On attribue les e ements de contenu aux diff erentes langues d enies dans la table sys_language en sp eciant la valeur du champ sys_language_uid de la table tt_content. Il ny a pas de support sp ecial pour ce concept pour les donn ees des plugins. Mais lexp erience montre que les capacit es multilingues sont rarement n ecessaires pour les donn ees des plugins. Le moyen le plus simple est g en eralement dutiliser un SysFolder diff erent pour chaque langue pour les enregistrements du plugin. Bien entendu, il est aussi possible de cr eer les champs pour les langues requises dans la table. Cette proc edure na dint er et que pour des applications particuli` eres. Une autre possibilit e est dutiliser le concept de tt_content dans votre propre table. Pour ce faire, cr eez un champ sys_language_uid correspondant en vous inspirant de la d enition TCA de tt_content. Vous aurez ensuite un champ de s election de la langue dans les enregistre` la langue de la page courante sont alors choisis ments. Les enregistrements correspondant a comme suit :
SELECT ... WHERE sys_language_uid=.$GLOBALS[TSFE]->sys_language_uid...

Si lextension Static Info Tables est install ee, vous acc ederez au code ISO-6393 de la langue avec $GLOBALS[TSFE]->sys_language_isocode.

7.4.14 Codage des caract` eres


Avant de parler des caract eristiques sp eciales de TYPO3 en rapport avec le codage des ca tes d ract` eres, nous en posons les bases. Si vous e ej` a familiaris e avec ces principes, vous pouvez ` la section suivante. tout de suite passer a Les principes du codage de caract` eres Dordinaire, les gens ne se posent pas de questions en encodant des caract` eres, et ce quon entend par l` a nest m eme pas clair en g en eral. Apr` es tout, cela reste tr` es simple vous appuyez (o umlaut) de votre clavier, et cette lettre appara ` l sur la touche o t a ecran. Que devezvous savoir de plus ? Eh bien, il y a des ann ees, vous auriez peut- etre essay e de lancer votre `e crire a ` roue dimpression ou votre imprimante matricielle par la fen machine a etre, car elle
3 [Link]

R ef erence

996712

433

7 D eveloppement dextensions

` la place des caract` ne voulait tout simplement pas imprimer les umlauts, et imprimait a eres ` un probl` graphiques nous voil` a face a eme de codage de caract` eres. est sauv Il est g en eralement admis que lorsquune lettre telle que o ee, le caract` ere lui , par exemple, vient dun jeu m eme est sauvegard e. Mais cela nest pas vrai. Le caract` ere o ` l de caract` eres TrueType et est afch ea ecran par le syst` eme dexploitation. En fait, le o est aussi repr est encod e et sauv e sous forme de nombre et le caract` ere o esent e par un nombre dans le jeu de caract` eres par le syst` eme dexploitation. Laspect int eressant ici est que tre diff continue a ` safcher a ` l ces deux nombres peuvent e erents, mais que le o ecran (qui a ` son tour peut e tre repr lorsque vous appuyez sur la touche o esent ee par un nombre diff erent). Ainsi, il ne suft pas de conna tre la valeur (le nombre) dun caract` ere. Vous ne saurez de quel caract` ere il sagit qu` a partir du moment o` u vous connaissez le codage employ e, cest-` adire le syst` eme utilis e pour associer un nombre aux caract` eres. Le premier codage standardis e tait ASCII, qui utilise seulement sept bits (0127) pour le codage, et qui ne contient m e eme pas les umlauts allemands. Puisque la plus petite unit e denregistrement de donn ee est loctet, avec 8 bits4 , vous pourriez utiliser un bit suppl ementaire et donc d enir 128 caract` eres suppl ementaires. Ceci a men e nalement au codage ISO-8859 qui d enit les jeux de caract` eres suivants : ISO 8859-1 (Latin-1) Ouest-europ een ISO 8859-2 (Latin-2) Est-europ een ISO 8859-3 (Latin-3) Sud-europ een et esp eranto ISO 8859-4 (Latin-4) Baltique ISO 8859-5 Cyrillique ISO 8859-6 Arabe ISO 8859-7 Grec ISO 8859-8 H ebreu ISO 8859-9 (Latin-5) Turc au lieu dislandais, autrement le m eme que Latin-1 ISO 8859-10 (Latin-6) Nordique ISO 8859-11 Tha landais ISO 8859-12 Celtique (jamais choisi) ISO 8859-13 (Latin-7) Baltique (remplace Latin-4 et -6) ISO 8859-14 (Latin-8) Celtique ISO 8859-15 (Latin-9) Ouest-europ een avec le caract` ere Euro ISO 8859-16 (Latin-10) Sud-europ een avec le caract` ere Euro Tous ces jeux de caract` eres ont en commun le US-ASCII comme codage des 128 premiers caract` eres. Les 128 caract` eres suivants diff` erent selon le codage utilis e. En Europe de lOuest, le codage ISO 8859-1 est normalement utilis e. Il sappelle aussi Latin-A et contient les umlauts allemands par exemple. Mais lalphabet grec nest pas inclus dans ce jeu de caract` eres. Cet alphabet est d eni dans ISO 8859-7 qui ne contient pas dumlauts. Cela signie quil nest pas possible dutiliser des umlauts et des lettres grecques dans le m eme texte. La table suivante illustre ceci ; elle montre quatre caract` eres et compare les diff erents codages.
4 Il est e ventuellement possible dutiliser la longueur de bits que vous voulez. En fait, dautres longueurs de bits que le 8-bit sont utilis ees dans diff erentes applications et processeurs sp ecialis es.

434

7.4 Le framework TYPO3

Caract` ere HTML o ,,1)


1)

&ouml ; &phi ; &divide ; &bdquo ;

Unicode en HTML

&#246 ; &#966 ; &#247 ; &#8222 ;

ISO 8859-1 0xF6 0xF7 -

ISO 8859-7 0xF6 -

DOS CP 850 0x93 0xF6 -

Unicode U+00F6 U+0278 U+00F7 U+201E

Unicode UTF-8 0xC3B6 0xC9B8 0xC3B7 0xE2809E

Tableau 7.2: Comparaison du codage pour quelques carat` eres

Guillemet-virgule double inf erieur

tre plus La table est peut- etre un peu confuse au premier abord, mais sa signication devrait e claire apr` es cet exemple5 : tigte man auch Nach der Erndung der Telegrae beno hier eine Zeichenkodierung. Aus den urspr unglichen Ideen des Engl anders Alfred Brain entstand 1837 der Morsecode. Pour ceux qui ne connaissent pas lallemand, voici la traduction : tait n Apr` es linvention du t el egraphe, le codage de caract` eres e ecessaire. Le code t en 1837, dapr` Morse a e e cr ee es les id ees de lAnglais Alfred Brain. , u ). En plus des caract` eres d enis dans US-ASCII, ce texte contient aussi des umlauts (o et a t crit avec un e diteur de texte sur un syst` Admettons que ce texte ait e ee eme utilisant le codage t ISO 8859-1 et quil ait e e sauv e dans un chier. Si ce chier est transf er e sur un ordinateur sur lequel la version allemande du syst` eme dexploitation DOS est lanc ee, et quil y est ouvert diteur, vous verrez alors ceci : dans un e Nach der Erndung der Telegrae bentigte man auch hier eine Zeichenkodierung. Aus den urspr3nglichen Ideen des Engl onders Alfred Brain entstand 1837 der Morsecode. t Que sest-il pass e ? Les donn ees nont pas chang e, le texte a juste e e afch e en se basant sur ae t la codepage 850 de DOS. Le o e sauv e avec le codage ISO 8859-1, cest-` a-dire avec la valeur 0xF6 (hexad ecimal). Dans la codepage 850 de DOS, toutefois, la valeur 0xF6 est r eserv ee ` un autre caract` ` savoir le comme vous pouvez le voir dans le tableau ci-dessus. a ere, a Si le texte est afch e par erreur avec le codage ISO 8859-7, vous obtiendrez le r esultat suivant : Nach der Erndung der Telegrae bentigte man auch hier eine Zeichenkodierung. Aus den urspr onglichen Ideen des Engl nders Alfred Brain entstand 1837 der Morsecode.
5 Source

: [Link] encoding

435

7 D eveloppement dextensions

Ici, la valeur 0xF6 produit la lettre grecque phi , cest pourquoi le texte ci-dessus ne contient t toujours pas le caract` ere d esir e. Vous devez donc toujours savoir quel codage a e e utilis e pour les donn ees. Pour cette raison, le codage est sp eci e dans les en-t etes des pages HTML.
<head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

, Comme vous le voyez sur le tableau, il est impossible dutiliser les caract` eres o t et simultan ement dans un texte. Pour r esoudre ce probl` eme, le syst` eme Unicode a e e introduit an dinclure tous les caract` eres. Lavantage est quil ny a quun syst` eme de caract` eres qui contient tous les caract` eres dans le t monde (en admettant quils aient d ej` ae e d enis dans Unicode). Mais puisquil y a plus de 256 ` 1 octet), nous avons besoin de deux ou m caract` eres diff erents (ce qui correspond a eme de quatre octets pour identier un caract` ere. Cela signie que lorsque vous sauvez des donn ees, vous consommez jusqu` a quatre fois plus despace. Puisque ceci est incompatible avec dautres t codages, qui sont g en eralement bas es sur US-ASCII, UTF-8 a e e introduit. UTF-8 est pour ainsi ` 1 octet (8 bits). Dans ce codage, US-ASCII est stock dire Unicode avec un codage a e avec un seul octet. Cela veut dire quUTF-8 utilise un nombre variable doctets pour enregistrer les donn ees, mais g en eralement un seul octet si les donn ees consistent en du texte compos e ` z ou de A a ` Z. M majoritairement de lettres de a a eme si certaines applications ne supportent pas encore Unicode, il est pr evisible que ce codage deviendra un standard et que, t ot ou tard, tous les autres dispara tront. La pratique nous indique toutefois que cest principalement la version UTF-8 du codage Unicode qui est utilis ee pour enregistrer et transmettre des donn ees, alors que le codage UCS-2 (2 octets) est fr equemment utilis e pour le traitement interne. Diff erents codages de caract` eres dans TYPO3 Si vous ne le congurez pas diff eremment, TYPO3 utilise le codage ISO 8859-1 qui semble tre ad e equat pour la plupart des utilisateurs dans le monde occidental. Cependant, m eme les tre afch guillemets typographiques utilis es en Allemagne () ne peuvent e es avec ce codage. Microsoft Windows utilise le codage Windows-1252 qui est identique dans les grandes lignes ` ISO 8859-1 mais qui contient les guillemets allemands. Ainsi, il ny a aucun probl` a eme pour crivez du contenu. utiliser ces caract` eres lorsque vous e vite ce probl` On e eme pour lafchage dans le frontend en se rabattant sur le codage HTML des caract` eres sp eciaux et en utilisant &bdquo;. Mais lors de la sauvegarde, ce codage devrait tre utilis aussi e e, puisque les donn ees de la base de donn ees sont encod ees avec ISO 8859-1. D` es que vous voudrez utiliser les donn ees pour un afchage dans un autre format que HTML, des probl` emes vont survenir. ` propos, TYPO3 utilise un codage diff A erent dISO 8859-1 pour certaines langues dans le ba` pouvoir afcher les caract` ckend, de fac on a eres pertinents. Si vous utilisez le grec comme langue dans le backend, le codage ISO 8859-7 sera utilis e pour entrer et sauver du contenu l dans la base de donn ees. Pour vous assurer que les e ements de contenu entr es sont reproduits correctement dans le frontend, vous devez congurer les sites en cons equence via TypoScript.
[Link] = iso-8859-7

436

7.4 Le framework TYPO3

Pour standardiser et simplier, il faudrait utiliser UTF-8 pour le codage des caract` eres dans TYPO3. Tous les navigateurs modernes supportent ce codage, de sorte quaucune conversion nest n ecessaire pour lafchage. Si de vieux navigateurs comme Netscape 4 ou Internet Ex tre d plorer 4 sont support es dans le frontend, les pages doivent e elivr ees s epar ement pour ces navigateurs. Sinon, vous devrez vous passer de UTF-8, puisque cela pourrait aussi vous causer des probl` emes dans ce cas. ` partir de la version 3.6 de TYPO3. Cependant, nous ne pouvons Vous pouvez utiliser UTF-8 a vous recommander lutilisation dUTF-8 avec cette version, car certains probl` emes mineurs tre r tre consid doivent encore e esolus. Cette section doit donc e er ee comme une perspective. Pour activer UTF-8 pour TYPO3, vous devez congurer loption forceCharset via loutil dinstallation, ou directement dans typo3conf/[Link] :
$TYPO3_CONF_VARS[BE][forced_charset] = utf-8;

` pr Le backend, et donc le stockage des donn ees dans la base de donn ees, supporte a esent le tre reconnu par la base de donn codage UTF-8. Il doit toujours e ees. Loutil dinstallation de TYPO3 ne peut pas encore faire cela automatiquement, et vous devez donc ex ecuter vousm eme la conguration avec les commandes SQL correspondantes. Pour MySQL 4.06 , le codage dune table est modi e comme suit :
ALTER TABLE table name CHARACTER SET utf8;

tre activ Loption TypoScript suivante doit e ee dans le setup pour avoir un afchage encod e avec UTF-8 dans le frontend :
[Link] = utf-8

De cette mani` ere, UTF-8 est utilis e de mani` ere universelle pour lencodage des caract` eres en TYPO3, et les textes du chier de langues locallang sont automatiquement transform es dans le codage ad hoc via les m ethodes getLL() (BE) et pi_getLL() (FE) correspondantes. Evidemment, les gabarits HTML doivent eux aussi utiliser le codage correspondant ; surtout sils contiennent ` un afchage du texte, un encodage erron e dans le frontend m` enerait dans le cas contraire a incorrect. ` savoir comment les donn ` rep Il reste encore a ees, cest-` a-dire le texte, seront trait ees et a erer ce tre pris en compte. Des probl` qui doit e emes peuvent appara tre ici pour les raisons suivantes : puisque les textes encod es avec UTF-8 peuvent consister en plus doctets que de lettres quils symbolisent, des singularit es sont attendues lors du traitement. Par exemple, la fonction PHP ` partir du nombre doctets requis pour le sauver. Avec les strlen() fournit la longueur du texte a textes encod es avec UTF-8, cela peut provoquer une diff erence entre la taille r eelle du texte tre reconnu par et le r esultat de la fonction strlen(). Pour cette raison, le codage utilis e doit e la base de donn ees. Par exemple, une recherche lanc ee dans laquelle aucune distinction nest tre fauss faite entre minuscules et majuscules peut e ee si le codage UTF-8 est utilis e. TYPO3 lui-m eme fournit la classe t3lib_cs pour convertir les diff erents encodages des caract` eres, puisque PHP ne contient pas les fonctions n ecessaires dans chaque installation. Une
6 Le

` partir de la version 4. support de base de donn ees pour UTF-8 est disponible dans MySQL a

437

7 D eveloppement dextensions

API pour les plugins utilis ee de mani` ere transparente, par exemple une fonction strlen() dans t tslib_pibase, na cependant pas encore e e introduite. Cette API est n ecessaire pour commen` d cer a evelopper des plugins, qui peuvent manipuler du texte ind ependamment du codage. Il ` lheure o` est probable que des solutions existent d ej` aa u vous tenez ce livre entre vos mains. ` jour est disponible a ` la r De linformation mise a ef erence de cette section.

7.5 Programmer dans le frontend : les principes


Par frontend, nous entendons g en eralement lextension CMS, qui se trouve dans le r epertoire typo3/sysext/cms/, et qui est accessible dans le r epertoire principal dun site Web TYPO3 via le lien symbolique tslib. tre adjointes au backend ou au frontend par le d Des fonctionnalit es peuvent e eveloppement dextensions. Une large gamme dextensions (plugins) est d ej` a offerte par le Kickstarter, ce qui vous permet de mettre en place les v otres rapidement. Les extensions du frontend sont dans ` quelques lignes de TypoScript, mais elles peuvent aussi constituer une certains cas limit ees a v eritable application PHP impliquant plusieurs bases de donn ees.

7.5.1 Frontend : restitution du contenu


Nous vous donnons ici un aperc u du processus de restitution de contenu dune page, ce qui est en principe la t ache du script tslib/index_ts.php. ` la base de donn Durant la phase dinitialisation, les constantes sont x ees, la connexion a ees tablie et les biblioth` est e eques du frontend sont int egr ees. . Il contr Lobjet global $TSFE de la classe tslib_fe est cr ee ole le processus de restitution de contenu. Lobjet pour lauthentication dun utilisateur frontend et pour la gestion de session est . cr ee Si un utilisateur backend est actif, des fonctions compl ementaires telles que l edition dans le frontend et le panneau dadministration sont initialis ees. LID et le type de la page appel ee sont d etermin es. Dans le m eme temps, les permissions dacc` es sont v eri ees. Le moteur TypoScript de gabarit (TSFE, TypoScript Template Engine) est initialis e. ch ` partir du cache dans la base de donn Le cas e eant, la page est lue a ees. ` partir du Setup TypoScript (cong.*). Le tableau cong est initialis ea Les donn ees principales du TCA sont lues. La langue est d etermin ee (cf. section 7.4.13). Les donn ees transmises, telles que celles dun formulaire email, sont trait ees. ` partir du cache, elle est restitu Si la page nest pas lue a ee par la conguration TypoScript et enregistr ee dans le cache. tre mis en cache sont restitu Les objets (cObject) qui ne doivent pas e es et afch es dans le frontend : PHP_SCRIPT_INT, USER_INT, PHP_SCRIPT_EXT. 438

7.5 Programmer dans le frontend : les principes

La page restitu ee ($TSFE->content) est afch ee avec echo(). Les donn ees de session des utilisateurs frontend sont sauvegard ees. Les logs sont enregistr es. ch Le cas e eant, la redirection vers une adresse URL (jumpurl) est effectu ee. Au cas o` u la page est demand ee par un utilisateur backend, un cadre contenant le message preview est ins er e. t Un chier HTML statique est enregistr e si loption correspondante a e e activ ee dans le panneau dadministration. Le panneau dadministration est ins er e si la conguration la sp eci e. Si une extension de d ebogage est install ee, elle est appel ee pour modier lafchage en sortie.

7.5.2 API frontend


De m eme que pour t3lib, des biblioth` eques et des objets suppl ementaires sont disponibles dans le frontend. La restitution du contenu se base sur la structure dobjet suivante :
$TSFE (tslib_fe) | -------> fe_user (tslib_feUserAuth) | -------> sys_page (t3lib_pageSelect) | -------> cObj (tslib_cObj) | ------> myPluginObj (extends tslib_pibase) | ------> cObj (tslib_cObj)

tend la classe de base Dans la majorit e des cas, une extension frontend est un plugin qui e ` partir dun plugin, vous acc tslib_pibase. A edez donc directement aux classes et aux objets suivants : tslib_fe Le TypoScript frontend (TSFE) est disponible en tant quobjet global pour les plugins via $GLOBALS[TSFE]. tslib_cObj Est disponible en tant quobjet pour les plugins via $this->cObj. Il contient des m ethodes pour restituer les objets TypoScript tels que TEXT et IMAGE. De plus, les fonctions stdWrap et parseFunc sont des m ethodes de cette classe. tslib_pibase Les plugins sont une extension de cette classe. Cette derni` ere fournit un ensemble de fonctions utiles aux plugins. t3lib_pageSelect tre appel Fonctions sur les pages. Elles peuvent e ees dans le FE via lobjet $GLOBALS [TSFE]->sys_page. 439

7 D eveloppement dextensions

t3lib_div La s erie de fonctions de t3lib_div est aussi disponible dans le frontend. ` une ces biblioth` Dans la suite, nous pr esentons une a eques.

7.5.3 TypoScript frontend (TSFE)


Le TypoScript frontend (TSFE) est un objet disponible pour les plugins via la variable globale $TSFE. Il contient de linformation, des m ethodes et des objets. Comme mentionn e pr ec edemment, le TSFE est lobjet central dans le processus de restitution du contenu. Pour la plupart des plugins, les objets tslib_pibase et cObj couvriront vos besoins. Vous trouverez ci-apr` es une partie des donn ees et des objets du $TSFE. $TSFE->id uid de la page courante $TSFE->page[] Tableau contenant lenregistrement de la page courante $TSFE->sys_page Objet avec diff erentes m ethodes sappliquant aux pages $TSFE->additionalHeaderData[] ` destination de len-t Tableau contenant des donn ees suppl ementaires a ete HTML $TSFE->sys_language_uid ID de la langue courante $TSFE->tmpl Objet de gabarit TypoScript $TSFE->tmpl->setup[] Objet contenant lensemble de la conguration TypoScript $TSFE->pSetup[] Objet contenant la conguration TypoScript de lobjet de la page $TSFE->cong[] Tableau de conguration (TS cong) $TSFE->register[] Registre TypoScript $TSFE->cObj Objet central ; un objet cObject est disponible dans les plugins via $this->cObj. $TSFE->fe_user Utilisateur frontend courant (object) Lobjet $TSFE fournit un certain nombre de m ethodes sp ecialement r eserv ees aux plugins : getStorageSiterootPids() Renvoie un tableau contenant les valeurs _SITEROOT et _STORAGE_PID qui sp ecient respectivement les ID de la page et de la page racine du site Web, ainsi que lendroit o` u tre stock les enregistrements doivent e es. 440

7.5 Programmer dans le frontend : les principes

getPagesTScong() Cette m ethode renvoie le tableau TSCong de la page en fonction du rootline setJS() Sp ecie le code JavaScript, qui sera ins er e dans len-t ete HTML setCSS() Sp ecie les donn ees CSS qui seront ins er ees dans len-t ete HTML uniqueHash() G en` ere une valeur de hachage unique set_no_cache() Active loption pour que la page ne soit pas cach ee set_cache_timeout_default() Fixe la dur ee apr` es laquelle la page est r eg en er ee dans le cache Lextension FE Debug/Info output (cc_feinfo) vous fournit un plugin pour afcher dans le ` frontend les valeurs courantes de lobjet TSFE et dautres donn ees utiles. Ceci vous aide a ` visualiser lensemble des donn d eboguer ou a ees disponibles.

7.5.4 cObject, tslib_cObj


Un cObject (Content Object) est un objet TypoScript, comme par exemple TEXT, IMAGE, HMENU. Ces objets sont instanci es en PHP par la classe tslib_cObj (class.tslib_content.php). De plus, vous y retrouvez les fonctions telles que stdWrap ou parseFunc. ` linstance de tslib_cObj via $this->cObj. Cette r ` Dans les plugins, vous acc edez a ef erence a lobjet est d enie automatiquement lors de linitialisation du plugin. Voici un aperc u de lAPI de tslib_cObj : data[] ` lenregistrement courant (normalement de la table tt_content). Permet dacc eder a

cObjGetSingle() Restitue le cObject en fonction du nom pass e en argument (TEXT, IMAGE, . . .) et de la ` ce sujet a ` la section suivante. conguration TypoScript. Vous trouverez plus de d etails a stdWrap() La fonction standard pour les enveloppes (wrap). En appliquant les param` etres de votre TypoScript, cette fonction vous offre une large gamme de possibilit es. Vous avez d ej` a pu en juger lorsque nous avons abord e lexemple un compteur de visiteurs en 20 minutes (cf. section 7.1). enableFields() Cr ee une clause SQL WHERE qui s electionne uniquement les enregistrements valides dans le FE. On prend ici en compte les permissions dacc` es et les champs Lancement et Arrt. DBgetUpdate() Cr ee une commande SQL Update pour une table en tenant compte de la conguration de la table dans le tableau TCA. 441

7 D eveloppement dextensions

DBgetInsert() Comme pour DBgetInsert(), mais pour linsertion denregistrements.

Arguments Dans leur mise en pratique en PHP, les objets de contenu traitent de la m eme mani` ere le passage darguments : function cImage($le,$conf) function stdWrap($content,$conf) function typoLink($linktxt, $conf) Le premier argument contient une valeur (par exemple une cha ne de caract` eres), qui doit tre trait e ee. Le second argument est la variable $conf, qui d etermine le comportement de la m ethode. Les plugins respectent aussi cette convention, puisquils sont instanci es via USER ou USER_INT et quune m ethode prend comme arguments les variables $content et $conf. Cependant, dans tre ignor la majorit e des cas, la variable $content nest pas utilis ee et peut e ee. Tableau $conf Le tableau $conf repr esente linterface entre TypoScript et PHP. Dune part, il permet de con` lint gurer le code PHP et dautre part, en utilisant les cObjects a erieur du code PHP, vous pouvez modier ou changer leur comportement. Nous avons d ej` a illustr e ce dernier point dans la restitution graphique du compteur de visiteurs (cf. section 7.1). ` pr En utilisant lexemple du compteur de visiteurs, nous allons a esent montrer le fonctionne` la gure suivante, le TypoScript Object Browser vous pr ment du tableau $conf. A esente la conguration TypoScript du compteur de visiteurs.
Figure 7.28: Conguration TS dans le TypoScript Object Browser

t t Comme vous le constatez, le TypoScript a e e converti en une liste hi erarchique qui a d ej` ae e d ecrite en d etail pr ec edemment. 442

7.5 Programmer dans le frontend : les principes

` lobjet USER_INT dans plugin.user_visitcounter_ La conguration TS est pass ee en argument a ` laide de la fonction debug() : pi1. Voici $conf tel quil appara t a
Figure 7.29: Afchage de $conf par debug()

Lobjet USER_INT naccepte que les deux arguments includeLibs et userFunc, qui d enissent la ` appeler. Dans notre exemple, USER_INT appelle la m m ethode a ethode user_visitcounter_pi1 ->main et passe en argument le tableau $conf quil a lui-m eme rec u. ` la gure 7.29, lobjet USER_INT transf` Comme vous le remarquez a ere les cl es renderObj et ` la n). Les cl renderObj. (avec le point a es sans le point sont initialis ees via le signe = dans TS, g en eralement dans le but de d enir le type dobjet. La m eme cl e avec le point . contient la conguration de lobjet.
renderObj = COA renderObj { // dans lobjet renderObj. (avec le point)

La seconde possibilit e est que le signe = xe une valeur au lieu du type dobjet. Ce concept est illustr e dans lexemple ci-dessus par le param` etre pid. Dans le tableau de conguration TS, seul pid. (avec un point) est disponible. Clairement, pid nest pas d eni avec le signe = . Observons la ligne TypoScript correspondante :
[Link] = page:uid

Dans le cas du param` etre pid, vous ne devez pas le d enir car il est de type stdWrap. Il est donc pris en charge par le code PHP du plugin.
$pid = intval($this->cObj->stdWrap($conf[pid],$conf[pid.]));

La fonction stdWrap() d etermine la valeur du pid. Si vous observez les param` etres, vous reconna trez les concepts de $content et $conf. Dans la conguration ci-dessus, $content et $conf[pid] sont vides. La conguration est transf er ee avec $conf[pid.] et contient alors data = page:uid. Cela signie que la fonction stdWrap() rec oit une valeur vide, mais quelle g en` ere ` renvoyer gr ` la conguration de data. la valeur a ace a t Les choses auraient e e diff erentes avec le TypoScript suivant :
pid = 21

443

7 D eveloppement dextensions

Dans ce cas, stdWrap() aurait rec u la valeur 21 ($content), mais pas de conguration ($conf). stdWrap() renvoie alors simplement 21. Dans lexemple suivant, la valeur est transf er ee, mais elle est remplac ee par override.
pid = 21 [Link] = register: user_visitcounter_pid

Comme vous avez pu le constater, la combinaison du TypoScript et de PHP offre plusieurs fac ons de rendre le code PHP exible, via la conguration de param` etres.

7.5.5 Restitution des cObjects par PHP


tre Comme lexemple du compteur de visiteurs la montr e, lafchage dun plugin peut aussi e produit par des cObjects. M eme si un plugin g en` ere une grande partie de lafchage par lui tre utile de contr m eme, avec la mise en forme contr ol ee par CSS, il peut e oler certaines parties par TypoScript : par exemple, pour lafchage des images.
$outputHTML = $this->cObj->cImage($file, $conf[image.]);

La m ethode cImage() (IMAGE) restitue une image dans le frontend pour laquelle le nom du chier est pass e dans $le, en utilisant $conf[image.] de la conguration TS. De cette mani` ere, vous pouvez par exemple modier la taille de limage avec TS. De plus, la balise <img> est g en er ee. Dans le compteur de visiteurs, tout lafchage est contr ol e par un cObjects. Cette op eration ` la m est r ealis ee par le transfert de la conguration TS renderObj a ethode cObjGetSingle(). Cette m ethode restitue le contenu en fonction de la conguration, ou appelle la fonction de restitution de contenu pour le cObject en question. Par cons equent, vous disposez dune grande libert e pour la restitution du contenu. Il est m eme possible de d enir un renderObj en tant quobjet USER pour g en erer la sortie via un script externe. ` partir de $conf[renderObj], ce qui signie que renLa m ethode d etermine le type dobjet a tre de nimporte quel type (TEXT, IMAGE, COA, . . .). derObj peut e
// restitution du compteur par le TypoScript renderObj $lCObj = t3lib_div::makeInstance(tslib_cObj); $lCObj->setParent($this->cObj->data, $this->cObj->currentRecord); $lCObj->start($row, $table); $content = $lCObj->cObjGetSingle($conf[renderObj], $conf[renderObj.]);

Comme vous le remarquez, $this->cObj, qui est automatiquement disponible au sein des plugins, nest pas utilis e. En effet, lobjet travaille avec les donn ees qui appartiennent toujours ` un cObject. En g a en eral, ces donn ees sont les champs de lenregistrement courant, qui est dhabitude contenu dans la table tt_content. Lexemple suivant montre une partie du TypoScript de la conguration de l el ement de contenu ` eld = subheader et a ` la conguration TS, vous pouvez directement acc en-t ete. Gr ace a eder au champ subheader de lenregistrement tt_content courant. 444

7.5 Programmer dans le frontend : les principes


tt_content.header = COA tt_content.header { ... 20.1 = TEXT [Link] = subheader

` rien avec la conDans le compteur de visiteurs, $this->cObj->cObjGetSingle() naboutirait a guration TS suivante, puisque les donn ees ne proviennent pas de la table user_visitcounter, mais de lenregistrement tt_content, qui ins` ere le plugin dans la page.
10 = TEXT [Link] = counter

Pour cette raison, on cr ee une instance locale de tslib_cObj. Ensuite, on ajuste avec $lCObj ->start($row, $table) lenregistrement courant en reprenant le dernier enregistrement du t compteur de visiteurs qui a e e lu. Le TS ci-dessus donnera alors le r esultat voulu.

7.5.6 tslib_pibase
` disposition la classe de base tslib_pibase pour les plugins du frontend. Les plugins TYPO3 met a s par le Kickstarter sont bas cr ee es sur tslib_pibase. Un plugin ne doit pas n ecessairement utiliser cette classe, mais cette derni` ere contient des m ethodes sp ecialement destin ees aux ` la cr plugins. Parmi les m ethodes pr esentes, on notera celles relatives a eation correcte des liens et au traitement des param` etres. Voici la gamme des fonctions fournies par tslib_pibase : Reconnaissance des param` etres tslib_pibase reconna t les param` etres qui sont pass es au plugin. La section suivante ` ce sujet. donne plus de d etails a M ethodes pour les liens M ethodes pour g en erer les liens avec ou sans param` etres. Elles sont aussi d ecrites plus ` la section suivante. en d etail a M ethodes pour les listes denregistrements Le Kickstarter peut cr eer des plugins qui listent d ej` a des enregistrements et les afchent ` cet effet. dans la vue d etaill ee du backend. tslib_pibase fournit les m ethodes de base a Stylesheet et CSS Un certain nombre de m ethodes sont disponibles pour lutilisation des CSS. Celles-ci tiennent compte de lespace de nommage du plugin. Edition frontend l M ethode pour g en erer les e ements d edition du FE (ic ones) pour les enregistrements. Localisation, langues Support des plugins multilingues sur base du chier de langues locallang. ` la base de donn Acc` es a ees ` la base de donn M ethodes pour acc eder a ees. Cache Support du cache pour les plugins avec des param` etres. 445

7 D eveloppement dextensions

Flexforms Support pour le traitement des donn ees des Flexforms. Codage de caract` ere M ethodes pour traiter les cha nes de caract` eres, en prenant en compte le codage de caract` eres.

7.5.7 Liens et param` etres dans les plugins


tre respect En g en erant les liens au sein des plugins, deux principes doivent e es: dune part, les liens doivent avoir un format correct, en loccurrence, les liens vers une page de TYPO3 doivent comprendre lID et le param` etre type. Dautre part, les param` etres GET utilis es doivent respecter viter les conits avec dautres plugins. la convention de nommage de lextension pour e En outre, il existe plusieurs mani` eres dafcher les URL dans TYPO3. La premi` ere qui vaut la peine d etre mentionn ee est celle qui se pr esente sous une forme non encod ee :
[Link]?id=123&tx_example_pi1[showUid]=456

En plus, loption simulateStaticDocuments ou lextension SpeakingURIs vous offrent dautres possibilit es de codage qui augmentent la lisibilit e et am eliorent le r ef erencement de votre site par les moteurs de recherche. La classe de base tslib_pibase de plugin vous donne un cadre pour la cr eation de vos URL et pour la gestion des param` etres de vos plugins. Vous ne devez d` es lors plus vous soucier du format. l Lexemple de code suivant montre les e ements typiques dun plugin g en er e par le Kickstarter en ce qui concerne la gestion des param` etres.
require_once(PATH_tslib.class.tslib_pibase.php); class tx_example_pi1 extends tslib_pibase { var $prefixId = tx_example_pi1; ... function main($content,$conf) { $this->conf = $conf; $this->pi_setPiVarDefaults(); ...

Tout dabord, les param` etres sont g er es par $this->piVars[]. Durant la phase dinitialisation, ` $this->prexId. Le ce tableau est rempli par les param` etres GET et POST correspondant a constructeur de la classe de base tslib_pibase assure cette t ache automatiquement.
function tslib_pibase() { if ($this->prefixId) { $this->piVars = t3lib_div::GParrayMerged($this->prefixId); }

Si le plugin est appel e via la m ethode main(), les valeurs par d efaut pour les param` etres sont ` laide de la m x ees par TypoScript (via _DEFAULT_PI_VARS) a ethode pi_setPiVarDefaults(). Mais ces valeurs sont remplac ees par celles qui existent d ej` a dans $this->piVars[]. Les possibilit es suivantes existent pour la cr eation des URL ou des liens : 446

7.5 Programmer dans le frontend : les principes

URL avec seulement lID et le type de la page URL avec des param` etres sp eciques ` partir de $this->piVars[] URL avec des param` etres s electionn es a URL avec tous les param` etres $this->piVars[] URL avec tous les param` etres $this->piVars[] et les param` etres suppl ementaires de remplacement ` votre disposition. Ces Dans tous ces cas, des m ethodes de la classe de base tslib_pibase sont a derni` eres reposent elles-m emes sur les m ethodes de liens de tslib_cObj qui sont mentionn ees ici par souci dexhaustivit e.
$this->cObj->getTypoLink($label, $params, $urlParameters=array(), $target=) $this->cObj->getTypoLink_URL($params, $urlParameters=array(), $target=) $this->cObj->typoLink($linktxt, $conf)

Normalement, les m ethodes suivantes de la classe de base tslib_pibase devraient vous sufre. pi_getPageLink() Cette m ethode cr ee des URL pour un ID sp ecique de page. Vous pouvez sp ecier un tableau avec les param` etres de lURL. pi_linkToPage() (balise <a>) autour de la cha Comme pour pi_getPageLink(), mais un lien est cr ee ne de caract` eres pass ee en argument. Par opposition aux deux m ethodes pr ec edentes, les m ethodes suivantes prennent aussi en ` la section suivante. compte le cache, comme cela sera expliqu ea pi_linkTP() ` cette diff Comme pour pi_linkToPage(), a erence pr` es que le cache est pris en consid eration. pi_linkTP_keepPIvars_url() Cr ee une URL, dans laquelle tous les param` etres de piVars sont inclus. Les param` etres tre remplac peuvent e es ou ajout es. pi_linkTP_keepPIvars() Idem que pour la m ethode pr ec edente, mais cr ee un lien. pi_list_linkSingle() Cr ee un lien avec le param` etre showUid, pour afcher un record en particulier. ` utiliser dans un formulaire par exemple, peut e tre Une URL simple pour la page courante, a g en er ee comme suit:
$url = $this->pi_getPageLink($GLOBALS[TSFE]->id);

` travers une liste. pi_linkTP_keepPIvars() est Le code suivant cr ee un lien pour naviguer a tre maintenus. Le param` utilis e puisque les param` etres courants doivent e etre pointer est pass e et remplace donc la valeur existante, si elle existe, dans $this->piVars[]. 447

7 D eveloppement dextensions
$browseNext = $this->pi_linkTP_keepPIvars( $this->pi_getLL(pi_list_browseresults_next,Next >,TRUE), array(pointer=>$pointer+1));

Lutilisation des m ethodes de liens via piVars et tslib_pibase demande une certaine discipline. tes habitu ` appr Mais une fois que vous vous y e e, vous apprendrez a ecier la limpidit e de ce concept. De plus, il est imp eratif dutiliser ce cadre de d eveloppement si vous voulez que votre ` lAPI. Dans le cas contraire, il y aura des conits avec dautres applugin soit conforme a plications. Son utilit e principale est sa compatibilit e avec loption simulateStaticDocuments, lextension SpeakingURIs et dautres solutions similaires. Enn, comme il est d ecrit plus bas, vous avez la possibilit e de mettre en cache des plugins.

7.5.8 USER, USER_INT, cache et param` etres


Le frontend utilise une m emoire tampon (cache), pour les pages d ej` a restitu ees. Une fois sau tre reconstitu tre servies vegard ees dans le cache, les pages ne doivent plus e ees, elles peuvent e directement. TYPO3 dispose dune large gamme doptions pour param etrer le cache. Tout dabord, le comportement du cache est d eni gr ace aux param` etres suivants dans la conguration TS : cong.no_cache = 1 D esactive le cache cong.cache_period = 3600 D etermine la p eriode (en secondes) apr` es laquelle une entr ee du cache expire cong.cache_clearAtMidnight = 1 ` minuit Vide le cache a De plus, vous pouvez sp ecier individuellement, dans lenregistrement de la page, si cette tre cach derni` ere doit e ee ou non (Sans cache). Vous pouvez aussi d enir la dur ee de validit e ` laquelle la page doit e tre compl` du cache, qui d etermine la fr equence a etement reconstruite ` cache_period). (menu Expiration du cache, correspondant a tre contr ` partir des plugins. Si Le comportement du cache peut aussi e ol e par du code PHP a votre plugin est int egr e en tant quobjet USER, qui est normalement cach e, vous pouvez forcer `e tre reconstruite toutes les 15 minutes en sp la page a eciant :
$GLOBALS[TSFE]->set_cache_timeout_default(60*15);

Vous pouvez aussi emp echer la page d etre cach ee durant le processus de restitution en activant le script suivant :
$GLOBALS[TSFE]->set_no_cache();

viter denregistrer la page dans le cache est rarement n Mais cette m ethode pour e ecessaire, ou na tout simplement pas de sens. Ce qui est beaucoup plus fr equent, cest que le plugin ` la soumission dun formulaire. Un objet USER nen est pas capable, puisquil doive r eagir a ` ce probl` nest m eme pas consult e si la page est cach ee. Une solution a eme est dactiver le param` etre no_cache=1, pour que le frontend ne fasse plus appel au cache pour cette page, mais la reconstruise compl` etement. Dans les formulaires, vous pouvez simplement inclure ce param` etre en tant que champ cach e. 448

7.5 Programmer dans le frontend : les principes


<input type="hidden" name="no_cache" value="1">

Le cache nest pas toujours possible ou na pas de sens, par exemple pour un plugin qui doit ` des param` prendre en compte des donn ees pass ees en arguments ou a etres. Pour cette raison, tre int ` laide les plugins peuvent e egr es dans le cache de la page en tant quobjets sans cache, a de USER_INT. Lavantage dans ce cas est la rapidit e, puisque seules les parties dynamiques de tre restitu la page doivent e ees. TYPO3 offre encore dautres possibilit es pour cacher le r esultat des plugins via des param` etres. tre prise en compte durant la programmation et doit e tre bien Mais cette fonctionnalit e doit e pens ee, puisquune page s epar ee est cach ee pour chaque combinaison des param` etres. ` jour Supposons que nous avons un plugin qui afche la liste des donn ees dune table mise a ` quelques jours dintervalle seulement. Cest donc un bon candidat pour le cache. Les ena tats. Par registrements afch es sont s electionn es par trois variables, chacun comportant 2 e tre activ cons equent, il y a (23 ) listes. De plus, le tri peut e e sur quatre colonnes, ce qui donne un total de 128 (27 ) vues diff erentes. La liste a une longueur moyenne de 100 lignes, divis ees en pages de 20 lignes. Cela signie quil y a 640 (128 (1285) 5) variations de pages possibles dans le cache. Si nous ajoutons deux param` etres suppl ementaires, le premier avec cinq options et le second ` 25 600 variations possibles, qui ne seront vraisemblablement pas avec huit, nous arrivons a es. toutes appel ees ou cr ee Comme vous le voyez, un plugin g en` ere facilement des millions de pages cach ees, ce qui charge lourdement le serveur de base de donn ees. Il est difcile de faire une recommandation ici. Une application consommatrice de ressources, avec seulement quelques options, peut tirer parti du cache, tandis quun plugin qui afche des donn ees courantes nest pas cach e, bien s ur. Voici un exemple de plugin pour d emontrer les possibilit es du cache. Le plugin g en` ere lafchage suivant :
Figure 7.30: Afchage par le plugin linkexample

449

7 D eveloppement dextensions

Le plugin comprend un formulaire avec trois options ; il donne lheure lorsque la restitution est termin ee, et deux liens. Pour nir, le plugin cc_feinfo est int egr e pour que les param` etres pass es soient afch es. La page vient d etre appel ee via le lien Link with Parameter . En dessous de GET Va t riables , vous voyez les param` etres qui ont e e transf er es via le lien :
[Link] i1[opt2]=1&cHash=4901bb2eda

Vous retrouvez dabord lID de la page, ensuite les deux param` etres opt1 et opt2 pour le plu t ` pr gin, qui ont e e automatiquement ajout es via tslib_pibase, et qui sont a esent disponibles dans $this->piVars[]. Cest dans le dernier param` etre cHash que r eside le secret du cache des plugins avec param` etres. Une entr ee dans le cache est bas ee principalement sur lID de la page et le param` etre type. Si cHash est activ e, les param` etres transf er es sont inclus et on v erie si la valeur de cHash correspond aux param` etres courants. vite que la page fasse d De cette mani` ere, on e elib er ement lobjet dune s erie dappels avec des valeurs de hachage falsi ees.7 ` pr ` lexemple de plugin. Le plugin est enregistr Retournons a esent a e dans le chier ext_localconf.php de lextension.
t3lib_extMgm::addPItoST43($_EXTKEY, pi1/class.tx_linkexample_pi1.php, _pi1, list_type, 1 /*cached*/);

tre int Le dernier param` etre de t3lib_extMgm::addPItoST43() d etermine si le plugin doit e egr e en tant quobjet USER_INT (0) ou USER (1). Puisque les objets USER_INT ne sont normale tre x ` 1. Cette conguration nest pas ment pas cach es, la valeur du param` etre doit e ee ici a sufsante pour que la page soit cach ee. Il faut encore sp ecier le param` etre cHash qui est g en er e par la fonction de lien de la classe tslib_pibase (en d enitive, par la m ethode cObj` TRUE lors de lappel a ` la m >typoLink()). Si, par exemple, le param` etre $cache est x ea ethode ` lURL. pi_linkTP_keepPIvars(), le param` etre cHash est ajout ea
function pi_linkTP_keepPIvars($str, $overrulePIvars=array(), $cache=0, $clearAnyway=0, $altPageId=0)

tre cach Vous devez donc d ecider au sein du plugin si la page doit e ee ou non, en fonction des param` etres, et ajuster la variable $cache en cons equence. Si vous voulez cacher tout ce qui est g en er e par le plugin, vous devez toujours s electionner TRUE pour la valeur de $cache.
7 La fonction de cr eation de valeurs de hachage se sert du param` etre $TYPO3_CONF_VARS[SYS] tre vide pour des raisons de s [encryptionKey]. Ce dernier ne devrait pas e ecurit e (voir la section sur loutil dinstallation).

450

7.5 Programmer dans le frontend : les principes

Mais noubliez pas que cela peut surcharger la base de donn ees, selon le nombre de param` etres concern es. Le tableau pi_autoCacheFields[] de la classe tslib_pibase permet dactiver par d efaut le cache pour certains param` etres. Cette fonctionnalit e est utilis ee ci-apr` es dans lexemple de plugin. ` montrer la m Nous nous limitons a ethode main() en laissant de c ot e len-t ete et le pied de page du chier du plugin.
function main($content,$conf) { $this->conf=$conf; $this->pi_setPiVarDefaults(); // If set caching is disabled $this->pi_USER_INT_obj=0;

tre x ` FALSE pour activer le cache dans La valeur de la variable pi_USER_INT_obj doit e ee a tslib_pibase et g en erer la valeur de cHash.
// enable auto caching $this->pi_autoCacheEn = 1; // register parameter for auto caching $this->pi_autoCacheFields = array( opt1 => array(list => array(0,1)), opt2 => array(list => array(0,1)), );

La fonction auto-cache est activ ee. Le tableau pi_autoCacheFields[] reprend les param` etres pour lesquels le cache est permis. Si tous les param` etres utilis es pour cr eer une URL sont disponibles dans ce tableau (opt1,opt2), et si leur valeur est d enie, la valeur de cHash est g en er ee. Sinon, le param` etre no_cache=1 est rajout e pour que les pages soient compl` etement reconstruites, et pour que le plugin puisse prendre en compte les param` etres. Les valeurs possibles sont d enies par les tableaux list ou range. Alors que list contient une s erie de valeurs, range est d eni par une borne inf erieure et une borne sup erieure.
$params = array(opt1,opt2,opt3); // build options form $options = ; foreach ($params as $opt) { $options.= <input type="checkbox" . name=".$this->prefixId.[.$opt.]" . value="1" . ($this->piVars[$opt]?checked="checked":). > .$opt.<br />; } $content = <h3>Options:</h3> <form action=". htmlspecialchars($this->pi_getPageLink($GLOBALS[TSFE]->id)). " method="post">

451

7 D eveloppement dextensions
.$options. <input type="hidden" name="no_cache" value="1"> <input type="submit" name=".$this->prefixId._submit_button" value="Submit"> </form> <br /> ;

Lexemple de plugin contient les trois param` etres opt1, opt2 et opt3. Le code ci-dessus cr ee ` ces param` ` la page un formulaire qui assigne des valeurs a etres. Le formulaire est envoy ea courante. Le param` etre no_cache est ins er e en tant que champ cach e du formulaire.
// show the current time - will not change with cached pages $content.= Rendering time: .date(H:m:s,time()); $content.= <br /><br />;

` chaque Lheure est afch ee pour visualiser imm ediatement leffet du cache. Si lheure change a t chargement de la page, cela signie que la page a e e reconstruite et quelle ne provient pas ` lesprit que le cache peut e tre d du cache. Gardez a esactiv e, pour diff erentes raisons, si vous tes identi vous e e dans le backend.
// link with current piVars set by options form $content.= $this->pi_linkTP_keepPIvars(Link with Parameter); $content.= <br />;

. Il envoie les valeurs courantes de piVars comme arguments a ` la page courante. Un lien est cr ee Il serait possible de sp ecier ici la variable $cache, mais cela nest pas n ecessaire, car la fonction t auto-cache a e e activ ee. Si les param` etres opt1 et/ou opt2 ont une valeur, un lien est cr ee avec le param` etre cHash. Si le param` etre opt3 est aussi pr esent, cest cache=1 qui est ajout e ` lURL, parce que opt3 ne se trouve pas dans le tableau pi_autoCacheFields[]. a
// overrule opt3=1 which will force no_cache=1 // (opt3 is not set in pi_autoCacheFields) $overrule = array(opt3 => 1); $content.= $this->pi_linkTP_keepPIvars(Link with Parameter opt3=1, $overrule); $content.= <br />;

` la m Dans lappel a ethode pi_linkTP_keepPIvars(), le tableau $overrule, contenant le param` etre opt3 est pass e en argument. Ce param` etre est donc ajout e au lien, quil soit ou non contenu dans piVars[]. Par cons equent, ce lien ne cr ee jamais une valeur cHash.
// insert feinfo $info = t3lib_div::makeInstance(tx_ccfeinfo); $info->init($this); $content.= $info->pi_getInfoOutput(); return $this->pi_wrapInBaseClass($content); }

Pour nir, tx_ccfeinfo est int egr e an dafcher les variables GET- et POST. Ce plugin, de par les fonctions quil contient, est dune grande utilit e pour effectuer des tests ou pour afcher des donn ees. 452

7.6 Programmation frontend : exemples

7.6 Programmation frontend : exemples


t Les exemples de programmation ont e e d evelopp es sous la version 3.7 de TYPO3 et install es t sous la version 3.8. Certaines parties du code ont e e laiss ees de c ot e pour des raisons de clart e, telles que les balises <?php ?> et la ligne suivante que lon retrouve dans les chiers comme ext_tables.php et ext_localconf.php :
if (!defined (TYPO3_MODE)) die (Access denied.);

l s par le Kickstarter, de telle sorte que les exemples peuvent Mais tous ces e ements sont cr ee tre reconstruits sans probl` tre t e emes. De plus, tous les exemples peuvent e el echarg es. Le pr exe user_, qui est r eserv e aux extensions locales, est toujours ins er e dans les cl es dextension. t Les exemples ont e e d evelopp es sur base de lextension CSS Styled Content, qui restitue le contenu uniquement au travers de classes CSS. Ce concept est aussi utilis e dans les exemples dextension. Lavantage est que la forme est plus facilement s epar ee du contenu. La plupart des exemples sont fonctionnels sans adaptation du gabarit standard content (default) ; mais il est possible que lafchage du r esultat diff` ere quelque peu. Cependant, ce nest pas signicatif dans le cadre du d eveloppement dun plugin.

7.6.1 Bordures d el ements de contenu


l Cet exemple est une petite extension qui ins` ere de nouvelles bordures pour les e ements de contenu.
Figure 7.31: ement de contenu El avec de nouvelles bordures

Pour cr eer de nouvelles bordures, vous devez bien s ur conna tre les fonctions existantes. Puisque ces derni` eres ne sont pas regroup ees au sein dune extension o` u on peut les retrouver fa l cilement, vous devez faire une petite recherche. Comme vous le savez, les e ements de contenu sont enregistr es dans la table tt_content de la base de donn ees, et sont ensuite restitu es par la conguration TypoScript tt_content. Il y a donc plusieurs endroits o` u vous pouvez commencer votre recherche sur les bordures. Le chier typo3/sysext/cms/tbl_tt_content.php contient le tableau de d enition TCA pour ` premi` les champs de la table tt_content. Malheureusement, a ere vue, cette d enition nin` la section 7.4.7, lafchage des formulaires dique rien qui pourrait vous aider. Comme d ecrit a l du backend des e ements de contenu est d eni dans ce chier. Par cons equent, les donn ees t pour la s election des bordures devraient aussi sy trouver. Ces donn ees, cependant, ont e e d eplac ees dans un chier s epar e, qui contient les diff erentes langues. En examinant le chier 453

7 D eveloppement dextensions

tbl_tt_content.php, vous remarquez que les noms des champs se trouvent dans le chier locallang_ttc.php8 . On retrouve rapidement les entr ees pour le champ de s election. Les cl es pour les noms des champs sont connues.
section_frame => Cadre:, section_frame.I.1 => Invisible, section_frame.I.2 => R` egle avant, section_frame.I.3 => R` egle apr` es, section_frame.I.4 => Indenter, section_frame.I.5 => Identer, 33/66%, section_frame.I.6 => Identer, 66/33%, section_frame.I.7 => Cadre 1, section_frame.I.8 => Cadre 2,

` pr En utilisant la cl e (section_frame) dans les d enitions du TCA, vous pouvez a esent rechercher le champ pour les bordures (cest aussi possible via Outils Conguration $TCA). La section suivante se trouve dans le chier tbl_tt_content.php :
section_frame => Array ( exclude => 1, label => LLL:EXT:cms/locallang_ttc.php:section_frame, config => Array ( type => select, items => Array ( Array(, 0), Array(LLL:EXT:cms/locallang_ttc.php:section_frame.I.1, 1), Array(LLL:EXT:cms/locallang_ttc.php:section_frame.I.2, 5),

l section_frame dans la table tt_content d enit ici les bordures pour les e ements de contenu. ` pr ` A esent, il faut trouver lendroit dans la conguration TypoScript qui restitue le contenu ; a cet effet, utilisez le TypoScript Object Browser dans le module Web Gabarit. D` es lors, vous connaissez la position dans la conguration TypoScript o` u les nouvelles bordures tre ins doivent e er ees.
Figure 7.32: Recherche dans la conguration TypoScript

8 La

version 3.8 reprend probablement les chiers locallang dans un format XML : locallang_ttc.xml.

454

7.6 Programmation frontend : exemples

Pour afcher de nouvelles bordures, une nouvelle entr ee est donc n ecessaire dans lobjet TypoScript :
tt_content.[Link]

ainsi que dans


$TCA[tt_content][columns][section_frame][config][items]

pour que les bordures soient disponibles pour lutilisateur dans le backend. Malheureusement, le Kickstarter ne pr evoit pas la cr eation dune extension de ce type. Vous ` partir dune autre extension et les adapter, ou vous pouvez copier les chiers n ecessaires a ` laide du Kickstarter qui contient lessentiel de ce dont vous avez pouvez cr eer une extension a besoin, et ensuite apporter les modications en supprimant les composants superus. ` partir Pour cette extension, il est recommand e de cr eer un plugin Add as a Textbox type a tre du Kickstarter. Puisquun plugin PHP nest pas indispensable ici, le r epertoire pi1/ peut e supprim e. Lextension contient alors les chiers suivants :
ext_emconf.php ext_icon.gif ext_localconf.php ext_tables.php locallang_db.php

` ceci : Lextension des d enitions du TCA sop` ere dans le chier ext_tables.php et ressemble a
// add new frames to select box t3lib_div::loadTCA(tt_content); for ($key = 75; $key <= 77; $key++) { $TCA[tt_content][columns][section_frame][config][items][] = Array(LLL:EXT:.$_EXTKEY. /locallang_db.php:tt_content.section_frames_.$key, $key); }

tre charg ` partir de la table tt_content par la fonction La d enition TCA doit dabord e ee a tendue en utilisant une boucle for(). Cette fac t3lib_div::loadTCA(), an d etre e on de proc eder nest pas indispensable, mais rend le code plus facilement r eutilisable, puisque seules les valeurs tre adapt de cl e de d epart (75) et de n (77) doivent e ees. La d enition correspondante des noms de champs se trouve dans locallang_db.php.
$LOCAL_LANG = Array ( default => Array ( tt_content.section_frames_75 tt_content.section_frames_76 tt_content.section_frames_77 ), de => Array ( tt_content.section_frames_75 tt_content.section_frames_76

=> Frame: orange/dotted, => Frame: orange/dashed, => Frame: orange/solid,

=> Rahmen: Orange/gepunktet, => Rahmen: Orange/gestrichelt,

455

7 D eveloppement dextensions
tt_content.section_frames_77 => Rahmen: Orange/durchgezogen, ), fr => Array ( tt_content.section_frames_75 => Cadre: Orange/point, tt_content.section_frames_76 => Cadre: Orange/tiret, tt_content.section_frames_77 => Cadre: Orange/ligne, ), );

Une enveloppe est n ecessaire pour cr eer la bordure. Border 1 peut servir ici de mod` ele :
tt_content.[Link].20 = TEXT tt_content.[Link] = <div class="csc-frame cs c-frame-frame1">|</div>

` une boucle for Le code TypoScript est ins er e dans ext_localconf.php. On recourt aussi ici a pour g en erer le TypoScript n ecessaire via t3lib_extMgm::addTypoScript().
// generate frames with key 75 - 77 for ($key = 75; $key <= 77; $key++) { t3lib_extMgm::addTypoScript($_EXTKEY,setup, tt_content.[Link]..$key. = TEXT tt_content.[Link]..$key. .value = <div class="csc-frame-frame.$key.">|</div> ,43); }

Ce qui manque encore, cest un peu de CSS pour rendre les bordures visibles. On pourrait linclure dans la feuille de style du site Web. Mais vous pouvez aussi lins erer si n ecessaire via le gabarit de lextension. Pour ce faire, cr eez un nouveau chier :
static/ [Link]

` ceci (en abr Ce chier doit contenir du code qui ressemble a eg e) :


# Example of default set CSS styles (these plugin.tx_userframes._CSS_DEFAULT_STYLE ( [Link]-frame-frame75 { background-color: #FAAC27; border: 3px [Link]-frame-frame76 { background-color: #FAAC27; border: 3px [Link]-frame-frame77 { background-color: #FAAC27; border: 3px ) go into the document header):

dotted #000; } dashed #000; } solid #000; }

` pr tre install Lextension est a esent termin ee et peut e ee par le gestionnaire dextensions. Pour tre int ` lenreafcher les bordures, le CSS fourni peut e egr e en ajoutant le gabarit statique a gistrement de gabarit.
Figure 7.33: Ajout du gabarit statique

456

7.6 Programmation frontend : exemples

Un des d esavantages de ce proc ed e est que le code CSS est ins er e dans len-t ete de la page HTML, ce qui rend celle-ci plus lourde. Dun autre c ot e, on peut agir de la sorte d elib er ement, ` une page en particulier, e vitant ainsi le chargement dune feuille pour associer le code CSS a de style externe. La gure 7.34 suivante vous pr esente le r esultat de cette petite extension.
Figure 7.34: Trois nouveaux types de bordure dans le frontend

Le code g en er e a lallure suivante :


<style type="text/css"> /*<![CDATA[*/ <!-/* default styles for extension "tx_userframes" */ [Link]-frame-frame75 { background-color: #FAAC27; border: 3px dotted #000; } [Link]-frame-frame76 { background-color: #FAAC27; border: 3px dashed #000; } [Link]-frame-frame77 { background-color: #FAAC27; border: 3px solid #000; } --> /*]]>*/ </style> ... </head> <body> ... <!-- CONTENT ELEMENT, uid:15/text [begin] --> <a name="15"></a><div class="csc-frame-frame75"> <!-- Text: [begin] --> <p class="bodytext">On croit que les r eves ...</p> <!-- Text: [end] --> </div> <!-- CONTENT ELEMENT, uid:15/text [end] -->

` rebours (TypoTag) 7.6.2 La balise Typo de compte a


Bien quun CMS doive s eparer la forme du contenu, il est souvent n ecessaire de marquer le contenu au pr ealable. TYPO3 fournit ses propres balises pour ce marquage. Il ne faut pas confondre ces derni` eres avec les balises HTML, car les balises Typo sont transform ees en balises HTML (ou un autre format) durant le processus de restitution. Lexemple suivant introduit la balise <countdown>. Son but est de d ecompter les jours jusqu` a une certaine date. L el ement Text contenant :
Il reste <countdown>29 Jan 2006</countdown> jours avant le TYPO3 Snowboard Tour 2006.

457

7 D eveloppement dextensions

doit donner le r esultat suivant :


Il reste 103 jours avant le TYPO3 Snowboard Tour 2006.

tre convertie en nombre de jours restant avant La date contenue dans la balise doit donc e cette date. tre cr e dans le Kickstarter. Une nouvelle balise offrant cette fonctionnalit e peut facilement e ee Le Kickstarter fournit les chiers suivants :
ext_emconf.php ext_icon.gif ext_localconf.php pi1/ class.user_tagcountdown_pi1.php

Figure 7.35: Balise <countdown> e en tant que cr ee plugin dans le Kickstarter

Dans le chier ext_localconf.php, le script PHP class.user_tagcountdown_pi1.php et le plugin sont int egr es dans le gabarit TypoScript.
t3lib_extMgm::addPItoST43($_EXTKEY, pi1/class.user_tagcountdown_pi1.php, _pi1, , 1); t3lib_extMgm::addTypoScript($_EXTKEY,setup, lib.parseFunc_RTE.[Link] = < plugin.. t3lib_extMgm::getCN($_EXTKEY). _pi1 ,43);

458

7.6 Programmation frontend : exemples

Remarquez ici que cela ne fonctionne pas avec le gabarit content (default), car parseFunc se ` un autre endroit. Si le plugin doit op tre int trouve a erer avec ce gabarit, il doit e egr e dune autre fac on. G en eralement, le TypoScript Object Browser dans le module Web Gabarit ` ce propos. nous donne de linformation a
t3lib_extMgm::addTypoScript($_EXTKEY,setup, tt_content.[Link] = < plugin.. t3lib_extMgm::getCN($_EXTKEY). _pi1 ,43);

` la premi` Mais revenons a ere situation. Voici le r esultat, en r esum e de lint egration du TypoScript :
plugin.user_tagcountdown_pi1 = USER plugin.user_tagcountdown_pi1.userFunc = user_tagcountdown_pi1->main includeLibs.user_tagcountdown_pi1 = typo3conf/ext/user_tag_countdown/pi1 /class.user_tagcountdown_pi1.php lib.parseFunc_RTE.[Link] = < plugin.user_tagcountdown_pi1

Vous pouvez aussi sp ecier ceci directement en tant que gabarit TypoScript dans le chier ext_setup.txt. Mais la meilleure fac on de proc eder, qui est aussi la plus portable, est dint egrer le plugin via t3lib_extMgm, puisque aucun chemin de chiers statiques nest utilis e. Le script nal class.user_tagcountdown_pi1.php se pr esente alors comme suit :
require_once(PATH_tslib.class.tslib_pibase.php); class user_tagcountdown_pi1 extends tslib_pibase { var $prefixId = user_tagcountdown_pi1; var $scriptRelPath = pi1/class.user_tagcountdown_pi1.php; var $extKey = user_tag_countdown; /** * processes the <countdown> tag */ function main($content, $conf) { $date = $this->cObj->getCurrentVal(); $timestamp = strtotime($date); $delta = $timestamp - time(); $days = intval($delta / (60 * 60 * 24)) + 1; return $days;
} }

La fonction $this->cObj->getCurrentVal() renvoie le contenu de la balise <countdown> (la date), qui est convertie en jours dans les lignes suivantes. Remarquez que la fonction strtotime() ne peut pas manipuler les conventions internationales, mais cela na pas dimportance dans cet exemple. ` la fonction main() de deux mani` Les param` etres sont pass es a eres. Pour la premi` ere, le passage se fait directement dans la balise Typo, comme pour les balises HTML. 459

7 D eveloppement dextensions
Il reste <countdown unit=hour>29 Jan 2006</countdown> heures avant le TYPO3 Snowboard Tour 2006.

Tous les param` etres dans la balise sont accessibles par lobjet plugin via le tableau $this->cObj ->parameters. Dans ce cas, $this->cObj->parameters[unit] contient lheure. On peut aussi travailler de la sorte avec plusieurs param` etres. De plus, $this->cObj->parameters[allParams] contient tous les param` etres sous forme de cha nes de caract` eres, dans le format dans lequel ils sont pass es. Pour afcher les heures, on doit apporter les modications suivantes dans le plugin :
function main($content,$conf) { // get parameter from tag $unit = $this->cObj->parameters[unit]; // get parameter from TypoScript $unit = $unit ? $unit : $this->cObj->stdWrap($conf[unit], $conf[unit.]); if ($unit==min) { $divider = 60; } elseif ($unit==hour) { $divider = 60 * 60; } else { // day - default $divider = 60 * 60 * 24; } $date = $this->cObj->getCurrentVal(); $timestamp = strtotime($date); $delta = $timestamp - time(); $days = intval($delta / $divider) + 1; return $days;
}

` pr A esent, la balise <countdown> peut g erer des minutes, des heures et des jours. La deuxi` eme mani` ere de passer les param` etres, comme pour tout plugin, est de recourir au TypoScript. Le code qui r ecup` ere le param` etre unit est d ej` a pr esent dans le code ci-dessus :
$unit = $unit ? $unit : $this->cObj->stdWrap($conf[unit], $conf[unit.]);

t Si unit na pas e e pass e en param` etre dans la balise, la fonction stdWrap() est appel ee pour r ecup erer la valeur via la conguration TypoScript. stdWrap() est un composant de lobjet de contenu cObj. Lobjet cObj est instanci e de mani` ere externe lorsque le plugin est initialis e, et ` la disposition du plugin. cObj, une instance de tslib/class.tslib_content.php, restitue reste a tous les objets connus de TypoScript tels que TEXT ou IMAGE.
plugin.user_tagcountdown_pi1.unit = min

Cette conguration TypoScript sp ecie que la valeur de unit est min. La valeur par d efaut nest donc plus day. Donc, les minutes sont d ecompt ees, aussi longtemps quune autre valeur de unit nest pas sp eci ee dans la balise <countdown>. Puisque plugin.user_tagcountdown_pi1.unit est un objet de type stdWrap, il h erite des m emes propri et es. La conguration TypoScript suivante est d` es lors possible : 460

7.6 Programmation frontend : exemples


plugin.user_tagcountdown_pi1.unit = min plugin.user_tagcountdown_pi1.[Link] = register: user_tagcountdown_unit

Ici, unit rec oit la valeur min, mais si user_tagcountdown_unit contient d ej` a une valeur, alors cette derni` ere est remplac ee par le registre TS. TYPO3 lit le TypoScript dans un tableau PHP. Vous pouvez afcher ce tableau en ins erant la fonction debug($conf); au d ebut. Si vous re` la gure chargez maintenant la page dans le frontend, vous obtiendrez le r esultat pr esent ea 7.36.
Figure 7.36: Afchage par la fonction debug()

Le TypoScript complet pour le plugin est afch e. Les tables reproduisent limbrication des tableaux. Sous forme de texte, voici ce que cela donne :
plugin.user_tagcountdown_pi1 = USER plugin.user_tagcountdown_pi1 { userFunc = user_tagcountdown_pi1->main unit = min [Link] = register: user_tagcountdown_unit }

Si stdWrap() est appel e, le premier argument de la fonction est la valeur de $conf[unit], dans ce cas, min.
$this->cObj->stdWrap($conf[unit], $conf[unit.]);

Le premier argument de stdWrap() est la valeur ou le contenu que la fonction est cens ee traiter. Le second argument $conf[unit.] d enit le comportement de stdWrap() au moyen tudier la fonction stdWrap() dans de param` etres contenus dans un tableau. Vous devriez e tslib/class.tslib_content.php et essayer de comprendre son fonctionnement. Vous retrouverez ce concept encore et toujours dans TYPO3. Et si vous r eexaminez le code PHP de ce plugin, vous r ealiserez que m eme la fonction main() utilise ce concept.

` rebours en JavaScript 7.6.3 Balise de compte a


` rebours sera ici e tendue pour que le compteur dans le frontend continue La balise de compte a ` d tendre le plugin pour a ecompter via JavaScript. Pour que cela ait du sens, nous devons ici e quil afche les secondes. De plus, le param` etre animate est introduit.
Il reste <countdown unit=sec animate>29 Jan 2006</countdown> secondes avant le TYPO3 Snowboard Tour 2006.

` rebours doit Le code JavaScript est int egr e dans la page uniquement au cas o` u le compte a tre afch e e. M eme si cela sort du cadre strict de ce livre, nous examinons ici bri` evement la 461

7 D eveloppement dextensions

programmation JavaScript. An de diff erencier le code JavaScript inclus par plusieurs extensions dans le code HTML des pages, le JavaScript doit tenir compte de lespace de nommage des extensions. Le moyen le plus simple est dencapsuler lenti` eret e du script dans un objet, ce vite de recourir a ` des variables globales. qui e Les objets JavaScript jouent le m eme r ole que les classes en PHP. Une fonction sert ici de tre e tendu par la propri conteneur qui peut e et e prototype.
function myClass() { [Link] = 0; } [Link] = function (param1, param2) { [Link] = (param1 + param2)/2; } [Link] = function () { return [Link]; }

De cette fac on, seule la fonction myClass() est pr esente dans lespace de nommage global. Toutes les autres fonctions et variables sont encapsul ees. Pour ce faire, notre choix se porte naturellement sur $this->extKey ou $this->prexId comme espace de nommage pour le code JavaScript. Voici donc la structure du JavaScript pour lextension :
function user_tagcountdown_pi1(id,countdown,unit) { ... } user_tagcountdown_pi1.[Link] = function () { ... }

` votre disposition pour ins Le tableau additionalHeaderData de lobjet global TSFE est a erer du code dans len-t ete HTML. Lexemple suivant vous fournit un exemple dint egration du JavaScript dans len-t ete.
// check if JavaScript is already set if (!$GLOBALS[TSFE]->additionalHeaderData[$this->prefixId]) { $jsCode = alert("This is JavaScript");; // wrap JavaScript in script tags and add to page header $GLOBALS[TSFE]->additionalHeaderData[$this->prefixId] = t3lib_div::wrapJS($jsCode);
}

t On v erie dabord si du code JavaScript a d ej` ae e ins er e. En effet, ce code doit appara tre une ` ce plugin. Gr ` la fonction t3lib_div::wrapJS(), seule fois, quel que soit le nombre dappels a ace a le code JavaScript est entour e par les balises <script> avant d etre ajout e dans len-t ete HTML. 462

7.6 Programmation frontend : exemples

Si vous voulez utiliser le traitement d ev enement JavaScript onload dans la balise body, vous ` cette n, entrez le code JavaScript onload devez bien s ur tenir compte des autres extensions. A dans un tableau de lobjet TSFE.
$GLOBALS[TSFE]->JSeventFuncCalls[onload][$this->prefixId] = alert("JS executed on load");;

Dans le code modi e du plugin, un compteur est dabord introduit pour donner un identiant l unique (ID) aux e ements. On utilise pour ce faire une variable globale :
function main($content,$conf) { // count items for JavaScript usage $GLOBALS[T3_VAR][ext][$this->prefixId][count]++;

` $GLOBALS[T3_VAR][ext][$this->prexId], seul lespace de nommage du plugin est Gr ace a utilis e.


// get parameter from tag $unit = $this->cObj->parameters[unit]; // get parameter from TypoScript $unit = $unit ? $unit : $this->cObj->stdWrap($conf[unit], $conf[unit.]);

Les secondes sont alors ajout ees dans le d ecompte :


if ($unit==sec) { $divider = 1; } elseif ($unit==min) { ... $days = intval($delta / $divider) + 1;

Le nouveau param` etre animate est ins er e. Notez que la fonction isset() v erie que animate est bien pr esent, car vous devez le sp ecier dans la balise comme suit : <countdown animate=1 ...>.
// check if "animate" parameter is set in tag $animate = isset($this->cObj->parameters[animate]); // get parameter from TypoScript $animate = $animate ? $animate : $this->cObj->stdWrap($conf[animate], $conf[animate.]);

Pour nir, voici le code qui int` egre lanimation. Celle-ci tient compte des secondes ou des minutes, puisque personne ne noterait de changement sur les heures ou les jours.
// do animation for seconds or minutes only if ($animate AND ($unit==sec OR $unit==min)) {

: Un ID pour l el ement HTML est cr ee


// unique id for every element (HTML DOM doesnt accept _) $domId = str_replace(_,-,$this->prefixId).-. $GLOBALS[$this->prefixId][count];

463

7 D eveloppement dextensions

On appelle la fonction, qui est pr esent ee plus tard, pour cr eer le code JavaScript.
// include JS code $this->addJsCounter($domId, $days, $unit);

Pour nir, le texte est entour e par les balises <span> incluant un ID.
// add an id to the content $days = <span id=".$domId.">.$days.</span>;
}

return $days;
}

` pr Vient a esent la fonction qui ins` ere le code JavaScript. Les endroits contenant du JavaScript sont en gras dans le texte. Notez que le code PHP comprend des variables telles que {$this ->prexId} qui rendent le code portable.
/** * Add JavaScript counter code to the page * @param string dom id * @param integer start value for the counter * @param string unit: sec or min * @return void */ function addJsCounter($id, $countdown, $unit) { // include JS code once if (!$GLOBALS[TSFE]->additionalHeaderData[$this->prefixId]) { $jsCode = <<<EOD {$this->prefixId}ObjArr = new Array(); function {$this->prefixId}(id,countdown,unit) { [Link] = id; [Link] = countdown; setInterval( "{$this->prefixId}ObjArr["+id+"].showcount()", unit); }
{$this->prefixId}.[Link] = function () { [Link] = [Link]-1; element = [Link]([Link]); [Link] = [Link]; }

EOD; // wrap JavaScript in script tags and add to page header $GLOBALS[TSFE]->additionalHeaderData[$this->prefixId] = t3lib_div::wrapJS($jsCode);
} $unit = ($unit=="min") ? 60000 : 1000;

// add JS onload handler $GLOBALS[TSFE]->JSeventFuncCalls[onload][$id] =

464

7.6 Programmation frontend : exemples


"{$this->prefixId}ObjArr[{$id}] = new {$this->prefixId}({$id}, {$countdown}, {$unit});";
}

t Puisque les principes ont d ej` ae e expos es, nous ne reviendrons pas en d etail sur le code de lexemple. Comme vous le constatez, il nest pas si difcile dint egrer du JavaScript pour que plusieurs plugins soient actifs sur la m eme page, sans entrer en conit les uns avec les autres.

7.6.4 Int egration de scripts PHP externes


Au plus les scripts sont simples et bien structur es, au plus il sera facile de les int egrer dans TYPO3. Si les scripts sont d ej` a organis es en classes, l ecriture dun wrapper 9 semble la vidente a ` mettre en place. Ce dernier int` ` bon solution la plus e egre la classe et lappelle a escient. Plus de travail est n ecessaire si des param` etres sont transf er es. En r` egle g en erale, lURL tre adapt et, si n ecessaire, les param` etres eux-m emes doivent e es. Si le script est peu structur e ou si cest un script ancien qui utilise des variables PHP maintenant obsol` etes, des adaptations tre apport doivent e ees. tre int Des scripts PHP externes peuvent e egr es de diff erentes fac ons dans le frontend, via les objets TypoScript suivants : USER, USER_INT s par le KickstarCes objets repr esentent la m ethode standard. Tous les plugins cr ee ter sont int egr es en tant quobjets USER ou USER_INT. La diff erence entre les deux m ethodes repose sur le fait que le r esultat est cach e lors de lint egration par USER, alors que ce nest pas le cas avec USER_INT. Cette derni` ere m ethode est utilis ee si le script doit tenir compte des param` etres (GET, POST) lors de lafchage du r esultat, et ` la fonctionnalit lorsque cela ne vaut pas la peine de recourir a e cHash. Lint egration par PHP_SCRIPT est conseill ee uniquement si un script nest pas encapsul e dans une classe, et si le portage nest pas envisageable. PHP_SCRIPT ` ceci dans TypoScript : Lint egration dun script ressemble a
page.90 = PHP_SCRIPT [Link] fileadmin/scripts/[Link]
R ef erence

680352

` toutes les Le script est inclus dans tslib_cObj, ce qui signie que vous avez acc` es a tre contenu dans la variable m ethodes de cet objet via $this. Le r esultat du script doit e $content. PHP_SCRIPT_INT ` ceci pr` Cette m ethode se comporte de la m eme mani` ere que PHP_SCRIPT, a es que le r esultat du script nest pas cach e. PHP_SCRIPT_EXT Avec cette m ethode, le r esultat nest pas cach e. Mais lint egration est diff erente puisque tre afch le r esultat peut e e par les commandes echo/print.
9 NdT

: litt eralement, programme enveloppant

465

7 D eveloppement dextensions

Convertir un script PHP t Si vous voulez int egrer des scripts dans TYPO3, alors quils nont pas e e d evelopp es dans ce but, cest g en eralement possible sans trop defforts. Nous illustrons ci-apr` es les diff erentes possibilit es existantes, sur base dun petit script qui extrait quelques informations sur un serveur Web.
Figure 7.37: Afchage par le script Examine server

Voici la version originale du script :


<?php # based on a script from [Link] by Matt DeLong // examine server information with GET request function examine($domain){ $result = ; if($domain){ if($fp = @fsockopen($domain, 80, &$errno, &$errstr, 30)){ fputs($fp, "GET / HTTP/1.0\r\n\r\n"); $data = array(); while(!feof($fp)) { $data[] = fgets($fp, 128); } fclose ($fp); } for($x=0; $x<7; $x++) { $result = (strstr(strtolower($data[$x]), server:)) ? $data[$x] : $result; } $result.= (strstr($data[3], X-Powered-By)) ? <br \>.$data[3] : ;
}

$result = ($domain && !$result) ? <b>ERROR:</b> connection could not be established with . htmlspecialchars($domain) : $result; return $result;
} $domain = stripslashes($HTTP_POST_VARS[domain]);

?> <html>

466

7.6 Programmation frontend : exemples


<body> <h2>Examine Server</h2> <form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="POST"> <p>Enter a domain name to examine their server: <input type="text" name="domain" value="<?php echo htmlspecialchars($domain); ?>"> <input type="submit" value="Go"></p> </form> <hr> <p> <?php $result = examine($domain); if($result && !strstr($result, ERROR)) echo htmlspecialchars($domain). is running:<br><br>; echo $result; ?> </p> </body> </html>

` partir de ce script. La conguration TypoScript Il est possible dobtenir une page compl` ete a suivante fait simplement appel au script ci-dessus et ne cr ee aucun autre r esultat :
page > page = PAGE [Link] = 0 [Link] = 1 page.50 = PHP_SCRIPT_EXT [Link] = fileadmin/scripts/[Link]

Mais si vous int egrez le script, comme dans les deux derni` eres lignes, dans votre propre page t (avec votre propre conguration de page), il faut supprimer du script tout ce qui a d ej` ae e g en er e par TYPO3. Normalement, il sagit de len-t ete HTML et de la balise <body>. De plus, ` PHP_SCRIPT_EXT, les commandes echo/print ne sont pas possibles pour par opposition a PHP_SCRIPT et PHP_SCRIPT_INT. Ici, le script doit renvoyer le contenu dans la variable $content. On r ealise ceci facilement via la bufferisation de sortie de PHP.
... ob_start(); ?> <h2>Examine Server</h2> ... <?php $content = ob_get_contents(); ob_end_clean(); ?>

467

7 D eveloppement dextensions

Un probl` eme fr equent lors de lint egration de scripts est le traitement des param` etres et des URL. Aussi, ce script ne fonctionne pas, car lURL de destination du formulaire nest pas correcte. La version corrig ee du script est afch ee ci-dessous dans sa variante PHP_SCRIPT_INT.
<?php # based on a script from [Link] by Matt DeLong function examine($domain){ ... return $result; } $domain = t3lib_div::_GP(domain); ob_start(); ?> <h2>Examine Server</h2> <form action="<?php echo htmlspecialchars(t3lib_div::getIndpEnv(REQUEST_URI)); ?>" method="POST"> <p>Enter a domain name to examine their server: <input type="text" name="domain" value="<?php echo htmlspecialchars($domain); ?>"> <input type="submit" value="Go"></p> </form> <hr> <p> <?php $result = examine($domain); if($result && !strstr($result, ERROR)) htmlspecialchars($domain). is running:<br><br>; echo $result; ?> </p> <?php

$content = ob_get_contents(); ob_end_clean(); ?>

La question qui se pose est de savoir sil ne serait pas pr ef erable de proc eder via une extension ` peine plus de travail, un meilleur cadre est e tabli et de cr eer un plugin. En effet, cela requiert a pour les futurs d eveloppements et le script est int egr e correctement. De plus, lint egration via ` des instabilit PHP_SCRIPT peut conduire a es dans TYPO3 si le script manipule des variables ` ceci : globales. La transformation en plugin ressemble a
class user_exmsv_pi1 extends tslib_pibase { var $prefixId = user_exmsv_pi1; var $scriptRelPath = pi1/class.user_exmsv_pi1.php; var $extKey = user_exm_sv;

468

7.6 Programmation frontend : exemples

/** * Examine Server main function */ function main($content,$conf) { $this->conf=$conf; $this->pi_setPiVarDefaults(); $this->pi_USER_INT_obj=1; $domain = $this->piVars[domain]; $result = $this->examine($domain); if($result && !strstr($result, ERROR)) { $result = <hr> <p>.htmlspecialchars($domain). is running:<br /> <br /> .$result.</p>; } $content = <h2>Examine Server</h2> <form action=". htmlspecialchars(t3lib_div::getIndpEnv(REQUEST_URI)). " method="post"> <p>Enter a domain name to examine their server: <input type="text" name=".$this->prefixId. [domain]" value=".htmlspecialchars($domain)."> <input type="hidden" name="no_cache" value="1" /> <input type="submit" value="Go"></p> </form>.$result; return $this->pi_wrapInBaseClass($content);
}

/** * Examine server informatione with GET request * * @param string domain name * @return string */ function examine($domain){ ... return $result; }
}

` utiliser les param` Le principal changement consiste a etres syst` eme au travers de la classe tslib_pibase. Par cons equent, tous les param` etres qui sont pass es avec $this->prexId en tant qu el ements dun tableau sont automatiquement disponibles dans $this->piVars[]. 469

7 D eveloppement dextensions
$domain = $this->piVars[domain]; <input type="text" name=".$this->prefixId.[domain]" value=". htmlspecialchars($domain).">

Pour un petit script tel que celui-ci, cela vaut la peine de le transformer en plugin. La fonc galement facile a ` r tionnalit e du script est sufsamment claire, ce qui le rend e eutiliser.

7.6.5 Portage de script PHP


En utilisant lexemple de lapplication PHP dataMiner 10, nous allons montrer comment porter des scripts vers TYPO3. dataMiner est utilis e pour afcher des tables de base de donn ees sous tre e dit forme de listes et de vues d etaill ees. Des enregistrements peuvent aussi e es individuellement.
Figure 7.38: Afchage de liste par dataMiner

Le but du portage est dint egrer autant que possible dataMiner dans TYPO3, tout en minimisant leffort n ecessaire. Le r epertoire dataMiner contient les chiers suivants :
dataMiner-0.20.0/ LICENSE NOTES README img/ [Link] [Link] [Link] ... [Link] [Link] lib/ [Link] [Link] [Link] [Link] [Link] [Link]
10 [Link]

470

7.6 Programmation frontend : exemples


metabase/ ... [Link]

Le code source de dataMiner est programm e de mani` ere tr` es structur ee. Les chiers du r epertoire lib/ contiennent lapplication. Le code est encapsul e dans des classes, ce qui devrait faciliter le portage. tre int Lapplication doit e egr ee plus tard dans une page en tant que plugin. Un plugin sans dans le Kickstarter. Le r cache de type (USER_INT) est cr ee epertoire dataMiner est alors copi e vers la nouvelle extension. Les chiers inutiles sont supprim es, mais les chiers LICENSE, NOTES tre laiss et README doivent e es l` a o` u ils sont. ` votre disposition pour convertir les guilleTout dabord, le module Outils ExtDevEval est a mets doubles en guillemets simples (voir la section chap7 : guidelines). tre modi Les scripts contiennent plusieurs commandes include. Celles-ci doivent e ees dans le formulaire pour que t3lib_extMgm::extPath() d etermine le chemin de lextension.
include_once(lib/[Link]); require_once(t3lib_extMgm::extPath(dataminer).dataMiner/lib/[Link]);

Le chier [Link] dans le r epertoire est un exemple parmi dautres qui illustre la fac on dont ` ceci (en abr les classes de lapplication dataMiner sont utilis ees. La structure ressemble a eg e) :
$foo = new dataBrowser(); $foo->type = "mysql"; $foo->name $foo->user $foo->pass $foo->host = = = = "MYDB"; "root"; ""; "localhost"; // database server type // // // // name of the database database username database Passwort database server hostname

// The browser needs a table name and its primary key (required) $foo->table = "city_directory"; // database table $foo->key = "Rid"; // table primary key field name // Assigning a table title will display the title instead of the actual // database table name. // title = "string"; $foo->title = "Businesses"; // print results (required) $foo->Main();

Le code dans [Link] est repris dans la m ethode main() du plugin, dans le chier pi1/tx_dataminer_pi1.php. Il faut toujours int egrer la classe principale de dataMiner dans len-t ete du chier.
require_once(t3lib_extMgm::extPath(dataminer).dataMiner/lib/[Link]);

Il sav` ere que lensemble du r esultat de dataMiner est g en er e par la m ethode Main(). Cependant, tout le contenu est afch e par la commande print. Cela ne correspond bien s ur pas du 471

7 D eveloppement dextensions

tout au concept de plugin, qui doit renvoyer le contenu via return. Heureusement, PHP propose des fonctions de bufferisation de r esultat. La portion de code suivante montre comment la bufferisation du r esultat est initi ee. Ensuite, la m ethode Main() de dataMiner est appel ee. Le r esultat issu de la commande print est bufferis e par PHP. Ce buffer est ensuite lu dans les ` la variable $content. Pour nir, le buffer est d lignes de code suivantes et pass ea esactiv e et son contenu renvoy e au syst` eme.
ob_start(); $dm->Main(); $content = ob_get_contents(); ob_end_clean(); return $this->pi_wrapInBaseClass($content);

` la base de donn dataMiner utilise Metabase pour se connecter a ees. Pour pouvoir tester tre faite pour la base de donn le plugin, la conguration suivante doit e ees, en utilisant les constantes de TYPO3.
$dm->type = mysql; $dm->name $dm->user $dm->pass $dm->host = = = = // database server type

TYPO3_db; // name of the database TYPO3_db_username; // database username TYPO3_db_Passwort; // database Passwort TYPO3_db_host; // database server hostname

Cest une solution parfaitement valide, bien que vous ne soyez pas oblig e dutiliser Metabase. Mais nous y reviendrons plus tard. dataMiner est conc u pour fonctionner avec nimporte quel type de base de donn ees, apr` es un peu de conguration. Pour les besoins de notre test, la table tt_address est s electionn ee et congur ee.
// The browser needs a table name and its primary key (required) $dm->table = tt_address; // database table $dm->key = uid; // table primary key field name

` ce stade, le plugin peut e tre install A e et test e. La table tt_address est correctement afch ee sous forme de listes. Cependant, les ic ones ne sont pas visibles, puisque les chemins ne sont plus valides. De plus, les liens et les formulaires ne fonctionneront plus, car les URL ne respectent pas les normes de TYPO3. On adapte tr` es simplement les chemins des ic ones en utilisant les fonctions de remplacement ` lextension est initialis ` un point central du code de texte. En premier lieu, le chemin relatif a ea de dataMiner.
function _var_setup() { $this->iconPath = t3lib_extMgm::siteRelPath(dataminer)./dataMiner/;

Ensuite, $this->iconPath est ins er e dans tous les chemins dimages. 472

7.6 Programmation frontend : exemples


"<img src=\"img/[Link]\" ... "<img src=\"".$this->iconPath."img/[Link]\" ...

Un probl` eme suppl ementaire surgit si vous examinez le code HTML du plugin dans le r esultat tre supprim du frontend. dataMiner produit son propre en-t ete HTML, qui doit bien s ur e e. La m ethode _head() qui se trouve dans le code contient len-t ete HTML en question.
function _head($title) { $this->_load_skin(); ?> <!-- $Id: [Link],v 1.11 2003/06/02 [Link] rlineweaver Exp $ --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <head> <title><?php echo $title; ?></title> <meta name="robots" content="noindex"> <style> BODY,TD,P,H1,H2,H3,H4,FORM { font-family:Helvetica,Arial,sans-serif; font-size:95%; } .NEW { color:<?php echo $this->newFileColor; ?>; } .HDR { color:<?php echo $this->bodyTextColor; ?>; font-size:10pt; font-weight: bold; } .TIT { color:<?php echo $this->siteNameColor; ?>; background-color:<?php echo $this->menubarColor; ?>; font-size:14pt; font-weight: bold; } ... </style> </head> <body bgcolor="#<?php echo $this->bodyBgColor; ?>" link="#<?php echo $this->rowLinkColor; ?>" ... marginwidth="<?php echo $this->bodyMarginSize; ?>"> <?php echo $this->_colorbars($this->headDiv); ?> <table border=0 cellspacing=0 cellpadding=2 width="<?php echo $this->siteWidth; ?>"> <tr><td class="TIT"><?php echo $title; ?></td></tr> ...

tre supprim En principe, lenti` eret e de len-t ete, y compris la balise <body>, peut e ee. La mise en tant lui-m ` partir d habillage , que lon forme est contr ol ee par CSS, ce dernier e eme d eni a tre voit une fois que la fonction _load_skin() est appel ee. La fonctionnalit e des habillages doit e tre r enlev ee, mais le contr ole par CSS doit demeurer. Le code CSS peut e ecup er e dans lHTML t du frontend, puisque les variables ont e e remplac ees par les couleurs correspondantes de ` la fois len-t lhabillage par d efaut. Vous pouvez ainsi supprimer a ete HTML g en er e par _head() et la m ethode _load_skin(). Dans la m ethode _foot(), les balises </body></html> doivent tre e limin ` lafchage du contenu de dataMiner. aussi e ees, pour que le plugin se limite a 473

7 D eveloppement dextensions

` pr e ne contient plus du tout de CSS, et dataMiner ne safche plus corA esent, la page cr ee rectement. Vous pourriez inclure le code CSS enregistr e pr ec edemment dans un chier pour ` lextension. Cest possible si vous utilisez le site, mais il est pr ef erable que le CSS soit associ ea TypoScript pour lint egration de la mise en forme :
plugin.tx_dataminer._CSS_DEFAULT_STYLE ( .tx-dataminer-pi1 .NEW { color:ffff00; } .tx-dataminer-pi1 .HDR { color:000000; font-size:10pt; font-weight: bold; } .tx-dataminer-pi1 .TIT { color:ffffff; background-color:111111; font-size:14pt; font-weight: bold; } ...

Puisquune telle conguration TypoScript ins` ere le code CSS dans len-t ete de la page, on ne peut pas changer ce CSS par une feuille de style externe. Cest la raison pour laquelle la conguration TypoScript au sein du chier static/[Link] est enregistr ee dans lextension. Le chier est int egr e dans ext_tables.php, le rendant disponible en tant que gabarit statique.
// add TS/CSS to static templates t3lib_extMgm::addStaticFile($_EXTKEY,static/,dataMiner: CSS);

Le code CSS est ins er e uniquement si le gabarit statique est ins er e dans un enregistrement de gabarit. Le code HTML du frontend a d ej` a tr` es belle allure. La m ethode _load_javascript(), qui int` egre ` laide de la balise <script>, fait partie de la classe dataMiner. Cette un chier JavaScript a m ethode est adapt ee, dune part pour avoir des chemins de chiers corrects, et dautre part, pour que la balise apparaisse dans len-t ete HTML.
_load_javascript() { print "<script language=\"javascript\" src=\"lib/[Link]\"></script>\n"; _load_javascript() { $GLOBALS[TSFE]->additionalHeaderData[$this->pObj->prefixId] = <script type="text/javascript" src=". $GLOBALS[TSFE]->absRefPrefix.t3lib_extMgm::siteRelPath(dataminer). dataMiner/lib/[Link]"></script>;

tre mis a ` la disposition Pour que cela fonctionne, lobjet plugin dans tx_dataminer_pi1 doit e de lobjet dataMiner. Pour rendre les liens compatibles avec le plugin, un peu de travail manuel est malheureusement n ecessaire. De simples remplacements de texte ne sufsent pas ici. Le param` etre _=b est simplement omis, parce que b active le mode afchage liste , qui est de toute fac on le ` dautres endroits, le tiret de soulignement est remplac mode par d efaut. A e par mode, ce qui est plus explicite. De plus, pour des raisons duniformisation, page est renomm ee pointer puisque, dans la classe tslib_pibase, cette fonction est remplie par le param` etre pointer. 474

7.6 Programmation frontend : exemples


$string.= "<a href=\"".$_SERVER[PHP_SELF]. "?_=b&page={$this->num_pages}\">". "<img src=\"img/[Link]\" border=\"0\" alt=\"Last\"></a>"; $icon = <img src=".$this->iconPath. img/[Link]" border="0" alt="Last">; $string.= $this->pObj->pi_linkTP_keepPIvars($icon, array(pointer=>$this->num_pages), 0);

tre adapt LURL de destination doit bien entendu aussi e ee.


print <form action=".$_SERVER[PHP_SELF] ... print <form action=".$this->pObj->pi_linkTP_keepPIvars_url() ...

` ce stade, les liens sont corrects, mais les param` A etres transf er es ne sont pas reconnus. La ` apporter est simple puisque les param` valu solution a etres sont e es dans dataMiner par la m ethode _get_value(). Si vous utilisez $this->pObj->piVars[] ici, la plupart des param` etres tre faits seront reconnus correctement. Quelques ajustements pour les donn ees POST doivent e dans la m ethode _var_setup(). Puisque t3lib_pibase prend compl` etement en charge le traitement des param` etres, on peut supprimer le code restant relatif aux sessions PHP. ` la base de donn Bien que la connexion a ees soit effective, il serait pr ef erable de se passer ` la base de donn de la couche Metabase. Puisque dataMiner encapsule lacc` es a ees dans une classe distincte, nous devons aussi ici recourir aux fonctions de MySQL de la couche de base de donn ees de TYPO3. Ces fonctions ne garantissent pas dabstraction de la base de donn ees, comme les fonctions exec_* de t3lib_DB, mais sont mises en uvre dans cette application sans trop defforts.
$result = $this->query($query); $row = $this->fetch_array($result); $result = $GLOBALS[TYPO3_DB]->sql_query($query); $row = $GLOBALS[TYPO3_DB]->sql_fetch_assoc($result);

` dataMiner comporte de nombreuses options de conguration quant au choix des champs a diter ou a ` afcher, ou quant a ` la d e enomination de ces champs. Vous vous apercevrez tr` es vite quil y a un parall elisme avec les d enitions TCA. Il semble opportun de congurer dataMiner ` partir du TCA. Pour ce faire, lextension System language labels (lang) est automatiquement a install ee, puisquelle nest pas disponible par d efaut dans le frontend. Il faut d eterminer les noms corrects des champs.
require_once(t3lib_extMgm::extPath(lang).[Link]); ... $LANG = t3lib_div::makeInstance(language); ... $dm->fields = array_keys($TCA[$dm->table][columns]); $dm->title = $LANG->sL($TCA[$dm->table][ctrl][title]); $dm->orderby = $TCA[$dm->table][ctrl][sorting];

475

7 D eveloppement dextensions
foreach ($TCA[$dm->table][columns] as $column => $def) { $dm->humanize($column,$LANG->sL($def[label])); if($def[config][default]) { $dm->defvalue($column,$def[config][default]); } } ...

` faire ? La conguration via TypoScript est souhaitable, ainsi que la possibilit Que reste-t-il a e ` afcher dans l de s electionner les tables a el ement de contenu plugin. ` cette question est difcile. Nos efforts pour porter le script en valent-ils la peine ? La r eponse a t Il aurait e e possible dint egrer le script plus facilementmais aussi de fac on moins correcte. criture compl` M eme une r ee ete ou une solution mixte est envisageable. Avec dataMiner, vous ` des tests disposez dune application qui fonctionne d ej` a, vous permettant ainsi de proc eder a durant le processus de portage, ce qui constitue un grand avantage. tape, vous pourriez supprimer le code redondant pour arriver a ` une Au cours dune derni` ere e fonctionnalit e de type TCA, ce qui ferait de cette extension une application purement TYPO3.

7.7 Programmation du backend : principes


Par programmation backend, on entend la programmation de composants qui ajoutent des fonctionnalit es dans le backend. Il sagit en g en eral de modules, de sous-modules ou dentr ees dans le menu contextuel. Comme lURL vous lindique lorsque vous vous identiez, le backend se trouve dans le r epertoire ` propos, il est tout a ` fait possible deffacer le backend dune installation TYPO3 pour typo3/. A ne garder que le frontend. Les modules sont normalement situ es au sein de leurs propres extensions ; pour les modules standards, par contre, ce nest pas toujours le cas pour des raisons historiques. N eanmoins, ces derniers sont correctement int egr es dans le syst` eme, et quelques-uns dentre eux pourraient certainement se retrouver dans des extensions. Dautres modules se trouvent dans le r epertoire typo3/mod/ et dautres encore directement dans typo3/. Le module Web Liste, par exemple, a son propre chier [Link] dans le r epertoire typo3/mod/web/list/ ; mais le script du module est en fait situ e dans typo3/db_list.php. Il est correctement congur e via ` part, tous les le chier [Link], et donc disponible dans le syst` eme. Ces exceptions mises a nouveaux modules sont d evelopp es en tant quextensions.

7.7.1

Structure dun module

` savoir Par opposition au frontend o` u toutes les requ etes transitent via un seul chier a [Link], un lien symbolique vers tslib/index_ts.php , dans le backend, chaque module dispose de son propre chier PHP fournissant lensemble des fonctionnalit es. Dans le cas du module Web Liste, le chier est db_list.php. Le nom de chier du module dans les extensions est invariablement [Link] puisque chaque module est inclus dans son propre r epertoire. En g en eral, un module est compos e des chiers suivants : 476

7.7 Programmation du backend : principes


[Link] [Link] [Link] locallang_mod.php [Link]

[Link] par le Kickstarter et ne Le module est int egr e dans le syst` eme via ce chier. Il est cr ee tre modi doit normalement pas e e.
define(TYPO3_MOD_PATH, ../typo3conf/ext/user_recentchanges/mod1/); $BACK_PATH=../../../../typo3/; $MCONF[name] = tools_urecentchangesM1; $MCONF[access] = admin; $MCONF[script] = [Link]; $MLANG[default][tabs_images][tab] = [Link]; $MLANG[default][ll_ref] = LLL:EXT:user_recentchanges/mod1/locallang_mod.php;

En premier lieu, la constante TYPO3_MOD_PATH est d enie. Elle contient le chemin vers le module depuis le r epertoire typo3/. La variable $BACK_PATH contient le chemin relatif vers le r epertoire typo3/. Gr ace ` cette variable, on peut rendre les modules ind a ependants de leur position dans la hi erarchie des r epertoires. Le gestionnaire dextensions adapte ces chemins dans les deux premi` eres lignes durant linstallation. Cest la raison pour laquelle les extensions conte tre d nant des modules ne peuvent pas e eplac ees manuellement vers le r epertoire dune autre extension. La cl e name du tableau $MCONF[] d enit un nom unique pour le module. La cl e access sp ecie les permissions dacc` es au module. Alors que la valeur admin limite lacc` es aux seuls administrateurs, le module est rendu disponible pour les utilisateurs normaux avec user,group. Mais lacc` es en lui-m eme est en d enitive contr ol e par la conguration des enregistrements pour les utilisateurs et les groupes dutilisateurs. Lic one qui appara t dans la barre des modules est ins er ee dans le tableau $MLANG[]. La ` un chier externe pour les langues est aussi sp r ef erence a eci ee. locallang_mod.php par le Kickstarter et contient le titre et la description du module Ce chier est aussi cr ee ` cet effet : dans diff erentes langues. Les cl es suivantes sont utilis ees a mlang_tabs_tab Un titre court pour la navigation mlang_labels_tablabel Un titre un peu plus long comme description du titre court ou comme en-t ete dans Aide sur les modules mlang_labels_tabdescr Description du module en plusieurs phrases ; est aussi repris dans Aide sur les modules

477

7 D eveloppement dextensions

[Link] Le script du module lui-m eme [Link] Le chier de langue associ e au script du module. Le seul chier absolument indispensable au module est [Link]. Tous les autres chiers ` dautres endroits, pour autant quils soient corpeuvent porter dautres noms et se trouver a rectement d enis dans [Link]. Mais puisque le Kickstarter met en place ces chiers sous ` ce sch cette forme, et que des d eviations par rapport a ema napportent pas plus de clart e, vous devriez essayer dadopter cette structure autant que possible.
t3lib_extMgm::addModule(web, ushopinfoM1, , t3lib_extMgm::extPath($_EXTKEY).mod1/);

Dans lexemple ci-dessus, le module ushopinfoM1 est ins er e dans le module principal web.

7.7.2 Module: framework


Les chiers et les classes suivants sont ins er es par les modules : [Link] tre int Ce chier doit e egr e par chaque module. Un certain nombre de biblioth` eques sont int egr ees, lutilisateur est identi e, la conguration du syst` eme est charg ee et les chemins sont initialis es. Les constantes suivantes sont d enies apr` es lappel de [Link] : PATH_thisScript Chemin absolu vers le script du module PATH_typo3 Chemin absolu vers le backend TYPO3 PATH_typo3_mod Chemin relatif vers le module depuis typo3/ PATH_site Chemin absolu vers le site Web PATH_t3lib Chemin absolu vers t3lib/ t Les objets globaux sont disponibles apr` es que [Link] a e e appel e: $BE_USER Utilisateur backend $LANG Gestion des langues 478

7.7 Programmation du backend : principes

$TYPO3_DB ` la base de donn Acc` es a ees t3lib_SCbase Cest la classe de base pour les scripts des modules. En particulier, elle fournit un framework complet pour le support des fonctions de sous-modules. De plus, cette classe g` ere automatiquement la conguration dun module, des menus, et le passage des param` etres. Son fonctionnement est d ecrit plus en d etail gr ace aux exemples suivants. Les variables suivantes dans les scripts des modules sont : $this->id Contient lID de la page courante tant que le module est situ e dans le module principal Web ; les modules de la zone Fichiers trouvent ici le chemin courant. $this->CMD Est x ee par t3lib_div::_GP(CMD) et est disponible pour votre propre utilisation. $this->perms_clause Contient une clause SQL WHERE sur la table pages, qui ltre les pages pour lesquelles lutilisateur courant na pas de permission. $this->MOD_MENU Tableau des menus ; son utilisation sera illustr ee par les exemples suivants. $this->MOD_SETTINGS Le tableau pour la conguration des menus. $this->modTScong Les modules TSCong, bas es sur le TSCong des pages et le TSCong Utilisateur. template, smallDoc, mediumDoc, bigDoc Le chier typo3/[Link] contient plusieurs classes pour la restitution des modules. Les diff erentes classes sont cependant toutes des variantes de template, d e` cause du cadre de navigation, les modules nissant des largeurs de sorties, puisque, a tre de largeur plus petite que les modules dans Outils. Par convendans Web doivent e tion, $this->doc dans les modules contient une instance de template, ou dune de ses variantes. Le Kickstarter utilise d ej` a $this->doc dans le code quil g en` ere :
// Ouput page header $this->content.=$this->doc->startPage($LANG->getLL(title)); $this->content.=$this->doc->header($LANG->getLL(title)); $this->content.=$this->doc->spacer(5);

t3lib_BEfunc Cette classe contient des fonctions utiles pour la programmation backend, cest-` a-dire ` la base de donn pour lacc` es a ees, le cache, TSCong, larborescence et lafchage des modules. La fonction de menu est particuli` erement utilis ee. Cette classe, tout comme les deux suivantes, ne sont pas instanci ees, mais leurs fonctions sont appel ees directement :
t3lib_BEfunc::getFuncMenu($this->id, SET[function], $this->MOD_SETTINGS[function], $this->MOD_MENU[function]);

479

7 D eveloppement dextensions

t3lib_div ` votre disposition pour le d La s erie de fonctions t3lib_div est bien s ur aussi a eveloppement dans le backend. t3lib_iconworks Ensemble de fonctions pour la cr eation et la fourniture dic ones ; par exemple :
t3lib_iconWorks::getIconImage(tt_content_search, array(), $BACK_PATH) t3lib_iconworks::getIconImage($table, $row, $BACK_PATH, class="c-recicon" title=".$iconAltText.")

La fonction t3lib_iconWorks::skinImg() d etermine le nom dun chier en fonction dune ic one et dun habillage donn es. Vous devriez aussi utiliser cette fonction pour vos propres ic ones, pour pouvoir habiller librement votre application. ` la documentation sur lAPI Pour les d etails sur les classes de lAPI, r ef erez-vous par exemple a disponible dans lextension ExtDevEval.

7.7.3 Modules : script


` ceci : La structure de base dun script de module ressemble habituellement a
unset($MCONF); require ([Link]); require ($BACK_PATH.[Link]); require ($BACK_PATH.[Link]); $LANG->includeLLFile(EXT:user_example/mod1/[Link]); require_once (PATH_t3lib.class.t3lib_scbase.php); $BE_USER->modAccess($MCONF,1); class user_example_module1 extends t3lib_SCbase { function menuConfig() { } function main() { } function printContent() { }
}

$SOBE = t3lib_div::makeInstance(user_example_module1); $SOBE->init(); $SOBE->main(); $SOBE->printContent();

On int` egre dabord le chier [Link]. Comme nous lavons d ej` a mentionn e, [Link] ne contient pas seulement de linformation importante pour le backend, mais aussi la variable 480

7.7 Programmation du backend : principes

$BACK_PATH, qui sp ecie le chemin relatif au r epertoire typo3/, auquel on fait fr equemment r ef erence dans le script. Ensuite, le chier [Link] du r epertoire typo3/ est int egr e. Ce chier initialise lenvironnement `e tre int du module et est absolument indispensable. Le prochain chier a egr e, [Link], contient une biblioth` eque pour lafchage du module. ` pr A esent, lobjet pour la gestion des langues est disponible dans $LANG. La d enition des langues pour le module est charg ee et initialis ee. tend La classe de base du module t3lib_SCbase est alors int egr ee. Le module est une classe qui e t3lib_SCbase. La m ethode menuCong() d enit les menus et les options pour le module. Elle est appel ee par la classe de base. ` la n du script, une instance de la classe de module est cr e et appel Pour nir, a ee ee. Cest aussi la raison pour laquelle on les appelle SC (t3lib_SCbase), cest-` a-dire les classes de script (Script Classes) : elles contiennent la classe du module, mais cette classe est aussi appel ee. Le nom $SOBE est obligatoire car des biblioth` eques externes peuvent y faire r ef erence.

7.7.4 Module principal


Il est aussi possible de cr eer, par exemple via le Kickstarter, un nouveau module principal tel que Web, Utilisateur ou Outils. Cest support e par le Kickstarter. La cr eation dun module principal avec un cadre de navigation (tel que Web ou Fichier) nest pas encore support ee par le Kickstarter, mais est possible. Voici un exemple du module principal Media et du module Media Liste. mod1/[Link]
define(TYPO3_MOD_PATH, ../typo3conf/ext/dam/mod1/); $BACK_PATH=../../../../typo3/; $MCONF[name]=txdamM1; $MCONF[access]=user,group; $MCONF[navFrameScript]=alt_dam_navframe.php; $MCONF[defaultMod]=list;

` appeler dans le cadre de navigation. Le cadre La cl e navFrameScript d enit le script a par le backend. lui-m eme est cr ee mod1/list/[Link]
define(TYPO3_MOD_PATH, ../typo3conf/ext/dam/mod1/list/); $BACK_PATH=../../../../../typo3/; $MCONF[name]=txdamM1_list; $MCONF[access]=group,user; $MCONF[script]=[Link];

ext_tables.php
t3lib_extMgm::addModule(txdamM1, , , t3lib_extMgm::extPath(dam).mod1/); t3lib_extMgm::addModule(txdamM1, list, , t3lib_extMgm::extPath(dam).mod1/list/);

481

7 D eveloppement dextensions

Cest ici quon d eclare les modules au syst` eme : dabord le module principal txdamM1 et ensuite le module list en tant que sous-module.

7.7.5 Fonctions de sous-modules


Plusieurs modules tels que Web Fonctions ou Utilisateur Centre de t aches offrent la tre des extenpossibilit e dincorporer des fonctions. Ces fonctions de sous-modules peuvent e sions s epar ees. Apr` es linstallation, elles safchent dans le menu du module correspondant. Certaines fonctions de sous-module sont discut ees plus en d etail dans lexemple Web Fonctions Assistants.

7.8 Programmation backend : exemple


Les exemples suivants donnent un aperc u des possibilit es existantes permettant dajouter de nouvelles fonctionnalit es au backend. Pour vos propres projets, le Kickstarter vous fournit d ej` a un cadre ad equat. Si certaines fonctions manquent, consultez dautres modules pour voir si vous pouvez y retrouver des fonctions similaires. Si vous cliquez sur le bouton droit de votre souris dans le cadre du module, la plupart des navigateurs vous donneront des informations sur lURL s electionn ee, ce qui doit vous tudier indiquer le r epertoire dans lequel se trouve le script du module. Vous pouvez d` es lors e le code source de ce module. t La version 3.8 de TYPO3 a e e utilis ee pour les exemples backend, comme ce fut le cas pour les exemples frontend.

7.8.1 Outils Derni` eres modications


Le premier exemple de programmation backend est un module qui afche les derni` eres modications apport ees aux pages. Seuls les administrateurs auront acc` es au module dans Outils. ` Ils auront quelques options dafchage sous la forme dun menu de s election et dune case a cocher. De plus, les enregistrements et les pays sont afch es avec des liens qui vous redirigent respectivement vers le module des pages ou vers le formulaire de modication de lenregistrement.
Figure 7.39: Le module Derni` eres modications

482

7.8 Programmation backend : exemple

On cr ee dabord une extension en tant que module dans le Kickstarter. Le module est sauv e sous Tools et loption Admin-only access ! est activ ee.
Figure 7.40: Cr eation du module avec lextension Kickstarter

tre activ Le module est rapidement congur e puisque seules quelques options doivent e ees. Le Kickstarter cr ee les chiers suivants :
ext_emconf.php ext_icon.gif ext_tables.php mod1/ [Link] [Link] [Link] [Link] locallang_mod.php [Link]

Le module est d eclar e au syst` eme dans le chier ext_tables.php.


t3lib_extMgm::addModule(tools, urecentchangesM1, , t3lib_extMgm::extPath($_EXTKEY).mod1/);

et install Le chier mod1/[Link] contient le module. Si le module vient d etre cr ee e, il ` la gure 7.41. produit d ej` a lafchage par d efaut repris a Dans le chier [Link] se trouve d ej` a la structure de base du module. Un menu et quelques t exemples dafchage ont d ej` ae e g en er es. Ci-dessous, vous retrouvez le code du module termin e. Il est recommand e de cr eer le module ` via le Kickstarter, pour que vous puissiez voir les diff erences. Le concept du module consiste a s electionner linformation de la table sys_log qui fournit les d etails sur les pages et les enregis galement trements r ecemment modi es, et qui les afchent dans une table. Vous y trouverez e 483

7 D eveloppement dextensions

dautres informations telles que les ic ones, les titres, le rootline, et laide contextuelle avec les ID.
Figure 7.41: Afchage du module apr` es sa cr eation par le Kickstarter

En premier lieu, le module est initialis e par [Link]. Par opposition au Kickstarter, aucun changement nest ici n ecessaire.
// DEFAULT initialization of a module [BEGIN] unset($MCONF); require ([Link]); require ($BACK_PATH.[Link]); require ($BACK_PATH.[Link]); // Include locallang file for module $LANG->includeLLFile(EXT:user_recentchanges/mod1/[Link]); // Include module base class require_once (PATH_t3lib.class.t3lib_scbase.php); // This checks permissions // and exits if the users has no permission for entry. $BE_USER->modAccess($MCONF,1); // DEFAULT initialization of a module [END] class user_recentchanges_module1 extends t3lib_SCbase {

La premi` ere m ethode de la classe du module surcharge menuCong() de t3lib_SCbase. Les d enitions de tous les menus et des options du module sont situ ees dans $this->MOD_MENU[]. Typiquement, la cl e function contient la d enition du menu principal, qui est g en e ralement restitu e sous forme dun champ de menu de s election. Le Kickstarter la d ej` a cr ee ` titre dexemple. Les options pour afcher uniquement les nouveaux contenus, les contenus a ` la fois doivent e tre inclus dans le menu principal du module. Le tableau modi es ou les deux a de menu est rempli par les cl es correspondantes.
/** * Adds items to the ->MOD_MENU array. * Used for the function menu selector.

484

7.8 Programmation backend : exemple


* * @return void */ function menuConfig() { global $LANG; $this->MOD_MENU = Array ( function => Array ( newAndUpdated => $LANG->getLL(newAndUpdated), updated => $LANG->getLL(updated), new => $LANG->getLL(new), ), showRootline => true, ); parent::menuConfig();
}

l Les textes des e ements de menu sont traduits vers les langues de lutilisateur via $LANG ->getLL(), si la langue existe. Les d enitions dans les diff erentes langues se trouvent dans mod1/[Link] :
$LOCAL_LANG = Array ( default => Array ( title => Recent changes, ... fr => Array ( title => Derni` eres modifications, showRootline => Afficher rootline, new => Contenu cr e e, updated => Contenu modifi e, newAndUpdated => Contenu cr ee et modifi e, new_header => Dernier contenu cr e e:, updated_header => Dernier contenu modifi e:, newAndUpdated_header => Dernier contenu cr ee et modifi e:, admins_only => Module r eserv e aux admins!, ),

Pour des raisons de simplicit e et de clart e, et m eme si ce nest pas n ecessaire, nous avons utilis e la m eme cl e pour le menu et pour la d enition des langues. Retour au code du module. Outre function, $this->MOD_MENU contient aussi lentr ee show` cocher. Pour nir, parent::meRootline, une valeur bool eenne qui est utilis ee comme case a nuCong() est appel e pour terminer la conguration du menu. La m ethode suivante est main(), la m ethode principale du script du module. Le nom r epond ` une convention, m a eme si ce nest pas obligatoire. Quelques initialisations du module sont effectu ees ici. Lafchage du module est g en er e, par souci de clart e, par moduleContent(), qui ` lint ne se situe pas a erieur de cette m ethode.
/** * Main function of the module. Write the content to $this->content * * @return void

485

7 D eveloppement dextensions
*/ function main() { global $BE_USER,$LANG,$BACK_PATH;

Tout dabord, on v erie si lutilisateur a bien les droits dadministrateur.


if ($BE_USER->user[admin]) {

par le Kickstarter, cette ligne est un peu diff Dans le code cr ee erente. De plus, on y initialise ` la page courante s $this->pageinfo, qui se r ef` ere a electionn ee. Le code Kickstarter est mis en tre utilis place pour e e dans le module Web. Mais, puisque le module fonctionne dans le module principal Outils, dans lequel le concept de page s electionn ee na pas de sens, cette partie du t code a e e supprim ee. dans $this->doc (cf. secEnsuite, un objet template ou plus pr ecis ement bigDoc est cr ee tion 7.7.2).
// Init the module doc $this->doc = t3lib_div::makeInstance(bigDoc); $this->doc->backPath = $BACK_PATH; $this->doc->form = <form action="" method="POST">;

t ` la fonction des Le code JavaScript qui suit a e e g en er e par le Kickstarter et est n ecessaire a menus :
// JavaScript, used for menus $this->doc->JScode = $this->doc->wrapScriptTags( function jumpToUrl(URL) { [Link] = URL; } );

` afcher est initialis La page HTML a ee via lobjet template, et le titre du module est afch e. Le tout est enregistr e dans la variable $this->content.
// Ouput page header $this->content.= $this->doc->startPage($LANG->getLL(title)); $this->content.= $this->doc->header($LANG->getLL(title)); $this->content.= $this->doc->spacer(5);

. On utilise a ` cette n les fonctions de t3lib_BEfunc. On passe $this->id en Le menu est cr ee ` ces fonctions. Pour les modules de la zone Web, cette variable contient lID de la argument a page s electionn ee. Cette derni` ere est envoy ee au script courant par la fonction de menu via le param` etre id, qui est reconnu par t3lib_SCbase. Ceci na bien s ur pas de sens dans un module de la zone Outils, puisque larborescence nest pas disponible dans ce cas, et que le module est suppos e afcher uniquement les pages qui ont chang e. Nous laissons n eanmoins ce code, tre utile si le module devait e tre plac puisquil ne d erange en rien, et quil pourrait e e plus tard dans la zone Web.
// Output menu $menu = array();

486

7.8 Programmation backend : exemple


$menu[] = t3lib_BEfunc::getFuncMenu($this->id, SET[function], $this->MOD_SETTINGS[function], $this->MOD_MENU[function]);

SET[function] d enit le param` etre qui permet de passer la valeur du menu au script du module. $this->MOD_SETTINGS[function] contient la valeur courante et $this->MOD_MENU [function] est la d enition du menu sous forme dun tableau qui contient les valeurs et les textes que lutilisateur visualisera. En voici le comportement : un menu de s election est , qui, gr ` la fonction JavaScript jumpToUrl() ajout cr ee ace a ee ci-dessus, envoie la valeur du menu s electionn e par lutilisateur au script du module avec le param` etre SET[function]. Le valu param` etre SET est e e par la classe de base du module t3lib_SCbase, compar e avec $this ->MOD_MENU[] et sauvegard e dans $this->MOD_SETTINGS[]. Pour nir, cette conguration du module est enregistr ee dans la base de donn ees, pour qu` a la prochaine visite, lutilisateur retrouve le module dans l etat o` u il la laiss e. ` cocher se comporte de la m La case a eme mani` ere.
$menu[] = t3lib_BEfunc::getFuncCheck($this->id, SET[showRootline], $this->MOD_SETTINGS[showRootline]). . $LANG->getLL(showRootline); $this->content.=$this->doc->section(, implode(<br />,$menu)); $this->content.=$this->doc->divider(5);

en appelant la m Le contenu du module est cr ee ethode moduleContent().


// Render content: $this->moduleContent();

Pour nir, lic one de raccourci est afch ee.


// ShortCut if ($BE_USER->mayMakeShortcut()) { $this->content.= $this->doc->spacer(20). $this->doc->section(, $this->doc->makeShortcutIcon(id, implode(,,array_keys($this->MOD_MENU)), $this->MCONF[name]) ); } $this->content.= $this->doc->spacer(10);

Si lutilisateur nest pas administrateur, il ou elle rec oit lavertissement suivant :


} else {

// If no access: output message $this->doc = t3lib_div::makeInstance(bigDoc); $this->doc->backPath = $BACK_PATH;

487

7 D eveloppement dextensions
$this->doc->startPage($LANG->getLL(title)); $this->doc->header($LANG->getLL(title)); $this->doc->spacer(5); $this->doc->section(, $LANG->getLL(admins_only)); $this->content.= $this->doc->spacer(10);
} }

$this->content.= $this->content.= $this->content.= $this->content.=

t e par le Kickstarter. Lorsquelle est appel La m ethode suivante, printContent(), a e e cr ee ee, la ` la n du chier. page HTML g en er ee est nalement afch ee, ce qui a lieu a
/** * Prints out the modules HTML code * * @return void */ function printContent() { $this->content.= $this->doc->endPage(); echo $this->content; }

La m ethode moduleContent() est aussi ins er ee par le Kickstarter. Dans de nombreux modules, elle contient une construction de type switch() qui permet dappeler diff erentes fonctions du module au moyen de $this->MOD_SETTINGS[function] ou dautres options. Dans ce cas, la valeur de $this->MOD_SETTINGS[function] est dabord d etermin ee par la m ethode $this ->getRecentChangesTable(). La valeur _header est aussi d enie, de sorte que le texte de lent ete est d etermin e via sa valeur dans [Link].
/** * Generates the module content * * @return void */ function moduleContent() { global $LANG; $mode = $this->MOD_SETTINGS[function]; $content = $this->getRecentChangesTable($mode); $this->content.= $this->doc->section($LANG->getLL($mode._header), $content,0,1);
}

/** * Render the table with recently changed records * * @param string Mode from $this->MOD_SETTINGS[function] * @return string Rendered Table */ function getRecentChangesTable($mode) { global $BACK_PATH, $BE_USER, $LANG, $TCA;

488

7.8 Programmation backend : exemple

dit . En utilisant cette m ethode, le tableau r esultat, reprenant les derni` eres pages e ees, est cr ee Le param` etre $mode pass e en argument d etermine la valeur de la variable $action, qui ltre ` la requ les entr ees de la table sys_log gr ace a ete suivante :
// Set sys_log actions depending on selected mode if ($mode==new) { $action = 1; } elseif ($mode==updated) { $action = 2; } else { $action = 1,2; } // Query sys_log for non-deleted pages only $res = $GLOBALS[TYPO3_DB]->exec_SELECTquery( sys_log.*, sys_log,pages, [Link]=sys_log.event_pid. AND sys_log.event_pid>0. AND sys_log.type=1. AND sys_log.action IN (.$action.). AND sys_log.error=0. t3lib_BEfunc::deleteClause(pages), , tstamp DESC, 40);

Pour lafchage du tableau, on utilise la m ethode $this->doc->table(), qui restitue un tableau en se basant sur la d enition suivante. Le tableau $table est utilis e pour contenir les donn ees de la table.
// init table layout $tableLayout = array ( table => array (<table border="0" cellpadding="1" cellspacing ="1" class="typo3-recent-edited">, </table>), defRow => array ( tr => array(<tr class="bgColor4">,</tr>), defCol => Array(<td valign="top">,</td>) ) ); $table = array(); $tr = 0;

tre restitu Dans la boucle suivante, les entr ees de la table sys_log sont trait ees pour e ees dans le tableau.
while($logRow = $GLOBALS[TYPO3_DB]->sql_fetch_assoc($res)) { $page_id = $logRow[event_pid]; $pageRow = t3lib_BEfunc::getRecord(pages, $page_id);

489

7 D eveloppement dextensions

` partir de lID dans la table sys_log. Tout dabord, on retrouve lenregistrement de la page a ` afcher, un lien est g Pour la premi` ere colonne du tableau a en er e avec lic one par la m ethode getItemFromRecord() pour l edition de la page ($contentPageLink). Pour la derni` ere colonne, lheure de la derni` ere modication ($contentAge) est g en er ee.
if (is_array($pageRow)) { // Create output item for pages record $contentPageLink = $this->getItemFromRecord(pages, $pageRow); // Create output text describing the age $contentAge = t3lib_BEfunc::dateTimeAge($logRow[tstamp], 1);

s. Ensuite, les d etails concernant l el ement modi e de la page sont cr ee


$contentElementLink = ; $contentUser = ;

// Fetch record if table is not "pages" if(!($logRow[tablename]==pages)) { $elementRow = t3lib_BEfunc::getRecord( $logRow[tablename], $logRow[recuid]);

Lenregistrement sys_log contient de linformation sur la table et luid de lenregistrement modi e. On fait une recherche sur cet uid ; sil existe, un lien pour l edition du record est cr ee dans la seconde colonne ($contentElementLink).
// If record is deleted continue with next log entry if (!is_array($elementRow)) { continue; } // Create output item for non pages record if(!($logRow[tablename]==pages)) { $contentElementLink = $this->getItemFromRecord( $logRow[tablename], $elementRow); }
}

` propos de lutilisateur qui est intervenu sur la page. La table contient aussi de linformation a On s electionne dabord lenregistrement depuis la table be_users et ensuite, un lien pour son dition est cr ($contentUser). e ee
// Create user item $userRow = t3lib_BEfunc::getRecord(be_users, $logRow[userid]); if(is_array($userRow)) { $contentUser = htmlspecialchars($userRow[username]. (.$userRow[uid].)); $contentUser = $this->wrapEditLink($contentUser, be_users, $userRow[uid]);

490

7.8 Programmation backend : exemple

Si lutilisateur est lutilisateur courant, une couleur darri` ere-fond diff erente est utilis ee dans vidence le fait que cette le tableau $tableLayout pour la ligne en question, pour mettre en e t page a e e modi ee par lutilisateur lui-m eme.
// Use different row color // if record was edited by current user if ($userRow[uid]==$BE_USER->user[uid]) { $tableLayout[$tr][tr] = array( <tr class="bgColor5">, </tr>); }
}

crites dans le tableau $table. Apr` Pour nir, les donn ees sont e es la boucle, cest-` a-dire apr` es avoir trait e toutes les entr ees de sys_log, on restitue le tableau avec $this->doc->table(). Vous pourriez bien s ur simplement construire la table HTML par des cha nes de caract` eres cest juste une question de go ut.
// Add row to table $td=0; $table[$tr][$td++] = $contentPageLink; $table[$tr][$td++] = $contentElementLink; $table[$tr][$td++] = $contentUser; $table[$tr][$td++] = $contentAge; $tr++;
} }

// Return rendered table return $this->doc->table($table, $tableLayout);


}

l La m ethode suivante cr ee un e ement denregistrement pour son afchage dans le tableau en fonction du nom de la table et du tableau contenant les donn ees de lenregistrement.
/** * Returns a linked icon with title from a record * * @param string Table name (tt_content,...) * @param array Record array * @return string Rendered icon */ function getItemFromRecord($table, $row) { global $BACK_PATH, $LANG, $TCA, $BE_USER;

. Laide contextuelle Tout dabord, le texte de lattribut title (aide contextuelle) de lic one est cr ee safche si vous positionnez la souris sur lic one. 491

7 D eveloppement dextensions

Figure 7.42: Le module Derni` eres modications termin e

$iconAltText = t3lib_BEfunc::getRecordIconAltText($row, $table); // Prepend table description for non-pages tables if(!($table==pages)) { $iconAltText = $LANG->sl($TCA[$table][ctrl][title]).: . $iconAltText; }

` quelle table il Pour montrer clairement de quel type denregistrement il sagit, cest-` a-dire a appartient, le texte est pr ec ed e du titre de la table, pour autant quil ne sagisse pas de la table pages. Le titre de lenregistrement est alors d etermin e. Les d enitions TCA contiennent de linfor` afcher en tant que titre. Sur base de cette mation sur les champs de la base de donn ees a information, la fonction t3lib_BEfunc::getRecordTitle() d etermine le titre. Aussi longtemps t ` cocher, le chemin de rootline de la page que loption showRootline a e e activ ee via la case a est d eduit et, si n ecessaire, raccourci selon la longueur que lutilisateur a sp eci ee dans Utilisateur Conguration.
// Create record title or rootline for pages // if option is selected if($table==pages AND $this->MOD_SETTINGS[showRootline]) { $elementTitle = t3lib_BEfunc::getRecordPath($row[uid], 1=1, 0); $elementTitle = t3lib_div::fixed_lgd_cs($elementTitle, -($BE_USER->uc[titleLen])); } else { $elementTitle = t3lib_BEfunc::getRecordTitle($table, $row, 1); }

Enn, lic one g en er ee avec le titre est restitu ee avec un lien vers l edition et renvoy ee.
// Create icon for record $elementIcon = t3lib_iconworks::getIconImage($table, $row,

492

7.8 Programmation backend : exemple


$BACK_PATH, class="c-recicon" title=".$iconAltText."); // Return item with edit link return $this->wrapEditLink($elementIcon.$elementTitle, $table, $row[uid]);
}

La derni` ere m ethode du module cr ee un lien qui soit appelle le module des pages (pour les pages) via JavaScript, soit afche directement un enregistrement dans un mode d edition (pour les enregistrements des autres tables).
/** * Wraps an edit link around a string. * Creates a page module link for pages, edit link for other tables. * * @param string The string to be wrapped * @param string Table name (tt_content,...) * @param integer uid of the record * @return string Rendered link */ function wrapEditLink($str, $table, $id) { global $BACK_PATH; if($table==pages) { $editOnClick = "[Link][web]=".$id.";"; $editOnClick.= "[Link](web_layout,1);"; } else { $params = &edit[.$table.][.$id.]=edit; $editOnClick = t3lib_BEfunc::editOnClick($params, $BACK_PATH); } return <a href="#" onclick=".htmlspecialchars($editOnClick).">. $str.</a>;
} }

` partir Comme vous le remarquez, le module des pages est appel e via une fonction JavaScript a t du cadre principal. LID de la page a e e x e pr ealablement, et est pass e au module lorsque ce dernier est appel e. diter un enregistrement est cr avec les param` Le lien pour e ee etres correspondants par la fonction t3lib_BEfunc::editOnClick(). ` la n du chier, on instancie et on appelle la classe du module. Enn, a
// Make instance: $SOBE = t3lib_div::makeInstance(user_recentchanges_module1); $SOBE->init(); // Include files? foreach($SOBE->include_once as $INC_FILE) $SOBE->main(); $SOBE->printContent();

include_once($INC_FILE);

493

7 D eveloppement dextensions

La structure dun module permet d ecrire facilement des extensions. Il est simple dajouter l tre des e ements de menu ou de nouvelles options. Par exemple, une vue d etaill ee pourrait e tre appel d evelopp ee avec une m ethode s epar ee et e ee depuis moduleContent().

7.8.2 Fonction de sous-module Web Fonctions Assistants


TYPO3 propose la classe t3lib_extobjbase comme base des fonctions de sous-modules. La ` cette comclasse de base t3lib_SCbase contient une interface vers t3lib_extobjbase. Gr ace a binaison, il est relativement ais e de construire des modules qui comprennent des fonctions de sous-modules et les sous-modules eux-m emes. tre incorpor Dans lexemple ci-dessous, une fonction de sous-module va e ee dans Web Fonctions Assistants. La fonction va marquer de mani` ere r ecursive les pages pour activer ou d esactiver la recherche. Cette option, appel ee Sans recherche, est normalement disponible dans len-t ete de la page.
Figure 7.43: Nouvel assistant en tant que sous-module de Web Fonctions

Lafchage de la fonction de sous-module d emarre uniquement avec Activer la recherche sur les pages, puisque cette fonction est incorpor ee dans Fonctions Assistants. Chaque module qui permet les fonctions de module fournit, si n ecessaire, un cadre ou des fonctions de base, qui peuvent prendre plusieurs formes, selon la fonctionnalit e du module. Dans ce cas, le module afche un menu de s election de fonctions de sous-module, ainsi quun en-t ete avec la page courante que lutilisateur a s electionn ee via larborescence du cadre de navigation dans le module Web. Cette page est la page de d epart des assistants. 494

7.8 Programmation backend : exemple

` partir La nouvelle fonction de sous-module utilise la page courante comme point de d epart a duquel on parcourt larborescence. Le nombre de niveaux de larborescence qui seront par tre sp ` un champ de s courus peut e eci e par lutilisateur gr ace a election. Les pages sont aussi afch ees sous forme darborescence et leur statut Sans recherche est indiqu e pour chacune delles. Les pages pour lesquelles lutilisateur na pas le droit de changer le statut sont mises en surbrillance. Pour nir, il ou elle peut modier le statut de toutes les pages afch ees avec seulement deux boutons.
Figure 7.44: Cr eation dune fonction de sous-module Web Fonctions Assistant par le Kickstarter

Puisque le Kickstarter supporte directement les fonctions de sous-module dans Web Fonctions Assistants, un cadre de base est rapidement mis en place. Except es le composant pour le franc ais, la langue suppl ementaire, et le composant General e par loption info, lextension contient uniquement une fonction de sous-module qui est cr ee Integrate in existing Modules. Le Kickstarter g en` ere les chiers suivants :
ext_emconf.php ext_icon.gif ext_tables.php locallang_db.php modfunc1/ class.user_setsearch_modfunc1.php [Link]

Les chiers locallang contiennent les diff erentes langues, comme dhabitude. Dans le chier ext_tables.php, la fonction de sous-module est d eclar ee : 495

7 D eveloppement dextensions
t3lib_extMgm::insertModuleFunction( web_func, user_setsearch_modfunc1, t3lib_extMgm::extPath($_EXTKEY). modfunc1/class.user_setsearch_modfunc1.php, LLL:EXT:user_setsearch/locallang_db.php:moduleFunction.user_setsearc h_modfunc1, wiz );

dans class.user_setsearch_modfunc1.php un bout de code exemple dans Le Kickstarter a cr ee t ` cocher. lequel une option de menu a e e introduite et afch ee en tant que case a
require_once(PATH_t3lib.class.t3lib_extobjbase.php); class user_setsearch_modfunc1 extends t3lib_extobjbase { function modMenu() { global $LANG; return Array ( user_setsearch_modfunc1_check => , );
}

function main() { global $BE_USER, $LANG, $BACK_PATH; $out.=$this->pObj->doc->spacer(5); $out.=$this->pObj->doc->section($LANG->getLL(title), Dummy content here..., 0, 1); $menu=array(); $menu[]=t3lib_BEfunc::getFuncCheck($this->pObj->id, SET[user_setsearch_modfunc1_check], $this->pObj->MOD_SETTINGS[user_setsearch_modfunc1_check]). $LANG->getLL(checklabel); $out.=$this->pObj->doc->spacer(5); $out.=$this->pObj->doc->section(Menu,implode( - ,$menu),0,1); return $out;
} }

Une fonction de sous-module est une extension de t3lib_extobjbase. Les fonctions de sousmodule sont instanci ees et initialis ees par le module ou par la classe t3lib_SCbase. Par cons equent, les fonctions de sous-module ne peuvent normalement contenir que les m ethodes modMenu() et main(). Si la fonction de sous-module na pas ses propres options de menu qui tre enregistr doivent e ees dans la conguration du module, alors la m ethode modMenu() nest pas n ecessaire. La m ethode main() est appel ee par le module parent et doit renvoyer le code HTML pour la fonction de sous-module. Le code HTML est normalement g en er e dans les modules backend par linstance de la classe template (typo3/[Link]), disponible dans le module 496

7.8 Programmation backend : exemple

via $this->doc. Puisque lobjet du module parent est disponible dans la fonction de sous` lobjet template par $this->pObj->doc. Il sagit de la module via $this->pObj, on acc` ede a diff erence principale entre les fonctions de sous-modules, les modules et les sous-modules. ` modier. La classe t3lib_pageTree La fonction est suppos ee afcher larborescence des pages a ` cet effet. Mais elle n d ej` a disponible est utilis ee a ecessite d etre quelque peu modi ee et tendue. Puisque lextension, de par sa cl e e dextension, a comme espace de nommage user_ setsearch, la classe qui en d erive est nomm ee user_setsearch_pageTree.
require_once(PATH_t3lib.class.t3lib_pagetree.php); /** * local version of the page tree * which points the title link to the current script * * @author Ren e Fritz <[Link]@[Link]> */ class user_setsearch_pageTree extends t3lib_pageTree { function wrapTitle($title,$v) { $aOnClick = return jumpToUrl(\.$this->thisScript.?id=. $v[uid].\,this);; return <a href="#" onclick=".htmlspecialchars($aOnClick).">. $title.</a>; } }

Seule la m ethode wrapTitle() est modi ee pour cr eer un lien appropri e vers le titre de la page. En cliquant sur le titre de la page, lutilisateur d etermine aussi la page de d epart lorsque larborescence est afch ee. Pour ce faire, le script du module parent est appel e via le param` etre id avec luid de la page comme valeur. Le param` etre id est standard pour les modules Web, il est transf er e par larborescence au cadre de navigation. La classe de module t3lib_SCbase reconna t ce param` etre et lenregistre dans la variable $this->id. De cette fac on, lID est aussi disponible dans la fonction de sous-module via $this->pObj->id. La classe de fonction de sous-module, comme nous lavons d ej` a mentionn e, est une extension de t3lib_extobjbase. Les variables requises sont d enies dans len-t ete de la classe.
require_once(PATH_t3lib.class.t3lib_extobjbase.php); /** * Creates the "set searchable" wizard * * @author Ren e Fritz <[Link]@[Link]> */ class user_setsearch_modfunc1 extends t3lib_extobjbase { /** * Page tree object * @see t3lib_pageTree */ var $tree; /**

497

7 D eveloppement dextensions
* The current target script ([Link]) */ var $thisScript;

Le menu de s election d eterminant le nombre de niveaux dans larborescence des pages est d eni dans la m ethode modMenu() et est renvoy e dans un tableau. Ce dernier est associ e au tableau du module $MOD_MENU et ses valeurs sont automatiquement enregistr ees avec la conguration du module. On a d ej` a pr evu la traduction du mot levels qui est utilis e ici.
/** * Adds menu items: Levels menu * * @return array * @ignore */ function modMenu() { global $LANG; $levelsLabel = $LANG->sL( LLL:EXT:lang/locallang_mod_web_perm.php:levels); return array( user_setsearch_modfunc1_depth => array( 1 => 1 .$levelsLabel, 2 => 2 .$levelsLabel, 3 => 3 .$levelsLabel, 4 => 4 .$levelsLabel, 10 => 10 .$levelsLabel ) );
}

La m ethode principale est appel ee par le module parent et renvoie le code HTML.
/** * Main function creating the content for the module. * * @return string HTML content for the module, actually a "section" * made through the parent object in $this->pObj */ function main() { global $BE_USER,$LANG,$BACK_PATH; $this->thisScript = basename(PATH_thisScript);

` Le nom du script du module parent est enregistr e dans $this->thisScript, car il sera utilis ea plusieurs reprises. Ensuite, on appelle $this->getPageTree(). Cette m ethode, qui sera d ecrite plus tard, initialise larborescence.
$this->getPageTree(); $out = ;

498

7.8 Programmation backend : exemple

// title $out.= $this->pObj->doc->spacer(5); $out.= $this->pObj->doc->section($LANG->getLL(title),,0,1);

La variable $out accumule le r esultat HTML. On afche dabord le titre de cette fonction de sous-module. Le titre est d eni dans le chier [Link] et est automatiquement lu lors de linitialisation de la fonction de sous-module. ` d Le menu de s election servant a eterminer le nombre de niveaux dans larborescence est repris ci-dessous. La fonction t3lib_BEfunc::getFuncMenu() cr ee un menu en se basant sur les param` etres GET/POST de SET[]. La classe de base du module t3lib_SCbase reconna t tous les param` etres pass es par SET[] et les compare avec la conguration du module, disponible dans MOD_SETTINGS. De cette fac on, le module lui-m eme ne se soucie pas de lenregistrement des tre de toute mani` options du module. Le pr exe correct (user_setsearch_modfunc1) doit e ere viter les collusions avec dautres extensions. utilis e pour e
// depth menu $menu = $LANG->sL(LLL:EXT:lang/locallang_mod_web_perm.php:Depth). : . t3lib_BEfunc::getFuncMenu($this->pObj->id, SET[user_setsearch_modfunc1_depth], $this->pObj->MOD_SETTINGS[user_setsearch_modfunc1_depth], $this->pObj->MOD_MENU[user_setsearch_modfunc1_depth]); $out.= $this->pObj->doc->spacer(5); $out.= $this->pObj->doc->section(,$menu,0,1);

e par la m Ensuite, larborescence cr ee ethode showPageTree() est afch ee.


// output page tree $out.= $this->pObj->doc->spacer(10); $out.= $this->pObj->doc->section(,$this->showPageTree(),0,1);

tre Puisque le module parent a d ej` a ins er e la balise <form>, cette derni` ere doit dabord e referm ee, puisquune autre URL est requise pour sp ecier laction de cette fonction de sousmodule.
// new form (close old) $out.= </form>; $out.= $this->pObj->doc->spacer(10);

` cocher Sans reDans le sous-module, on reprend seulement les ID des pages dont la case a tre modi cherche doit e ee. La modication de cette valeur est effectu ee par le TCE (TYPO3 Core Engine), qui est disponible pour les modules dans le script typo3/tce_db.php. Une nouvelle balise <form> est ins er ee avec tce_db.php comme cible.
// call tce_db.php script with the commands $out.= <form action=". $BACK_PATH.tce_db.php" method="POST" name="editform">; $out.= <input type="hidden" name="id" value=". $this->pObj->id.">;

499

7 D eveloppement dextensions

Le script tce_db.php accepte une s erie de commandes qui sont pass ees, dans les lignes qui suivent, en tant qu el ements cach es. Tout dabord, lURL de redirection est sp eci ee par redirect. Il sagit en fait du module parent dont le nom est d ej` a pr esent dans $this->thisScript. La ` partir du r constante TYPO3_MOD_PATH d enit le chemin relatif du script a epertoire typo3/ o` u se situe tce_db.php.
$out.= <input type="hidden" name="redirect" value=". TYPO3_MOD_PATH.$this->thisScript.?id=.$this->pObj->id.">;

De cette mani` ere, un renvoi vers le script appelant est fait via une redirection, sans que lutili` tce_db.php. sateur ne remarque lappel a ` pr ` cocher Sans Nous consid erons a esent la commande pour modier la valeur de la case a ` tce_db.php de mettre a ` 1 le champ no_search de recherche. La premi` ere ligne demande a lenregistrement de la table pages dont lID est $this->pObj->id. En th eorie, on doit r ep eter cette action pour chaque page de larborescence s electionn ee ; mais il existe une fac on plus l e egante de proc eder.
$out.= <input type="hidden" name="data[pages][. $this->pObj->id.][no_search]" value="1">;

` la commande mirror, vous demandez a ` tce_db.php deffectuer le m Gr ace a eme changement sur une s erie denregistrements. La m ethode $this->getEditablePagesIDList(), qui est reprise ci-dessous, fournit les ID des pages de larborescence.
$out.= <input type="hidden" name="mirror[pages][. $this->pObj->id.]" value=".$this->getEditablePagesIDList().">;

On donne un nom aux boutons de soumission suivant leur fonction an denvoyer le formu` cocher de 1 a ` 0 dans la balise laire. Un bouton a mis, via JavaScript, la valeur de la case a <input>.
// submit buttons $out.= <input type="submit" name="setSearchable" value=". $LANG->getLL(setSearchable). " onclick="[Link][\data[pages][. $this->pObj->id.][no_search]\].value=0;"> ; $out.= <input type="submit" name="setNonSearchable" value=". $LANG->getLL(setNonSearchable).">; return $out;
}

` propos, la balise <form> nest Pour terminer, le code HTML est renvoy e au module appelant. A pas ferm ee, puisque le module ins erera une ou plusieurs balises pour terminer son propre formulaire. La m ethode getPageTree() utilise la classe user_setsearch_pageTree pour cr eer larborescence. La m ethode $this->pObj->perms_clause est disponible pour d eterminer lexpression SQL qui exclut les pages pour lesquelles lutilisateur na pas de permission.
/** * Reads the page tree

500

7.8 Programmation backend : exemple


* * @return void */ function getPageTree() { global $BE_USER,$LANG,$BACK_PATH; $this->tree = t3lib_div::makeInstance(user_setsearch_pageTree); $this->tree->init( AND .$this->pObj->perms_clause);

En sp eciant setRecs=true, les enregistrements des pages sont rassembl es par lobjet et sont disponibles par apr` es. makeHTML=true active la g en eration de larborescence sous forme de code HTML. Le param` etre $this->thisScript est transf er e puisque wrapTitle() doit cr eer un hyperlien.
$this->tree->setRecs = true; $this->tree->makeHTML = true; $this->tree->thisScript = $this->thisScript;

tre disponibles par On ajoute alors lensemble des champs de la base de donn ees qui devront e la suite.
$this->tree->addField(no_search); $this->tree->addField(perms_userid,1); $this->tree->addField(perms_groupid,1); $this->tree->addField(perms_user,1); $this->tree->addField(perms_group,1); $this->tree->addField(perms_everybody,1); // Creating top icon; the current page $HTML = t3lib_iconWorks::getIconImage(pages, $this->pObj->pageinfo, $BACK_PATH, align="top"); $this->tree->tree[] = array(row=>$this->pObj->pageinfo, HTML=>$HTML); // read the page data and create the tree $this->tree->getTree($this->pObj->id, $this->pObj->MOD_SETTINGS[user_setsearch_modfunc1_depth]);
}

Avant que larborescence ne soit nalement lue par getTree(), la racine, cest-` a-dire la page tre d courante, doit e etermin ee. La m ethode showPageTree() cr ee la table avec une arborescence et lafchage du statut. Bien que la classe t3lib_pageTree ne contienne pas la m ethode permettant dafcher larborescence ` cocher doit e tre reprise dans le tableau compl` ete en HTML, on ne lutilise pas ici, car la case a ` c afch ea ot e de la page. Il est assez normal d elaborer le code HTML manuellement dans les modules. Mais il existe un certain nombre de fonctions dans t3lib_BEfunc ou dans lobjet template (->doc) qui peuvent tre utiles. t3lib_BEfunc::getFuncMenu() ou ->doc->section() ont d t vous e ej` ae e donn ees par comme exemple. Dans cette m ethode, le tableau de larborescence des pages est cr ee ->doc->table(). Comme nous lavons d ej` a dit, vous pouvez placer le tableau directement dans le code. 501

7 D eveloppement dextensions

Tout dabord, la mise en forme du tableau est d enie par le tableau $tableLayout. La balise <table> est d enie, avec defRow contenant les balises pour les lignes et les colonnes 0 et 1. Une couleur darri` ere-fond diff erente est d enie pour la ligne 0 dans la balise <tr>.
/** * Creates the page tree table * * @return string rendered HTML table */ function showPageTree() { global $BE_USER,$LANG,$BACK_PATH; // init table layout $tableLayout = array ( table => array (<table border="0" cellspacing="0" cellpadding="0" id="typo3-tree" style="width:auto;">, </table>), defRow => array ( tr => array(<tr class="bgColor-20">,</tr>), 0 => array(<td nowrap="nowrap">,</td>), 1 => array(<td align="center" style="border-left: solid 1px .$this->pObj->doc->bgColor.">,</td>), ), 0 => array ( tr => array(<tr class="bgColor2">,</tr>), ) );

Le tableau bidimensionnel $table rassemble les contenus du tableau en lignes et en colonnes. Lic one tt_content_search est ins er ee dans la premi` ere ligne. Lic one est normalement utilis ee ` illustrer la colonne indiquant le statut de la pour le type de contenu Recherche et servira a ` cocher Sans recherche. case a
$table = array(); $tr = 0; // add header row $table[$tr][0] =&nbsp;; $table[$tr++][1]=&nbsp;.t3lib_iconWorks::getIconImage( tt_content_search, array(), $BACK_PATH).&nbsp;; // walk through the tree list foreach($this->tree->tree as $pageItem) {

` pr l A esent, chaque e ement de larborescence d ej` a constitu ee est trait e dans une boucle foreach. Les lignes suivantes sp ecient une couleur darri` ere-fond diff erente pour la ligne si lutilisateur na pas de permission d edition (2) pour la page.
// if user has no access use a darker row background if (!($this->admin || $BE_USER->doesUserHaveAccess($pageItem[row],2))) { $tableLayout[$tr][tr] =

502

7.8 Programmation backend : exemple


array(<tr class="bgColor4">,</tr>);
}

// get one page tree item $title = t3lib_div::fixed_lgd( $this->tree->getTitleStr($pageItem[row]), $BE_USER->uc[titleLen]); $treeItem = $pageItem[HTML]. $this->tree->wrapTitle($title,$pageItem[row]);

t , et que lic t Lorsque le titre de la page a e e cr ee one existante a e e ajout ee, le statut de la case ` cocher Sans recherche est d a etermin e : selon la valeur, on utilise le rouge ou le vert.
// get current no_search flag if ($pageItem[row][no_search]) { $searchFlag = <span style="color:red">&times;</span>; } else { $searchFlag = <span style="color:green">&bull;</span>; } // add row to table $table[$tr][0] = $treeItem.&nbsp;&nbsp;; $table[$tr++][1] = $searchFlag;
}

// return rendered table return $this->pObj->doc->table($table, $tableLayout);


}

` la n de la boucle, le tableau est cr par ->doc Ensuite, la ligne du tableau est ajout ee, et a ee ->table() et renvoy e. En utilisant la classe t3lib_pageTree (voir aussi t3lib_browseTree), vous pouvez vous faciliter la t ache si vous devez manipuler des arborescences dans vos propres modules. Dune part, la classe fournit tous les enregistrements et, dautre part, elle donne, si n ecessaire, larborescence pour lafchage. Il manque encore la m ethode getEditablePagesIDList(), qui retourne une liste dID de pages s epar es par des virgules, pour lesquelles lutilisateur a les droits d edition. Cette liste est dress ee ` tce_db.php. dans le formulaire dans la m ethode main() et transf er ee a
/** * Returns a comma separated list of page ids * which are accessible to the user * * @return string pages uid list */ function getEditablePagesIDList() { global $BE_USER, $LANG, $BACK_PATH; $idListArr=array(); foreach ($this->tree->tree as $pageItem) { if ($this->admin || $BE_USER->doesUserHaveAccess($pageItem[row],2)) {

503

7 D eveloppement dextensions
$idListArr[] = $pageItem[row][uid];
} } return implode(,, $idListArr); } }

7.8.3 Menu contextuel


Dans cet exemple, un menu contextuel doit remplir le m eme r ole que les fonctions pr ec edentes de sous-modules, cest-` a-dire permettre ou non la recherche sur la page. Mais cette fois-ci, on ne consid` ere que la page s electionn ee. l On cr ee rapidement une extension dans le Kickstarter pour ins erer un e ement dans le menu contextuel. Comme toujours, lextension est constitu ee par le composant General info, par par les langues suppl ementaires et par les composants pour le menu contextuel, qui est cr ee Clickmenu items.
Figure 7.45: Cr eation dun menu contextuel par le Kickstarter

Le Kickstarter cr ee les chiers suivants :


ext_emconf.php ext_icon.gif ext_tables.php class.user_setsearchcm_cm1.php [Link] cm1/ [Link] cm_icon.gif

504

7.8 Programmation backend : exemple


[Link] [Link] [Link]

Si vous installez et testez cette extension, une nouvelle entr ee appara tra dans le menu contex par le Kickstarter est appel tuel, comme pr evu. Un exemple de module cr ee e. Il est situ e dans le r epertoire cm1/.
Figure 7.46: Nouvelle entr ee afchant le module

Lextension Extra Click Menu Options (extra_page_cm_options) propose pour lessentiel la fonctionnalit e dactivation ou non de la recherche dans une page. Si vous examinez la mani` ere ` la m dont cette fonction est impl ement ee, vous arriverez a ethode DB_changeFlag(), qui se trouve dans typo3/alt_clickmenu.php. La m ethode fournit d ej` a la fonctionnalit e souhait ee pour changer la valeur du champ de la base de donn ees (0 ou 1). La m ethode est relativement dense, et il nest pas n ecessaire de la ` ce stade. Mais il est int comprendre compl` etement a eressant de noter que le m eme concept ` nouveau utilis ` appeler le TCE via le script tce_db.php, pour apporter les est a e, consistant a ` lenregistrement de la page. Cela signie que votre propre module, dans cm1/, modications a tre effac est inutile et peut e e. ` lextension, ce Les ic ones repr esentant les boutons dans le menu contextuel sont ajout ees a qui explique la pr esence des chiers suivants :
button_no_search.gif button_unno_search.gif ext_emconf.php ext_icon.gif ext_tables.php class.user_setsearchcm_cm1.php [Link]

Le chier class.user_setsearchcm_cm1.php contient la classe qui g en` ere la nouvelle entr ee t en grande partie par le Kickstarter. Nous ne mentionnerons ici que du menu. Le code a e e cr ee ses caract eristiques particuli` eres.
class user_setsearchcm_cm1 { /** * Adding options to the context menu. * * @param object The click menu object * @param array Menu items array

505

7 D eveloppement dextensions
* @param string Name of the table of the clicked record item * @param integer uid of the record * @return array Menu items array, processed. */ function main(&$cmObj, $menuItems, $table, $uid) { global $LANG; if (!$cmObj->cmLevel) { if ($cmObj->editOK) { // Returns directly, // because the clicked item was not from the pages table if ($table != pages) return $menuItems; // load the language array $LL = $this->includeLL(); // array for new menu items $localItems = array(); // create new menu item if not disabled if (!in_array(user_setsearchcm_cm1, $cmObj->disabledItems)) {

t On v erie si lentr ee du menu a e e d esactiv ee, ce qui est possible, par exemple, via TSCong.
$flagField = no_search; $title = ($cmObj->rec[$flagField]) ? $LANG->getLLL(searchable,$LL) : $LANG->getLLL(non_searchable,$LL); $localItems[user_setsearchcm_cm1] = $cmObj->DB_changeFlag( pages, $cmObj->rec, $flagField, $title, no_search, t3lib_extMgm::extRelPath(user_setsearchcm));

` la m Gr ace a ethode DB_changeFlag() de lobjet de menu contextuel, on cr ee une entr ee pour le champ no_search de la table pages, qui selon son statut, afche une des ic ones button_* ` 0 ou 1. et contient un lien vers le script tce_db.php, pour modier la valeur du champ a
// add menu item $menuItems = $cmObj->addMenuItems( $menuItems, $localItems, after:hide,before-spacer:delete);

est ins ` la bonne place dans Lentr ee du menu cr ee er ee par la m ethode addMenuItems() a le menu existant, cest-` a-dire apr` es cacher (si celui-ci est disponible) ou avant Supprimer (y compris la ligne de s eparation). 506

7.8 Programmation backend : exemple


} } } return $menuItems; }

Pour nir, le tableau de menu modi e est renvoy e.


/** * Includes the [extDir]/[Link] and * returns the $LOCAL_LANG array found in that file. * * @return array $LOCAL_LANG array */ function includeLL() { include(t3lib_extMgm::extPath(user_setsearchcm).[Link]); return $LOCAL_LANG; }
}

` pr De plus, la classe contient a esent une seule m ethode de lecture du chier des langues. tre ins Bien s ur, de nombreuses entr ees peuvent e er ees par la m ethode pr esent ee plus haut. De m eme, on peut aussi cr eer de nouvelles entr ees dans le second niveau de menu. Lextension Extra Click Menu Options (extra_page_cm_options) peut ici servir dexemple.

7.8.4 Habillages Changer lapparence du backend


tre modi Lapparence du backend peut e ee dans une large mesure. Cest l` a une op eration facile ` r ` la fois les couleurs, les logos a ealiser parce quil existe une interface permettant de changer a et les ic ones du backend. Mais il y a des limites : les mentions de copyright et de la licence GPL, tre modi de m eme que les scripts, ne peuvent pas e es. ` part, vous pouvez certainement utiliser votre propre logo ou celui de Ces restrictions mises a ` la place des images, comme le montre lexemple qui suit. vos clients a
R ef erence

840654

Figure 7.47: Habillage pour le livre

Comme dhabitude, les modications sont apport ees via des extensions. Voici une liste des chiers pour cet exemple dhabillage. Les chiers comportant des modications pour lidentication sont repris en gras. 507

7 D eveloppement dextensions
ext_tables.php stylesheet_post.css backgrounds/ csm_back.png login_back.jpg logoframe_back.png mainmenu_back.png menu_back.jpg topframe_back.png icons/ gfx/ alt_backend_logo.png [Link] [Link] fileicons/ [Link] [Link] [Link] ... i/ _icon_folders.png ... tt_content.png ... loginimages/ [Link] [Link]

Comme vous pouvez le remarquer, il y a ici un seul chier dextension : ext_tables.php. Lha l billage y est d eclar e au syst` eme. Tous les autres chiers sont des feuilles de style, des e ements graphiques, ou des ic ones. ext_tables.php Tout dabord, le chemin dextension relatif au r epertoire du backend (typo3/) est d etermin e vite par la suite plusieurs appels a ` la fonction et sauv e dans une variable temporaire. Cela e t3lib_extMgm::extRelPath().
// Setting the relative path to the extension in temp. variable: $temp_eP = t3lib_extMgm::extRelPath($_EXTKEY);

` TYPO3 via le tableau global $TBE_STYLES. Pour la Toutes les modications sont report ees a ` placer sur page didentication, on sp ecie le chemin o` u sont situ ees les images illustratives a la partie gauche de la page. Si plusieurs images sont disponibles, elles seront s electionn ees au hasard.
// Setting login box image rotation folder: $TBE_STYLES[loginBoxImage_rotationFolder] = $temp_eP.loginimages/;

Tous les chiers graphiques de TYPO3 sont situ es dans le r epertoire t3lib/gfx/. Pour rempla` TYPO3 le r cer les images et les ic ones, vous devez indiquer a epertoire o` u se trouvent les 508

7.8 Programmation backend : exemple

nouvelles images. Si vous mettez en place la structure du r epertoire gfx/ dans le nouveau r epertoire dimages, les chiers remplaceront les chiers originaux de m eme nom se trouvant dans t3lib/gfx/. Cela vaut aussi pour gfx/[Link] qui repr esente le logo safchant en ` droite de la page didentication. haut a
// Setting up auto detection of alternative icons: $TBE_STYLES[skinImgAutoCfg]=array( absDir => t3lib_extMgm::extPath($_EXTKEY).icons/, relDir => $temp_eP.icons/, // Force to look for PNG alternatives... forceFileExtension => png, );

Les autres modications sont faites via des feuilles de style.


// Additional stylesheet. Set AFTER any styles in the document $TBE_STYLES[styleSheetFile_post] = $temp_eP.stylesheet_post.css;

stylesheet_post.css
/* Login Screen */ BODY#typo3-index-php { background-color: #fff; } BODY#typo3-index-php TABLE#loginwrapper { background-color: #C2C9CD; } BODY#typo3-index-php DIV#copyrightnotice { font-size: 11px;} TABLE#logintable INPUT { border: #7B8295 solid 1px; }

` lidentication. Vous Comme nous lavons d ej` a mentionn e, ces possibilit es ne se limitent pas a pouvez changer compl` etement lapparence du backend, comme le montre la gure suivante. Un exemple de refonte du backend est lextension dhabillage skin360 (voir la r ef erence de cette section).
Figure 7.48: Lhabillage livre de TYPO3 dans le backend

509

7 D eveloppement dextensions

7.9 Services
R ef erence

052294

Les services fournissent un moyen de d evelopper des fonctionnalit es dans TYPO3 qui pourront tre e tendues ou remplac e ees. Lextension DAM utilise des services, par exemple, pour lire les donn ees m eta des chiers. Chaque format de chier sauvegarde les donn ees m eta diff eremment (pour autant que cela soit permis). Il est donc n ecessaire d ecrire une fonction ou une classe particuli` ere pour chaque type de chier pour lire ses donn ees, les traiter et les convertir dans un format uniforme. Le DAM devrait alors appeler la fonction concern ee, selon le type de chier. Cette proc edure nest pas tr` es exible, bien s ur. Les nouvelles fonctions, et par cons equent les types de chiers ` jour du DAM. De plus, les tiers correspondants, ne seraient disponibles quapr` es une mise a auraient peu de possibilit es pour de nouveaux d eveloppements. Les services offrent un niveau dabstraction qui contourne ces d esavantages. tes en position dutiliser les classes PHP sans conna Gr ace aux services, vous e tre leur nom. ` ceci : Normalement, la cr eation dune classe dans TYPO3 ressemble a
require_once(t3lib_extMgm::extPath(some_extension). class.tx_some_extension_class.php); $obj = t3lib_div::makeInstance(tx_some_extension_class);

Pour cr eer un objet, vous devez conna tre le chier PHP dans lequel se situe la classe, ainsi que de le nom de la classe. Ce nest pas n ecessaire lorsquon recourt aux services. Un objet est cr ee la mani` ere suivante :
$serviceObj = t3lib_div::makeInstanceService(my_service_type);

La diff erence, cest que la classe est automatiquement s electionn ee et que lobjet correspon sur base du type de service sp dant est cr ee eci e. Les services doivent donc avoir un type. Lextension DAM utilise par exemple les services de type metaExtract pour lire des donn ees m eta. Les services existent pour deux raisons : 1. Libert e de mise en uvre tre install ` plusieurs reprises, et est donc Un service peut e e de diff erentes fac ons, a remplac able. Cest un avantage si la fonctionnalit e est disponible uniquement sur une plate-forme sp ecique, ou via des outils externes. Le service qui est disponible et actif est utilis e automatiquement. Ajout de fonctionnalit es via des extensions ` la cl Chaque service a un type d eni par une cha ne de caract` eres, comparable a e dextension. metaExtract est par exemple un type de service. Chaque type de service a sa propre API : un service qui lit les donn ees m eta comprendra des m ethodes diff erentes ` un service qui e crit des donn par rapport a ees de log.

2.

7.9.1 Mise en uvre des services


Pour utiliser un service, vous devez bien s ur conna tre le type de service et son API. Voici un exemple simple : 510

7.9 Services
if (is_object($serviceObj = t3lib_div::makeInstanceService(textLang))) { $language = $serviceObj->guessLanguage($text); }

On sollicite un objet du type de service textLang et dans le m eme temps, on v erie, via t is_object(), si un objet a bien e e renvoy e. Cette validation est n ecessaire parce quil existe plusieurs raisons pour lesquelles un service serait indisponible : Un service du type souhait e nest pas install e. Le service sest d esactiv e lui-m eme durant lenregistrement sur le syst` eme parce que, par exemple, il ne peut pas fonctionner sur le syst` eme. t ` une v Le service a e e d esactiv e par le syst` eme suite a erication. tre op Durant son installation, le service a lui-m eme v eri e sil pouvait e erationnel, et sest d esactiv e de lui-m eme. Evidemment, il est possible que le service textLang ne soit pas install e sur le syst` eme. Votre ap` son bon fonctionnement. Si n plication d etermine si le service est obligatoire ou non a ecessaire, ` lutilisateur que le service correspondant vous pouvez afcher un message derreur, indiquant a tre install doit e e. Sous-types tre s Les services peuvent e electionn es, non seulement sur base dun type, mais aussi sur base dun sous-type.
$absFile = /tmp/[Link]; $fileType = pdf; $meta = array(); if (is_object($serviceObj = t3lib_div::makeInstanceService(metaExtract, $fileType))) { $serviceObj->setInputFile($absFile, $fileType); if ($serviceObj->process(, , $meta) > 0 AND (is_array($svmeta = $serviceObj->getOutput()))) { $meta = $svmeta; } }

Ici, un service de type metaExtract est s electionn e. Ce service peut traiter le sous-type pdf. De tablissez une biblioth` cette fac on, vous e eque de services qui ont en commun la m eme fonctionnalit e et la m eme API (par exemple, pour lire les donn ees m eta), mais qui sont impl ement ees diff eremment pour chaque sous-type. Les sous-types ne se limitent pas au chier repris dans tre d cet exemple. Ils peuvent, et doivent, e enis pour chaque service qui les contient. Il va de soi quil existe des services sans sous-type. 511

7 D eveloppement dextensions

Services en cascade t dans chaque instance pour e diter les Jusqu` a pr esent, un seul type de service a e e cr ee tre utile dappliquer tous les services disponibles dun certain type a ` donn ees. Mais il peut e vos donn ees, ou simplement dessayer tous les services jusquau moment o` u vous obtenez un r esultat.
$subType = getUserFE; $serviceChain = array(); while (is_object($serviceObj = t3lib_div::makeInstanceService(auth, $subType, $serviceChain))) { // add service key ti list of tried services $serviceChain[] = $serviceObj->getServiceKey(); // initialize service $serviceObj->initAuth($subType, $loginData, $info, $this); // call the service to get a login user if ($tempuser = $serviceObj->getUser()) { // user found, just stop to search break; }
}

Le code est un extrait dun d eveloppement pour utiliser les services didentication des utilisateurs. On peut passer au troisi` eme param` etre de makeInstanceService() une liste de cl es de service (sous forme de tableau ou de liste d el ements s epar es par des virgules). Les services dans cette liste sont par la suite ignor es. De cette mani` ere, vous pouvez appeler les services dun type les t uns apr` es les autres. Dans notre exemple, la boucle sarr ete lorsquun utilisateur a e e trouv e. Appel de services sp eciques tre utile de travailler sans niveau dabstraction, et ne pas devoir s Parfois, il peut e electionner ` partir de makeInstanceService(), mais appeler un service en automatiquement un service a particulier. Cest possible, car un service est enregistr e non seulement via son type, mais aussi ` celui de la cl via la cl e de service, qui joue un r ole analogue a e dextension.
$serviceObj = t3lib_div::makeInstanceService(textExtract) $serviceObj = t3lib_div::makeInstanceService(tx_cctxtextphp_sv1)

Alors quun type de service est sp eci e par textExtract pour lancer une recherche sur le service via la cl correspondant, dans le second exemple, un service sp ecique est cr ee e tx_cctxtextphp_sv1.

7.9.2 D evelopper des services


Le d eveloppement dun service se fait via une extension. Comme dhabitude, nous d emarrons ` fait possible dajouter, au lieu dun service, un plugin ou un dans le Kickstarter. Il est tout a 512

7.9 Services

` une extension. Mais cela na pas beaucoup de sens, puisque pour utiliser ce service, module a tre install le plugin qui le contient doit e e, ce qui nest sans doute pas la meilleure id ee. Choisissez Services comme cat egorie de lextension. Le nom du type de service devrait commencer par le titre de lextension. De cette mani` ere, vous reconnaissez directement quel type de service est inclus. De plus, puisque les extensions sont automatiquement tri ees par le ges` lextentionnaire dextensions, vous avez une vue densemble. Un nouveau service est ajout ea sion avec l el ement de menu Services.
Figure 7.49: Formulaire de d enition dun service dans le Kickstarter

tre saisis dans le formulaire : Les d etails suivants doivent e Title Un titre court et descriptif

Description Courte description de la fonction Service type Type de service, d eni par une cha ne de caract` eres courte ; exemples : metaExtract, textLang 513

7 D eveloppement dextensions

Sub type Liste des sous-types possibles s epar es par des virgules ; ces derniers sont d enis par le type de service. Certains types nont aucun sous-type. Le service metaExtract d enit des formats de chiers (jpg, sxw, pdf, . . .) comme sous-types possibles. Priority On d etermine ici la priorit e. Puisque les services sont s electionn es automatiquement, un m ecanisme doit d ecider quel service sera s electionn e sil en existe plusieurs. Cest tre comprise dans pr ecis ement le r ole de cette valeur. La valeur normale est 50, elle doit e ` 100. Des valeurs au-del` tre sp un intervalle de 0 a a de 100 peuvent e eci ees par apr` es ` des services sp par ladministrateur pour donner une priorit ea eciques. Si vous voulez des services en cascade, cette valeur d etermine lordre dans lequel ils sont parcourus. Dans la plupart des cas, il nest pas n ecessaire de modier la valeur. Quality Une autre valeur sp eciant quel service a priorit e ; pour le service texLang, qui d etermine la langue du texte, Quality d enit le nombre de langues qui sont reconnues par textLang. Si deux services textLang sont install es avec Priority=50, le service qui reconna t le plus de langues sera choisi. Cette valeur d epend donc de la d enition du type de service. Operating system dependency D enit si le service peut fonctionner sur des syst` emes Windows ou UNIX. External programs tre Nom dun programme externe utilis e par ce service ; celui-ci devrait normalement e sp eci e sans chemin, puisque le syst` eme tente de trouver le programme requis par luim eme. s par le Kickstarter a ` partir de lexemple ci-dessus : Les chiers suivants sont cr ee
doc/ wizard_form.dat wizard_form.html sv1/ class.tx_cctxtextphp_sv1.php sv2/ class.tx_cctxtextphp_sv2.php ext_emconf.php ext_icon.gif ext_tables.php

Comme vous le remarquez, cette extension contient deux services dans les r epertoires sv1/ et sv2/. Une m eme extension ne contiendra bien s ur que des services du m eme type. Le service est enregistr e dans le syst` eme par la fonction t3lib_extMgm::addService().
t3lib_extMgm::addService($_EXTKEY, textExtract /* sv type */, tx_cctxtextphp_sv1 /* sv key */, array( title => Text extraction for rtf,

514

7.9 Services
description => This service depends on PHP only., subtype => rtf, available => true, priority => 50, quality => 50, os => , exec => , classFile => t3lib_extMgm::extPath($_EXTKEY). sv1/class.tx_cctxtextphp_sv1.php, className => tx_cctxtextphp_sv1, ) );

Cela correspond, pour lessentiel, aux d etails du formulaire du Kickstarter. Par d efaut, un service enregistr e est disponible si la valeur available de la conguration est ` true. Vous pouvez bien s mise a ur sp ecier ici une expression bool eenne. Si un service d epend ` partir de la version par exemple de la fonction PHP exif_read_data(), disponible seulement a ` la ligne suivante : 4.2.0 de PHP, on peut effectuer une v erication gr ace a
available => function_exists(exif_read_data),

Le service est alors automatiquement d esactiv e si cette fonction nest pas disponible. tendent la classe de base t3lib_svbase et Les classes de service g en er ees par le Kickstarter e contiennent par d efaut les m ethodes init() et process(). La m ethode init() est appel ee par le ` elle, vous initialisez lobjet et vous v syst` eme. Gr ace a eriez si le service est vraiment disponible. Si cest le cas, la valeur true est retourn ee. Si dautres tests ne sont pas n ecessaires, la m ethode tre laiss peut e ee en l etat, puisquelle est incluse dans la classe de base. Lexemple du service textExtract est repris. Ce dernier extrait du texte des documents Word et Excel. La mise en forme est ignor ee. Deux services sont enregistr es dans ext_tables.php.
t3lib_extMgm::addService($_EXTKEY, textExtract /* sv type */, tx_cctxtextexec_sv2a /* sv key */, array( title => Text extraction for Word documents (doc), description => This service depends on catdoc, subtype => doc,dot, available => TRUE, priority => 50, quality => 50, os => , exec => catdoc,

515

7 D eveloppement dextensions
classFile => t3lib_extMgm::extPath($_EXTKEY). sv2/class.tx_cctxtextexec_sv2.php, className => tx_cctxtextexec_sv2, ) );

t3lib_extMgm::addService($_EXTKEY, textExtract /* sv type */, tx_cctxtextexec_sv2b /* sv key */, array( title => Text extraction for Excel documents (xls), description => This service depends on xls2csv, subtype => xls,xlt,xlw, available => TRUE, priority => 50, quality => 50, os => , exec => xls2csv, classFile => t3lib_extMgm::extPath($_EXTKEY). sv2/class.tx_cctxtextexec_sv2.php, className => tx_cctxtextexec_sv2, ) );

Si vous observez la d enition des cl es du service (tx_cctxtextexec_sv2x) et la classe sp eci ee, ` fait vous remarquerez que deux services sont enregistr es avec la m eme classe. Cest tout a permis. Puisque limpl ementation est totalement identique pour les deux services, et puisquils t sont destin es aux m emes types de chiers, ils ont e e d evelopp es en une classe. Les types de chiers doc ou dot pour les documents Word et xls, xlt et xlw pour les documents Excel ont t e e sp eci es en tant que sous-types. La variable exec contient les noms de chiers (catdoc, xls2csv) des outils externes requis pour ce service. Dans la m ethode init() de la classe de base, on v erie si ces programmes sont disponibles. Comme vous le voyez, la classe tx_cctxtextexec_sv2 ne contient que la m ethode process(). Le nom process() est r eserv e par convention. Un service contenant cette m ethode agit comme galement des un ltre : il peut traiter des donn ees transf er ees par la variable $content, et e chiers. Lapplication appelante peut, de la m eme mani` ere, r ecup erer les donn ees en tant que variables ou chiers. On sp ecie la m ethode process() pour tester de la m eme mani` ere les services ltres . Si vous introduisez un nouveau type de service, vous pouvez utiliser votre propre API et vous ne devez pas passer par la m ethode process().
require_once(PATH_t3lib.class.t3lib_svbase.php); class tx_cctxtextexec_sv2 extends t3lib_svbase { var $prefixId = tx_cctxtextexec_sv2; var $scriptRelPath = sv2/class.tx_cctxtextexec_sv2.php; var $extKey = cc_txtextexec;

516

7.9 Services
/** * performs the text extraction * * @param string Content which should be processed to * extract text. * @param string Content type doc, dot, ... * @param array Configuration array * @return boolean */ function process($content=, $type=, $conf=array()) { $this->out = ; if ($content) { $this->setInput ($content, $type); } if($inputFile = $this->getInputFile()) { switch ($this->inputType) { case doc: case dot: $cmd = t3lib_exec::getCommand(catdoc). -d8859-1 ".$inputFile."; $this->out = shell_exec($cmd); break; case xls: case xlt: case xlw: $cmd = t3lib_exec::getCommand(xls2csv). -d8859-1 ".$inputFile."; $this->out = shell_exec($cmd); break; // if that is reached the caller made a mistake default: $this->errorPush(T3_ERR_SV_WRONG_SUBTYPE, Subtype ".$this->inputType." is not supported.); break; } } else { $this->errorPush(T3_ERR_SV_NO_INPUT, No or empty input.); } if ($this->out AND intval($conf[limitOutput])) { $this->out = substr($this->out, 0, intval($conf[limitOutput])); } return $this->getLastError();
} }

517

7 D eveloppement dextensions

Plusieurs fonctions sont disponibles dans la classe de base pour congurer un ltre. Par exem s automatiquement, ou bien des chiers sont lus dans ple, des chiers temporaires sont cr ee une variable, en fonction de la requ ete du service ou de lapplication appelante. Dans cet exemple, les donn ees transf er ees sont enregistr ees, si n ecessaire :
if ($content) { $this->setInput ($content, $type); }

` traiter, on sp Puisque les programmes externes catdoc et xls2csv exigent un chier a ecie ` la ligne suivante un chier avec des donn automatiquement sil a ees. Ce dernier sera cr ee t nexiste pas, parce que les donn ees ont e e enregistr ees via setInputFile(). Si lapplication appelante a enregistr e pr ec edemment un chier avec setInputFile(), ce dernier est utilis e directement. Lapplication appelante peut solliciter une variable avec getOutput() ou un chier avec ` ceci : getOutputFile(). Lappel au service textExtract ressemble a
if (is_object($serviceObj = t3lib_div::makeInstanceService(textExtract, $file_type))) { $serviceObj->setInputFile($absFile, $file_type); $serviceObj->process(, , $conf); $output = $serviceObj->getOutput(); $serviceObj->unlinkTempFiles();
}

Lappel de la m ethode unlinkTempFiles() est important pour supprimer les chiers temporaires ` la fonction du service. Sinon, vous pouvez, gr ace a
... = &t3lib_div::makeInstanceService( ...

` lobjet, qui supprimera ind demander une r ef erence a ependamment les chiers temporaires.

7.9.3 Conguration
Les donn ees de conguration pour les services sont stock ees dans le tableau $TYPO3_CONF_ VARS[SVCONF][serviceType].
$TYPO3_CONF_VARS[SVCONF][serviceType][setup]

Ce tableau peut contenir les donn ees de conguration du script appelant, et nest pas pris en compte par les services eux-m emes.
$TYPO3_CONF_VARS[SVCONF][serviceType][default]

Les valeurs par d efaut pour le type de service sont d enies dans ce tableau. Ces derni` eres sont utilis ees tant que des valeurs particuli` eres ne sont pas d enies par la cl e de service.
$TYPO3_CONF_VARS[SVCONF][serviceType][serviceKey]

La classe de base des services t3lib_svbase fournit une m ethode getServiceCong() pour lire ` partir des tableaux pr les valeurs de conguration a esent es ci-dessus, o` u la conguration avec les cl es de service a priorit e sur la conguration par d efaut. 518

7.10 XCLASS : modication et extension de classe

7.9.4 Introduction dun nouveau type de service


Les diff erents types de services ne sont pas g es. Nimporte qui peut introduire un nouveau type de service. Si vous souhaitez aller dans cette direction, lAPI destin ee au nouveau type tre discut doit e ee avec dautres d eveloppeurs, puisque utiliser un service une seule fois na pas beaucoup de sens. Vous devriez introduire le nouveau service dans la liste de diffusion ` t des d eveloppeurs TYPO3, et si possible inclure un exemple dimpl ementation a el echarger. La ` disposition par la suite. documentation de lAPI et des sous-types est g en eralement mise a

7.10 XCLASS : modication et extension de classe


tre e tendu de mani` Comme nous lavons vu, TYPO3 peut e ere simple gr ace au syst` eme dextensions. Les fonctionnalit es sont encapsul ees dans des plugins ou des modules qui sont faci tre n lement install es. Mais pour des applications plus complexes, il peut e ecessaire dapporter ` TYPO3 lui-m des changements a eme. Cela ne pose pas de probl` eme, bien s ur, puisque le code ` jour en cas de nouvelle source de TYPO3 est disponible. Mais cela rend plus difcile la mise a tre document tre ajout version de TYPO3. Les changements doivent e es pour pouvoir e es plus tard dans la nouvelle version. l ` ce probl` TYPO3 propose les XCLASS comme solution e egante a eme. Le concept des XCLASS permet de modier ou d etendre presque toutes les classes de TYPO3. Supposons que vous ayez besoin dune fonction dans lobjet TypoScript stdWrap pour convertir un entier en mots. Cette fonction sera alors disponible pour tout le syst` eme, et vous pourrez lutiliser partout o` u lobjet TypoScript de type stdWrap est d eni. On trouve rapidement sur Internet un script appropri e de conversion de nombre. La seule ` pr question est a esent de savoir comment lint egrer au mieux dans la fonction stdWrap. Il existe ici plusieurs possibilit es : 1. Int egrer la fonctionnalit e directement dans la fonction stdWrap() dans la classe class. ` jour sont plus tslib_content.php, avec le d esavantage d ej` a mentionn e : les mises a difciles. stdWrap fournit un moyen dint egrer des fonctions utilisateurs. Cest en soi une possibilit e valable et utile. Mais, dans notre exemple, nous voudrions faire directement ` la fonction avec lidentiant userNumToWord. r ef erence a Extension de la m ethode stdWrap dans la classe tslib_content via XCLASS. Cette m e` nos besoins. thode est celle qui r epond le mieux a
R ef erence

745255

2.

3.

Si nous observons la n du chier class.tslib_content.php, nous avons les lignes suivantes :


if (defined(TYPO3_MODE) && $TYPO3_CONF_VARS[TYPO3_MODE][XCLASS][ tslib/class.tslib_content.php]) { include_once($TYPO3_CONF_VARS[TYPO3_MODE][XCLASS][ tslib/class.tslib_content.php]); }

Par cons equent, si la variable 519

7 D eveloppement dextensions
$TYPO3_CONF_VARS[TYPO3 MODE][XCLASS][tslib/[Link] [Link]]

contient le nom dun chier, ce chier sera ins er e par include_once(). Cela signie que nous tendre la classe tslib_content. Presque tous les pouvons ins erer un chier qui peut alors e chiers de TYPO3 contenant une classe, m eme ceux des extensions, comprennent ces lignes ` XCLASS dans les derni` relatives a eres lignes. ` pr ` initialiser la variable pr A esent, il vous reste a esent ee ci-dessus en fonction de vos besoins, et votre script sera int egr e. Cette op eration est r ealis ee dans le chier ext_localconf.php de ` lesprit que TYPO3_MODE est une constante, d votre propre extension. Gardez a enie soit tes dans le frontend ou dans le backend. Dans comme FE, soit comme BE selon que vous e notre exemple frontend, nous devons donc remplacer TYPO3_MODE par FE. ` ceci : Lexemple dextension avec la cl e user_NumToWord ressemble a
doc/ ext_emconf.php ext_icon.gif ext_localconf.php class.ux_tslib_content.php

ext_localconf.php
if (!defined (TYPO3_MODE)) die (Access denied.); $TYPO3_CONF_VARS[FE][XCLASS][tslib/class.tslib_content.php] =t3lib_extMgm::extPath(user_NumToWord).class.ux_tslib_content.php;

class.ux_tslib_content.php
class ux_tslib_cObj extends tslib_cObj { function stdWrap($content,$conf) { // Call the real stdWrap function in the parent class: $content = parent::stdWrap($content,$conf); // Process according to my user-defined property: if ($conf[userNumToWord]) { $content = $this->ux_numToWord($content, $conf[userNumToWord .]); } return $content;
}

function ux_numToWord($content,$conf) { ... return $content; }


}

if (defined(TYPO3_MODE) && $TYPO3_CONF_VARS[TYPO3_MODE][XCLASS][ ext/user_NumToWord/class.ux_tslib_content.php]) { include_once($TYPO3_CONF_VARS[TYPO3_MODE][XCLASS]

520

7.11 TYPO3 et autres langages de programmation


[ext/user_NumToWord/class.ux_tslib_content.php]); }

t Lextension via XCLASS est termin ee. Cependant, si vous avez e e attentif, vous pourriez vous ` la place de tslib_ demander comment le syst` eme sait que ux_tslib_cObj doit etre instanci ea ` t3lib_div::makeInstance(), qui est utilis ` la place de cObj. Cest gr ace a e au sein de TYPO3 a new(). Les derni` eres lignes du chier class.ux_tslib_content.php contiennent le code XCLASS habituel. Il est donc aussi possible d etendre la classe ux_tslib_cObj. La m ethode XCLASS comporte aussi des d esavantages : dune part, seule une XCLASS est pos` fait a ` labri de tout probl` sible par chier, et dautre part, vous n etes pas tout a eme lors dune ` jour de TYPO3, puisque lAPI de la classe e tendue peut avoir chang mise a e. Mais cela reste un moyen utile pour apporter des changements au cur du code source.

7.11 TYPO3 et autres langages de programmation


tre utilis Dautres langages de programmation que PHP peuvent actuellement e es dans une mesure tr` es limit ee avec TYPO3. Alors quil est possible, et m eme courant, pour des langages compil es, de m elanger plusieurs langages de programmation au sein dun projet, cela reste ` un stade exp encore a erimental pour des langages interpr et es. Des extensions exp erimentales PHP existent pour int egrer du JAVA et du .NET dans du code PHP. Inversement, il est aussi ` des objets PHP depuis du code JAVA. Cela signie que des extensions en possible dacc eder a JAVA sont certainement possibles. Mais elles devront int egrer tous les chiers PHP n ecessaires ` une extension. Cela signie quun wrapper PHP sera n a ecessaire pour appeler le code JAVA. En attendant, il est possible, bien s ur, dappeler des programmes externes avec exec() ou des ressources externes en tant que services Web. Mais il ne sagit pas dune int egration compl` ete. Lint egration devient un th` eme de plus en plus important partout dans le monde de linforma` l tique, certainement gr ace a emergence, ces derni` eres ann ees, de standards dinterop erabilit e. PHP evolue aussi en ce sens. Par cons equent, il est fort probable que les possibilit es dint egration ` lavenir. seront encore plus importantes a

7.12 Outils pour le d eveloppeur


7.12.1 ExtDevEval
Le module backend Tools ExtDevEval fournit un ensemble de fonctions utiles pour le d eveloppement dextensions. Notez que lors de lutilisation de lextension ExtDevEval dans le backend, une s erie de liens apparaissent en haut de linterface backend. Ceux-ci ouvrent la fen etre qui contient la docu` la documentation sur [Link]. mentation de lAPI, ou qui renvoie a De plus, le module contient les fonctions suivantes : 521

7 D eveloppement dextensions

getLL() converter Convertit les textes au sein du code source pour leur utilisation dans les chiers locallang PHP script documentation help Ins` ere les commentaires Javadoc manquants dans les fonctions. Create/Update Extensions PHP API data ` partir de ceux-ci, un chier ext_php_api.dat Lit les commentaires JavaDoc et g en` ere, a ` la cr qui sert a eation de la documentation de lAPI. Display API from ext php [Link] le ` partir dun chier ext_php_api.dat. Afche la documentation de lAPI a temp CACHED les conrmed removal Supprime les chiers temp_CACHED_* de typo3conf/ PHP source code tuning Mise en forme du code source PHP et modication pour respecter les conventions d ecriture. Code highlighting Afche PHP, TypoScript et le XML en couleurs. Utile lors de la consultation de la documentation. CSS analyzer l Pr esente le CSS pour les e ements au sein dun code HTML sp eci e. Table Icon Listing Afche les possibilit es dic one pour un enregistrement (cach e, acc` es r eserv e, . . .)

7.12.2 D ebogage avec debug()


R ef erence

705356

TYPO3 fournit un peu de support pour le d ebogage PHP sous la forme dune fonction globale debug(). Cette fonction afche des variables directement sous un format lisible, y compris pour des tableaux imbriqu es. ` afcher, si elles sont disponibles, a ` la m La fonction debug() transf` ere les variables a ethode par TYPO3 lui-m tre $GLOBALS[error]->debug(). Cet objet nest pas cr ee eme et peut donc e ` disposition par une extension. Lextension CCDebug (cc_debug) en est un exemple. Elle mis a tre collecte les informations de d ebogage et les afche dans sa propre fen etre, qui peut e activ ee en cliquant sur lic one repr esentant une bombe.

522

7.12 Outils pour le d eveloppeur

Figure 7.50: D ebogage dans une fen etre s epar ee par CCDebug

La fonction debug est d enie comme suit :


function debug($variable, $name = *variable*, $line = *line*, $file = *file*, $level = E_DEBUG)

La fonction incorpor ee ne renvoie que la variable elle-m eme, ainsi que sa description dans $name. Tous les autres param` etres sont ignor es. Par contre, ils sont pris en compte par CCDebug, qui afche le num ero de la ligne, et le nom du chier, pour autant que les constantes _ _LINE_ _ et _ _FILE_ _ soient pass ees en arguments.
debug(time(), current time, _ _LINE_ _, _ _FILE_ _);

Si vous voulez utiliser la fonction debug incorpor ee, alors que lextension de d ebogage est install ee, vous pouvez appeler la fonction xdebug(). Extension Debug Il est assez facile de d evelopper votre propre extension de d ebogage. Au sein du chier ext_localconf.php, vous devez cr eer un objet dans $GLOBALS[error], qui contient la fonction debug() avec les arguments mentionn es plus haut. Si le but de cette extension est, de mani` ere ` CCDebug, de collecter les informations et uniquement de les afcher dans la page, similaire a on doit aussi y inclure la m ethode debugOutput(). 523

7 D eveloppement dextensions

7.12.3 D ebogage avec t3lib_div::devLog()


R ef erence

544345

Outre la possibilit e de cr eer un format dafchage pour les recherches derreur avec la fonction debug(), TYPO3 offre une seconde interface via la fonction t3lib_div::devLog(). Par opposition ` debug(), TYPO3 ne met pas en uvre une fonction par d a efaut pour t3lib_div::devLog(). ` disposition uniquement une interface homog` ` Cette derni` ere met a ene, de sorte quun appel a t3lib_div::devLog() sans extension associ ee na pas le moindre effet. CCDevLog (cc_devlog) est une extension mettant en uvre linterface de (cc devlog) qui enregistre les traces (logs) dans une table de la base de donn ees. Un module backend vous aide ` afcher les donn a ees. Ce module peut aussi souvrir dans une fen etre s epar ee, le rendant disponible parall` element au backend.

Figure 7.51: Module CCDevLog pour lafchage des logs

La fonction devLog() dans t3lib_div est d enie comme suit :


* @param string Message (in english). * @param string Extension key (from which extension you are * calling the log) * @param integer Severity: 0 is info, 1 is notice, 2 is warning, * 3 is fatal error, -1 is "OK" message * @param array Additional data you want to pass to the logger. * @return void */ function devLog($msg, $extKey, $severity=0, $dataVar=FALSE)

Voici un extrait de t3lib_userAuth, qui illustre lutilisation de t3lib_div::devLog().


if ($TYPO3_CONF_VARS[SC_OPTIONS][t3lib/class.t3lib_userauth.php] [writeDevLog]) $this->writeDevLog = TRUE; if (TYPO3_DLOG) $this->writeDevLog = TRUE;

524

7.12 Outils pour le d eveloppeur


... if ($this->writeDevLog) t3lib_div::devLog(No user session found., t3lib_userAuth, 2);

Un test est dabord effectu e pour v erier si writeDevLog est d eni dans $TYPO3_CONF_VARS ` TRUE. La constante au sein du script courant. Si cest le cas, $this->writeDevLog est mis a TYPO3_DLOG est trait ee exactement de la m eme fac on. Il est donc possible dactiver les logs uniquement pour ce script ou pour un objet, ou encore de lactiver pour tout le syst` eme, gr ace ` la constante TYPO3_DLOG. Lappel lui-m ` devLog() est toujours pr a eme a ec ed e dun test sur la variable $this->writeDevLog. Extension DevLog Le principe de lextension de type DevLog est de d eclarer une fonction qui sera ensuite appel ee ` un extrait par t3lib_div::devLog() avec les donn ees de log. Ceci est illustr e ci-dessous gr ace a de lextension CCDevLog. [Link] La fonction devLog() de la classe tx_ccdevlog dans class.tx_ccdevlog.php est dabord d eclar ee dans le chier [Link] de lextension CCDevLog.
$TYPO3_CONF_VARS[SC_OPTIONS][t3lib/class.t3lib_div.php][devLog] [$_EXTKEY] = EXT:.$_EXTKEY./class.tx_ccdevlog.php:tx_ccdevlog ->devLog;

Comme vous pouvez le remarquer, votre propre fonction DevLog est d enie dans le tableau devLog avec votre propre cl e dextension : ...[devLog][$_EXTKEY]. Cela signie que plusieurs tre d extensions DevLog peuvent e enies en m eme temps. Elles sont alors appel ees les unes apr` es les autres, avec les donn ees de log. class.tx_ccdevlog.php La fonction devLog() d eclar ee plus haut est situ ee dans ce chier. Dans votre propre extension, tre nomm ` la cl ce chier doit bien s ur e e pour correspondre a e dextension. Dans le cas de lextension CCDevLog, les donn ees de log transf er ees sont trait ees et enregistr ees dans la table de la base de donn ees.
class tx_ccdevlog { /** * DevLog function - writes log to db * * @param array log data array * @return void */ function devLog($logArr) { $insertFields = array(); $insertFields[msg] = $logArr[msg];

525

7 D eveloppement dextensions
$insertFields[extkey] = $logArr[extKey]; $insertFields[severity] = $logArr[severity]; if (!empty($logArr[dataVar])) { $insertFields[data_var] = $GLOBALS[TYPO3_DB]->quoteStr(serialize($logArr[dataVar], tx_ccdevlog); } $GLOBALS[TYPO3_DB]->exec_INSERTquery(tx_ccdevlog, $insertFields);
} }

` utiliser des Une autre option de d ebogage, compl` etement ind ependante de TYPO3, consiste a environnements de d eveloppement tels que Zend IDE ou PHPeclipse. La description de ce processus d epasse le cadre de ce livre. N eanmoins, nous introduirons bri` evement quelques IDE.

7.12.4 FE Debug/Info output et BE Env-Info


Il est parfois utile dafcher les donn ees dobjets typiques tels que $TSFE et $BE_USER ou les variables denvironnement de t3lib_div::getIndpEnv(). On peut consulter ces donn ees gr ace, par exemple, aux extensions FE Debug/Info output (cc_feinfo) et Backend Environment Information (cc_beinfo), sans devoir g en erer les r esultats via la fonction debug(). La premi` ere extension est un plugin que vous pouvez ins erer dans une page, la seconde est un module. Le module ne peut pas afcher les donn ees qui sont pertinentes dans le contexte de votre propre module. Mais vous pouvez lutiliser comme gabarit et facilement g en erer le r esultat dans votre propre module pour vos tests, puisque ces r esultats sont int egr es dans une classe s epar ee.
Figure 7.52: Exemple dafchage du plugin FE Debug/ Info output

526

7.12 Outils pour le d eveloppeur

Si vous voulez int egrer cet afchage pour vos tests dans votre propre plugin, vous le r ealiserez tr` es facilement gr ace aux lignes suivantes :
require_once(t3lib_extMgm::extPath(cc_feinfo). class.tx_ccfeinfo.php); $info = t3lib_div::makeInstance(tx_ccfeinfo); $info->init($this); $content.= $info->pi_getInfoOutput();

7.12.5 Environnements de d eveloppement PHP


diteur de texte Si vous programmez de mani` ere intensive, dans des projets complexes, un e nest pas loutil le plus ad equat. Mais m eme un programmeur occasionnel peut b en ecier dun IDE (Integrated Development Environment ). Les IDE fournissent g en eralement une validation de la syntaxe dans l editeur, comprennent un syst` eme de gestion de projets et int` egrent des outils tels que CVS, FTP, et WebDAV. Un bon IDE fournit aussi un support au d ebogage. ` vos besoins est une question de go Le choix de lIDE le plus appropri ea ut, raison pour laquelle nous vous recommandons ici den tester quelques-uns. Des versions d evaluation sont ` disposition par les e diteurs, ou sont m g en eralement mises a eme gratuites en tant que logiciels libres. Voici une courte liste denvironnements de d eveloppement PHP : Environnement de d eveloppement Zend IDE d evelopp e par Zend, le concepteur du PHP. Plate-formes : Unix/Linux, Mac OS X, Windows [Link] PHPeclipse Projet Open Source bas e sur Eclipse ([Link] qui met en uvre un plugin PHP ; lun des avantages est le grand nombre de plugins dans lIDE Eclipse : CVS, SQL, XML, HTML, JavaScript, Regex, outils collaboratifs, . . . Plate-formes : Unix/Linux, Mac OS X, Windows [Link]

527

Index
A Acc` es (sous-module) 84 Access Lists 146 Accessibilit e 353, 356 Actions 170 Admin Panel 118 Administration des utilisateurs 152 Aide (module) 87 Aire de navigation 82 All Conguration 50 Analyse de la base de donn ees 47 Analyse du trac 179 Arborescence 82 des pages 82 des r epertoires 82 vue densemble 84 Assistant TSCong 157 AWStats 178 B Backend 79 identication 79 Balise Typo 457 Basic Conguration 46 bigDoc 479 Bogue 74 Bordure 106 BPR (Business Process Redesign) 141 C Cache 183 Cadres 346 Caract` eres 62 Caract` eres sp eciaux 56 Cascading stylesheets 258, 264, 285 Centre de t aches (sous-module) 86, 87 lev Charge e ee 35 Cl e dextension 369 Classes de base 407 Cluster 35 cms 58 cObject 229, 438 Comptes utilisateurs 150 Conditions 220 [ELSE] 221 [END] 220 browser 340 dayofmonth 341 dayofweek 341 device 340 globalString 342 globalVar 342, 344 hostname 341 hour 341 IP 341 language 341 loginUser 342 minute 341 month 341 PIDinRootline 342 PIDupinRootline 342 system 340 treeLevel 342 useragent 341 userFunc 343 usergroup 341 version 340 conf (tableau) 442 Conguration (sous-module) 86 Conguration TS de la page 167 Conguration TS de la page) 84 Constant Editor 245 cat (sous-cat egories) 248 cl e 247 commentaires 246 label 250 TSConstantEditor (TLO) 250 type 249 Constantes 211 Contenu exible 362 Copie recursive 125 Cr eation de groupes 145 Cross media (publication) 263 CSS styled content 258, 284 CSV export 182 CType 102 curl 55 D DAM 56, 184 Database Abstraction Layer 36 Database Analyzer 47, 74 Database Mounts 148 dataMiner 470 Debogage 55 Debug 55 debug() 522 description de projet 373 DevLog 525 diff 59 Digital Asset Management 184 Doc (sous-module) 86 Document Suite 131 Document TYPO3 252 Documentation 398 Droits dacc` es 154 ` une page 154 Droits dacc` es a Dummy 38 E Edition de pages 153

529

Index
Edition frontend 155 Enregistrement de gabarit Include basis template 271 Environnement de d eveloppement 527 Envoyer des chiers 116 Espacement entre cellules 106 Espacement inter cellules 106 d Etat el ement de menu ACT 300 ACTIFSUB 300 CUR 300 IFSUB 300 NO 299 RO 300 SPC 300 USERDEF1 300 USERDEF2 300 USR 300 Excludeelds 147 exec() 61 exportation CSV 128 ExtDevEval 521 Extension cat egories 370 cl e dextension 388 d esinstallation 377 DevLog 525 Documentation 398 documentation 392 installation 376 Kickstarter 387 F FEUtilisateur 175 Fichier (module) 85 Fichier journal 65, 84, 179 Fichier T3X 375 Fichiers (sous-module) 85 Fichiers, envoi 55 leadmin 85 Filemounts 149 Flexforms 361, 419 Fonctions addParams 228 encapsLines 228 lelink 228 HTMLparser 229 HTMLparser tags 229 if 228, 334 imageLinkWrap 227 imgResource 227 makelinks 229 numRows 227 optionSplit 321 parseFunc 228 select 228 split 228, 336 stdWrap 227, 282, 291, 331 tableStyle 228 tags 229 textStyle 228 typolink 228, 289 Fonctions (sous-module) 85 Fonctions de sous-modules 482 Framework 400 structure 400 Freetype 36 Frontend 79 restitution du contenu 438 Frontend Editing 117 Frontend-only 155 Full Search 181 G Gabarit TypoScript cascades 271, 281, 288 embo ter 205 hi erarchie 206 mettre en cascade 205 Gabarit utilisateur 171 Gabarit-Basis Template 209 Gabarit-Enregistrement Backend Editor Conguration 211 Clear Constants 207 Clear Setup 207 Constants 207, 211 Description 211 Include basis template 209 Include static 208 Include static (from extensions) 209 Include static AFTER basedOn 208 Resources 207 Rootlevel 207 Setup 207 Static template les from T3 Extensions 209 Template on next level 211 Template title 206 Website title 206 Gabarits HTML 265 Gabarits standards 255 (example) 264 content (default) 257, 279 [Link] * 263 cSet (default) 280 cSet Stylesheet 281 cSet.* 258 frameset;* 259 language.* 264 plugin.* 262 styles.* 257 [Link] (default) 258, 279 temp.* 263 template;* 259 GDLibrary 36 General Ofce Displayer 131 Gestionnaire dextensions conguration 58 GFX 50 GIFBUILDER 305, 315, 325 GifBuilderObj ADJUST 327 BOX 306, 307, 310, 316, 326 CROP 327 EFFECT 326 EMBOSS 326, 329 IMAGE 313, 315, 326, 328 OUTLINE 326 SCALE 327 SHADOW 306, 326, 329 TEXT 306, 307, 315, 326, 329 WORKAREA 326 GraphicsMagic 36 H Habillages 507 Hide in Lists 150 Historique 132 Historique des modications 84 HMENU/special 318 browse 318 directory 318, 319 keywords 318 list 318 rootline 318, 320 updated 318

530

Index
userdened 319 HTTrack 71 I Identication 408 ImageMagick 36 Images (sous-module) 85 Importer 85 Impression de page 179 Inclusions 221 Indexation 187 Indexed Search 32, 111 info (sous-section) 84 [Link] 478 Ins erer un lien 122 Ins erer un tableau 123 Ins erer une image 122 Installation hardware 32 LAMP 40 Linux 39 Quick install 39 scenario 33 test 38 WAMP 38, 43 WIIS 44 Windows 38, 43 Integrated Development Environment 527 Internet Information Server 44 J JavaDoc 522 Junction 37 K Kickstarter 387 L Liste (sous-module) 83 Localisation (vue densemble) 84 Logs 65, 178 M M emoire tampon 126 M eta-donn ees 186 Manuel du r edacteur 78, 87 Marqueur 273 Mat eriel choix 32 mediumDoc 479 Members only 398 Menu contextuel 504 Messages (sous-module) 89 ` jour 58, 61, 73 Mises a Module framework 478 script 480 structure 476 Module principal 481 Multilinguisme 344 multipart/form-data 55 MySQL 35 N Navigateur 79 ActiveX 79 cache 79 cookies 79 RTE 79 Navigateur d el ements 96, 116, 185 Niveau 297 Niveau racine 167 No template found 203 Note rapide (sous-module) 88 O Objet de contenu (cObject) CASE 234 CLEARGIF 231, 294 COA 289, 294, 320, 335, 350 COBJ ARRAY 230 COLUMNS 233, 323 CONTENT 232, 279, 291 CTABLE 232, 293 EDITPANEL 237 FILE 229, 231, 277 FORM 235 HMENU 232, 298 HRULER 200, 233 HTML 230 IMAGE 231, 281, 289, 294 IMG RESOURCE 231 IMGTEXT 233 LOAD REGISTER 234 MULTIMEDIA 237 OTABLE 233 PHP SCRIPT 236 PHP SCRIPT EXT 236 PHP SCRIPT INT 236 RECORDS 232 RESTORE REGISTER 235 SEARCHRESULT 235 TEMPLATE 236, 286 TEXT 230, 284, 335 USER 235, 285 USER INT 236 Objet de menu GMENU 299, 304 GMENU FOLDOUT 299, 311 GMENU LAYERS 299, 308 IMGMENU 299, 314 JSMENU 299, 317 TMENU 299, 300 TMENU LAYERS 299, 308 Objet de premier niveau (TLO) 237 cong 238, 239 constants 238, 240 FEData 238 includeLibs 238 lib 240 PAGE 277 plugin 285 plugins 238 resources 238 sitetitle 238 styles 239, 240 temp 239, 240, 287, 338 TEMPLATE 277 tt * 238 types 238 Ofce 131 Op erateurs 216 Options g en erales 94 optionSplit 322 P page types 94 Page (sous-module) 83 Pagemount 61 Pages r ecentes (sous-module) 88, 129 Panneau dadministration 118, 155 PATH site 59, 60 Permissions 84 [Link] 159 PHP SCRIPT 465

531

Index
PHP SCRIPT EXT 438, 465 PHP SCRIPT INT 438, 465 PHPeclipse 527 phpinfo 49 piVars 446 Point de montage chiers 149 Presse-papiers 83, 126 proxy 55 Q QuickStart-paquetage 37 R RAD 143 Rapid Application Development 143 Recherche 181 Ressources 115 Rich Text Editor 86, 119, 162 Rootline 297 RTE 119, 162 S safe mode 62, 65 Sc enario BT3 270 Service cl e 512 Services 510 shy extensions 376 Simple hit statistics 84 smallDoc 479 SOBE 481 Sous-groupes 150 Sous-parties 273 SSL 61 Static Templates 208 Statistiques 84, 178 stdWrap (propri et es) addParams 334 case 335 cObject 332 current 332 data 282, 289, 332, 334, 335 debugData 332 encapsLines 334 eld 332, 334 eldRequired 334 lelink 334 lelist 332 HTMLparser 334 if 334 ifEmpty 333, 337 innerWrap 338 listNum 333, 337, 343 outerWrap 344 override 333, 338 postUserFunc 339 preCObject 338 preUserFunc 339 required 291, 334, 338 split 334, 336 tableStyle 334 textStyle 334 trim 333 typolink 334, 345 wrap 291 Structure des r epertoires 402 t3lib 403 tslib 404 typo3 404 SU, changement dutilisateur 152 Syntax highlighting 245 Syst` eme de droits dacc` es 142 T t3d 252 Export t3d 253 Import t3d 254 t3lib BEfunc 479 t3lib div 409, 480 t3lib div::devLog() 524 t3lib extobjbase 496 t3lib iconworks 480 t3lib pageTree 497 t3lib SCbase 479, 486, 496 t3lib TSparser 199 T aches (sous-module) 90 TCE 408 tce [Link] 499, 505 TCEFORM 160 TCEForms 408 TCEMAIN 159 template 479 Template Auto-Parser 266, 284 TemplaVoil` a 358, 419 Data Structures (DS) 359 Template Objects (TO) 359 TER Compte utilisateur 395 Test Site (paquetage) 37 Text tools 85, 130 tidy 65 Total Cost of Ownership 34 Trier les pages 125 TS Property Lookup Wizard 157 TSCong page 159 TSCong utilisateur 157 TSFE 440 tslib cObj 441 tslib content 441 tslib fe 438 tslib pibase 445, 446 TSref 199, 282 Type de contenu 102, 103 formulaire 109 HTML 115 identiant 111 image 104 ins erer enregistrements 113 ins erer un plugin 114 lien vers chier 107 ` puces 106 liste a menu/plan site 112 multim edia 108 recherche 111 s eparation 114 script 114 tableau 106 textbox 112, 326 texte 104 Texte & image 105 titre 103 Type de page 95 avanc e 95 corbeille 99 cr eation de contenu 101 d elimiteur 98 dossier syst` eme 98 hors menu 97 langue 100 point de montage 98 raccourci 97 Rich Text Editor 101 section utilisateur backend 98 standard 95 type de contenu 102 URL externe 96 vue en colonnes 99

532

Index
typeNum 268 TYPO3 Source (paquetage) 38 TYPO3 MODE 520 TypoScript assistant 242 chemin dobjet 214 commentaires 215 Constant Editor 245 constantes 215 d enition 197, 198 gabarits 201 objet de contenu 229 objets 213 op erateurs 214 propri et es 213 syntaxe 214 syntaxe (v erication) 245 types dobjets 213 types de donn ees 225 valeurs 215 TypoScript Frontend Engine 199 TypoScript Object Browser 200 TypoTag 457 U unzip 59 Usability 77 USER 465 USER INT 438, 442, 465 Utilisateur (module) 86 Utilisateur frontend 175 V V erication de la base de donn ees 180 Version impression 335, 343 Vignettes 86 Visiteurs diff erents 179 Voir (sous-module) 83 tendue 127 Vue e Vue d etaill ee 82 W Web (Module) 83 X XCLASS 394, 519 xdebug() 523 XHTML 353 XML Export 182

533

TYPO3
Dveloppement de sites Web collaboratifs orients publication de contenu
Outil Open Source et gratuit, TYPO3 fait partie comme SPIP de la famille des CMS (Content Management Systems) bass sur le langage PHP. Plus riche fonctionnellement, mais aussi plus complexe que SPIP, TYPO3 est idal pour le dveloppement de sites Web ou dintranets orients publication de contenu et partage dinformations. Il connat un succs croissant auprs des administrations, des collectivits locales, des portails dinformation ou de presse en ligne, et des entreprises cherchant mettre en place un intranet de travail collaboratif ou de gestion documentaire.
W. Altmann, R. Fritz et D. Hinderink
Werner Altmann est un des membres du projet TYPO3 en charge de la documentation officielle. Il est galement consultant technique pour une agence berlinoise spcialise dans les projets CMS denvergure. Consultant et dveloppeur freelance, Ren Fritz est un des membres actifs du projet TYPO3. Il a contribu au dveloppement du cur de TYPO3 et est lorigine de nombreuses extensions. Daniel Hinderink est responsable du marketing, de linnovation et de la stratgie au sein du projet TYPO3. Sa socit de conseil base Munich assiste les entreprises dans la conduite de projets TYPO3. Nicolas Wezel a coordonn la traduction de ce livre. En tant quexpert TYPO3, il donne de nombreuses formations en France et en Belgique. Sa socit Streamsys dveloppe des sites Internet et intranet avec TYPO3.
Code diteur : G11781 ISBN : 2-212-11781-7

Le guide de rfrence des rdacteurs, administrateurs et dveloppeurs TYPO3


crit par trois des membres du projet TYPO3, cet ouvrage de rfrence riche en conseils mthodologiques et en exemples pratiques est dcoup en quatre parties : Introduction TYPO3 et installation du produit sous Windows et Linux. TYPO3 pour les rdacteurs et diteurs de contenu, qui dcouvriront comment insrer et formater des textes et des images, crer des bulletins dinformation, des forums de discussion, des agendas dvnements et autres animations ditoriales. TYPO3 pour les administrateurs, qui apprendront grer les droits daccs des utilisateurs, dfinir les rgles de travail collaboratif, analyser la frquentation du site et en optimiser les performances. TYPO3 pour les dveloppeurs, qui dcouvriront comment personnaliser un site en crant de nouveaux gabarits et en dveloppant des fonctionnalits indites grce au systme dextensions de TYPO3.

Au sommaire
Installation et prise en main Les CMS (Content Management Systems) et TYPO3 Installation de TYPO3 sous Windows ou sous Linux Configuration du serveur TYPO3 pour les rdacteurs Interface utilisateur Modules, centre de tches Insertion de contenus Outils de productivit TYPO3 pour les administrateurs Gestion des droits daccs et des utilisateurs Gestion du workflow Procdures dautomatisation Gestion des performances (cache) Statistiques et logs Gestion des fichiers numriques et de leurs mtadonnes TYPO3 pour les dveloppeurs TypoScript : syntaxe du langage, outils de dveloppement, gabarits standards et cration de gabarits Le systme dextensions de TYPO3 Dveloppement dextensions personnalises.

45
[Link]

9 782212 117813

Conception : Nord Compo

Vous aimerez peut-être aussi