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 =  
    } 
  } 

  # 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.