Depuis la version 4.5, de Typo 3, un superbe outil est apparu en Backend pour configurer l’affichage des conteneurs sous forme de tableaux complexes en quelques clics ( header + 3 colonnes par exemple). La mise en page Backend ressemble donc fortement à ce qu’elle donnera en Frontend, ce qui n’est pas pour déplaire à nos clients.
Ce wizard s’accompagne de deux champs, dans l’onglet « Apparence » des propriétés de page, qui permettent de lier une template Backend à la page en cours ou ses descendants.
Cette logique collant parfaitement à l’utilisation de la méthode skin, appliquée chez Inouit, il m’a paru évident qu’il fallait trouver un moyen de lier les deux méthodes, et donc d’éviter la duplication des champs de liaison.
Les neurones bien creusées et quelques lignes de code plus tard, voilà ma solution (corrigé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 utilisera aux lieux stratégiques d’une template Typoscript (header, attribution et remplissage des markers, …). Ainsi la déclaration globale de notre page ressemblera à ç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 configuration d’une template de base pourrait donner 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 voulons créer une nouvelle template, nous dupliquons le fichier contenant la configuration de template de base, et il ne reste plus qu’à prendre une dizaine de minutes pour mapper le tout.
Ce code est sans doute perfectible et ne demande qu’à être amélioré, mais il a le mérite de bien fonctionner et de contribuer à faciliter ma vie sans templavoilà.
J’ai testé pour vous : fusionner les méthodes de template de Typo3 et ce gain de productivité et de facilité d’utilisation m’a plutôt satisfait.






Comment
Ping : Typo3 sans Templavoila | Test4U
Popy 22 mai 2012
Première remarque :
temp.templateId = CASE
temp.templateId {
key.field = backend_layout
key.ifEmpty.data = levelfield:-1, backend_layout_next_level, slide
}
ca serais vachement mieux, quand même :p
Greg 22 mai 2012
J’espérais bien que tu traînerais dans le coin pour améliorer tout ça. Merci sieur Popy