J'ai testé pour vous : Fusionner les méthodes de template de Typo3

Depuis la ver­sion 4.5, de Typo 3, un superbe outil est apparu en Backend pour confi­gu­rer l’affichage des conte­neurs sous forme de tableaux com­plexes en quelques clics ( hea­der + 3 colonnes par exemple). La mise en page Backend res­semble donc for­te­ment à ce qu’elle don­nera en Fron­tend, ce qui n’est pas pour déplaire à nos clients.

Ca a quand même de la gueule, non ?

Ca a quand même de la gueule, non ?

Ce wizard s’accompagne de deux champs, dans l’onglet « Appa­rence » des pro­prié­tés de page, qui per­mettent de lier une tem­plate Backend à la page en cours ou ses descendants.

Cette logique col­lant par­fai­te­ment à l’utilisation de la méthode skin, appli­quée chez Inouit, il m’a paru évident qu’il fal­lait trou­ver un moyen de lier les deux méthodes, et donc d’éviter la dupli­ca­tion des champs de liaison.

Les neu­rones bien creu­sées et quelques lignes de code plus tard, voilà ma solu­tion (cor­ri­gée par Popy :p) :

temp.templateId = CASE
temp.templateId {
  key.field = backend_layout
  key.ifEmpty.data = levelfield:-1, backend_layout_next_level, slide
}

Un bon vieux switch des familles sur les deux champs que l’on uti­li­sera aux lieux stra­té­giques d’une tem­plate Typos­cript (hea­der, attri­bu­tion et rem­plis­sage des mar­kers, …). Ainsi la décla­ra­tion glo­bale de notre page res­sem­blera à ça :

page = PAGE
page {
 typeNum = 0
 # Définition d'une class pour le body
 bodyTagCObject < temp.templateId
 bodyTagCObject {
   default = TEXT
   default {
     value = default
     wrap = <body>
   }
 }
 # Définition de la template principale
 headerData.10 < temp.templateId
 10 < temp.templateId
}

Et la confi­gu­ra­tion d’une tem­plate de base pour­rait don­ner ceci :

page {
 ## Header de la page
 headerData.10.[Identifiant de la template Backend] < template.interne
 headerData.10.[Identifiant de la template Backend].workOnSubpart = DOCUMENT_HEADER
 ## Contenu de la page
 10.[Identifiant de la template Backend] =< template.interne

 ## Class Body de la page
 bodyTagCObject{
   [Identifiant de la template Backend] < .default
   [Identifiant de la template Backend].value = interne
   [Identifiant de la template Backend].insertData = 1
 }
}

## Template
temp.templateFile = {$filepaths.templates}interne.html

## Gestion de la template
template.interne = TEMPLATE
template.interne {
 workOnSubpart = DOCUMENT_BODY
 template < plugin.tx_automaketemplate_pi1
 template.content.file < temp.templateFile

 ## Création des markers
 template.elements {
   ## Markers ...
 }

 ## Injection des markers
 subparts {
   ## Remplacement des markers ...
 }
}

C’est tout ?
Et bien oui c’est tout. Chaque fois que nous vou­lons créer une nou­velle tem­plate, nous dupli­quons le fichier conte­nant la confi­gu­ra­tion de tem­plate de base, et il ne reste plus qu’à prendre une dizaine de minutes pour map­per le tout.

Ce code est sans doute per­fec­tible et ne demande qu’à être amé­lioré, mais il a le mérite de bien fonc­tion­ner et de contri­buer à faci­li­ter ma vie sans tem­pla­voilà.

J’ai testé pour vous : fusion­ner les méthodes de tem­plate de Typo3 et ce gain de pro­duc­ti­vité et de faci­lité d’utilisation m’a plu­tôt satisfait.

Par Greg
Catégorie : Pro
Tags : , , , ,