Content Management System & Typo 3

Ecritures de gabarits avec Typo3

Nativement, Typo3 propose un certain nombre de gabarits " prêt à l'emploie" qui permettent de changer l'esthétique des sites qu'il administre en quelques cliques.

Mais les CMS ne seraient pas aussi populaire s'il ne proposait pas la possibilité d'écrire ses propres gabarits. C'est cette fonctionnalité que nous allons décrire ici.

L'écriture de Gabarits Typo3 peut s'effectuer de deux manières :

Nous,ici, allons décrire ces deux methodes.

Methode TypoScript

Cette méthode se déroule en trois parties :

1 - Ecriture du gabarit HTML

Cette étape consiste à décrire la structure (positionnement des contenus) du gabarits qui va être intégré dans Typo3. La déscription du gabarit permet de spécifier à Typo3, grâce à des marques particuliers : ### VALEUR ###, des zones dans une page HTML.

Le moteur Typo3, lors d'une restitution HTML, localisera ces zones et les remplacera par un contenu approprié.


 
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" lang = "fr" xml:lang = "fr">
	<head>
		<meta name = "Content-Type" content = "text/html; charset=ISO-8859-1" />
		<title>
		<!-- ###TITLE### START-->
		<!-- ###TITLE### END-->
		</title>
		<link rel = "stylesheet" type = "text/css" title = "Xpose" href = "Xpose.css" />
	</head>
<body>
<!-- ###DOCUMENT_BODY### START-->
	<div id = "content">
		<h1>###EXPO_TITLE###</h1>
		<div id = "description" style = "display:block">
			<h2>###PAGE_TITLE###</h2>
			<!-- ###MON_CONTENU### START-->
				Content : Il y a un problème sur le site, contacté le webmestre
			<!-- ###MON_CONTENU### END-->
		</div>
	</div>
<div id = "navigation">
	<!-- ###MENU_LEFT### START-->
		Menu : Il y a un problème sur le site, contacté le webmestre
	<!-- ###MENU_LEFT### END-->
</div>

<!-- ###DOCUMENT_BODY### END-->
</body>
</html>

2 - Ecriture du CSS

Cette deuxième partie consiste à définir le formatage des zones du gabarit de précédemment écrit via une feuille de style CSS.

L'écriture de cette feuille de style n'est contrainte à aucune règle particulière avec cette méthode. Voilà pourquoi nous ne nous attarderons pas sur les détails de sa conception.

Celle-ce est consultable ici.

3 - Intégration dans Typo3

Cette partie va permettre de créer un nouvel objet Typo3 appelé template, qui va représenter notre gabarit dans Typo3.

Dans un premier temps, il faut intégrer les fichiers décrivant notre gabarit, à savoir :

Cette opération s'effectue par le module File de l'interface d'administration (#1). L'import de fichier dans Typo3 s'effectue en faisant un clique droit sur un des répertoires de l'arbre décrivant le système de fichier de Typo3 et sélectionnant Upload Files (#2).

Après ajout, Typo3 affiche les fichier dans le cadre droit du module File.

Après avoir intégrer ces fichiers, il faut écrire un script Typo3 (appelé un TS), qui va indiquer à Typo3 les règles de restitution des données dans le gabarit.

Le TS que nous allons écrire va servir à :

La création du template et la définition du TS s'effectue au même moment.

Cette opération se fait à partir de l'outil Template du module Web (#1):

En sélectionnant Template, un formulaire apparaît afin de définir les caractéristiques du gabarit (template).

Pour créer notre gabarit, nous remplissons les champs :

Détaillons maintenant le TS :

 1  lib.firstPageTitle = HMENU                      // récupération du titre de la première page
 2  lib.firstPageTitle {
 3    // Selection de la première page (uid = 1)
 4    special = list
 5    special.value = 26                            // id de la première page
 6    
 7    1 = TMENU
 8    1 {
 9        // Désactivation du lien
10        NO.doNotLinkIt =1
11        // Paramètres
12        NO.linkWrap =  <div class="firstPage">|</div>     // Formatage du titre de la première page
13    }
14 }
15
16 temp.menu_1 = HMENU                              // Description du Menu Dynamique
17 temp.menu_1 {													
18   1 = TMENU                                      // 1 corespond au element de niveau 1 dans l'arboressance
19   1 {
20     expAll = 1
21     noBlur = 1
22     NO.allWrap = <h2>|</h2>          // Formatage des élément de niveau 1
23   }
24
25   2 = TMENU                                      // même méthode que le niveau 1
26   2 {
27     wrap =  <UL>| </UL>
28     expAll = 1
29     noBlur = 1
30     NO{
31         allWrap =  <li>|</li>
32     }
33   }
34 }
35
36 // Code Initialisant la page
37 page = PAGE
38 page.stylesheet = fileadmin/Xpose.css            // Lie la feuille de style CSS au gabarit
39
40 page.1 = TEMPLATE
41 page.1.marks.PAGE_UID = TEXT
42 page.1.marks.PAGE_UID.field = uid
43 page.1  {
44    template = FILE
45    template.file = fileadmin/expo_template.htm   // Indique quel gabarit HTML à utiliser
46    workOnSubpart = DOCUMENT_BODY                 // Dans la partie DOCUMENT_BODY du gabarit HTML
47    subparts.MON_CONTENU < styles.content.get     // -> remplace la zone MON_CONTENU par le contenu de la page
48   
49   #Menu Gauche
50   subparts.MENU_LEFT < temp.menu_1               // -> remplace la zone MENU_LEFT par le menu : temp.menu_1 précedemment créé
51
52   #PAGE_TITLE
53   subparts.PAGE_TITLE = TEXT                     // -> remplace la zone PAGE_TITLE par le titre de la page Typo
54   subparts.PAGE_TITLE.field = title
55
56   #EXPO_TITLE
57   subparts.EXPO_TITLE < lib.firstPageTitle	// -> remplace la zone EXPO_TITLE par le titre du site précedemment spacifié
58 }
59 
60 # PATH_INFO:
61 config.simulateStaticDocuments = PATH_INFO
62 config.simulateStaticDocuments_addTitle = 30

Avantages Inconvénients de la méthode :

Avantages
Inconvénients
  • Tout est possible
  • TS difficile
  • Maintenance difficile
  • non intuitif
  • Taille du TS vite importante

Pour palier aux difficultés de cette méthode, l'extension TemplaVoila a été développée.

Methode TemplaVoila

Historique

L'extension “TemplaVoila” a été développée par Kasper Skårhøj et Robert Lemke pour un projet d'une grande entreprise française, Dassault Systemes.
TemplaVoila et le résultat de l'innovation permettant la résolution de problèmes rencontrés lors du projet En particulier le fait que TemplaVoila permette de créer des structures de pages plus flexible que la méthode traditionnelle utilisant la notion de “colonnes”. De plus, elle intègre la notion de gabarits liés aux éléments de contenu et ceci en utilisant une méthode plus flexible basée sur une “interface graphique”. Finalement le développement de TemplaVoila a également fait évoluer le corps de TYPO3, en particulier le concept de FlexForms qui permet, dans le backend, de créer des formulaires hiérarchiques et de stocker leurs contenus en XML.

Utilisation

L'extension TemplaVoilà permet de décharger l'administrateur du site Typo3 de la gestion du script TS, permettant, qui peut vite devenir très compliqué.

Cette extension propose une interface graphique qui va permettre, à l'administrateur du site, d'indiquer à Typo3 quelles sont les zones :

Et quelles sont les données à positionner dans ces zones.

La conception d'un gabarit en suivant cette méthode repose sur trois phases :

1 - écriture du gabarit

Contrairement aux gabarits HTML de la méthode TS, les gabarits de la méthode TV doivent respecter une certaine syntaxe . En effet, la structure du gabarit doit être composé de tableau pour le positionnement des différents éléments.

Exemple d'un gabarit HTML, avec la méthode TV :

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<meta name="Content-Type" content="text/html; charset=ISO-8859-1"/>
<style type="text/css" id="InternalStyle">
/* <![CDATA[*/
BODY { margin:0 0 0 0; background-color:#FFFFFF;}
/* ]]>*/
</style>
<link href="Xpose.css" rel="stylesheet" type="text/css" />

<title></title>
</head>
<body>
<div id="content">
<h1>TITRE</h1>
<table width="100%" height="100%" border="0">
<tr>
<!-- MENU -->
<td id="menu_1">MENU</td>
<!-- CONTENU -->
<td width="80%" height="90%" id="content">
<h2>Contenu</h2></td>
</tr>
</table>
</div>
</body>
</html>

Le code HTML ci dessus contient des zones (symbolisée en rouge) qui seront remplacer par typo3 par des éléments de contenu lors de la phase de restitution HTML.

Les gabarits utilisant l'extension TemplaVoila doivent comporter une référence à une feuille de style qui sera extraite et re-générée par Typo3.

2 - écriture de la CSS de formatage du contenu

Comme le gabarit HTML contient toutes les informations de positionnements des données grâce à l'utilisation des tableaux qui le structure. Il est inutile de redéfinir ces informations dans la feuille de style CSS.

Hormis ce détail, le développeur graphique de l'interface a toute liberté dans la conception de sa feuille de style.

3 - intégration dans Typo3

L'intégration du gabarit HTML se fait de la même manière que pour l'intégration des gabarits avec la methode TS (voir la procedure).

Après avoir ajouter le gabarit HTML dans Typo3, celui-ci se trouva dans la liste des fichiers de la frame de droite du module File > FileList.
Pour spécifier à Typo3 qu'il s'agit un gabarit TV, il faut faire un clique droit dessus (au niveau de l'icône ), puis choisir TemplaVoilà, comme le montre la capture suivante :

Cette dernière opération ouvre l'interface graphique TemplaVoilà, dont voici une capture :

Cette interface permet d'indiquer deux informations :

Cette interface est constituée d'un tableau des objets constituant le DS. Par défaut, on trouve toujours un élément racine (ROOT) qu'il va falloir mapper avec le gabarit HTML.

Pour cela, il suffit de cliquer sur le bouton Map, ce qui va entrainer l'ouverture d'un assistant représentant une vue du gabarit HTML contenant des tag HTML visuel.

En cliquant sur l'un de ces Tag Html, on indique à Typo3 la zone de mapping de l'élément.

Dans le cas de root, on choisit le tag BODY.

Si l'on souhaite travailler dans l'ensemble du code HTML qui est compris entre body, on choisit INNER sinon OUTER (qui a pour effet de ne travailler que sur le tag sélectionné).

Une fois le Data Element (DE) Root mappé, on peut lui ajouter des sous-zones :

Nous avons besoin de deux sous zones dans notre exemple :

Le formulaire d'ajout de mapping de zone ce compose de 5 champs comme le montre cette capture :

 

Maintenant toutes les zones sont mappé dans le gabarit. Il ne reste plus qu'à appliquer le gabarit à des pages. Cette opération s'effectue via la module Web > Template.


Il faut sélectionner la page sur laquelle on veut appliquer le template, puis Create template for a new site.

Cette opération bascule l'utilisateur dans une page : Template information. Pour appliquer notre gabarit au template il faut basculer sur la page de configuration du template via le lien Click here to edit whole template record.

Puis dans la rubrique Setup du formulaire entrer le code TS :

	# Default PAGE object:
	page = PAGE
	page.typeNum = 0
	page.10 = USER
	page.10.userFunc = tx_templavoila_pi1->main_page

Pour activer le menu dynamique , il faut rajouter, toujours dans la même rubrique Setup, le code TS suivant :
lib.menu_1 = HMENU
lib.menu_1 {
	1 = TMENU
	1 {
		expAll = 1
		noBlur = 1
		NO.allWrap = <h2>|</h2>
	}
	2 = TMENU
	2 {
		wrap = <UL>|</UL>
		expAll = 1
		noBlur = 1
		NO{
			allWrap = <li>|</li>
		}
	}
}

Malheureusement l'extension TemplaVoilà ne permet pas de s'affranchir complètement du langage TS, car sans celui-ci, il n'est pas possible de créer de menu dynamique.

Avantages & Inconvénients de la méthode

Avantages
Inconvénients
  • Interfaces graphiques de configuration
  • Configuration intuitive
  • Maintenance aisée
  • Limite la taille du TS
  • Structuration de la page en tableau