C’est quoi une palette dans TYPO3 ?
J’ai toujours cru que nous pouvions faire ce que l’on voulait avec les formulaires cotés Backend avec TYPO3. C’est vrai que nous pouvons en faire beaucoup et que l’assistant Kickstarter nous aide pour cela, mais au bout du compte il existe quelques limites, comme tout système informatique à force de l’utiliser et le “maîtriser” on en demande toujours plus
Une palette, c’est quoi ?
Pour positionner des éléments dans les formulaires de saisis qui sont disponibles du coté “Backend” (c’est à dire administration) de TYPO3, il existe le TCA (Table Configuration Array), c’est un tableau PHP que l’on peut modifier à souhait et que nous pouvons créer lors de la création d’une extension à l’aide du Kickstarter.
Par exemple avec l’extension tt_news pour la gestion des nouvelles, on retrouve plusieurs champs dont : Le titre de la nouvelle, le nom de l’auteur, la date de création etc …
C’est là que les palettes interviennent, car si l’on veut positionner tous ces champs décrits dans le TCA, il faut créer des regroupements de champs (palette) et les attacher sur notre formulaire.
Regarder la capture suivante où l’on retrouve sous le titre de la nouvelle, le regroupement de trois champs (cacher, date de lancement, date de fin) :

Il existe dans le tableau TCA, un sous tableau qui permet de définir tous ces regroupements. Si vous vous regarder dans le backend, dans OUTILS > Configuration > TCA > tt_news > palettes

Vous verrez la définition de la palette numéro 1
Il est facile ensuite d’attacher cette palette sous un autre champ, pour cela voir le contenu du tableau TYPES :

On y retrouve ceci : title;;1;;
Le 1 ici indique que le champ TITLE (Titre) va chercher le contenu de la palette 1 et la positionner sous le champ TITLE
Les limites ?
Comme vous le voyez, on peut définir des palettes dans le tableau TCA pour une extension précise et ensuite appeler cette palette sous un champ précis. Une palette va par défaut afficher tous les éléments les uns à coté des autres.
Les limites là-dedans, c’est que l’on ne peut pas mettre plusieurs lignes d’éléments les uns en dessous des autres, sans commencer une nouvelle section, de même que si vous avez un ensemble de cases à cocher, elles vont se positionner les unes en dessous des autres ;-(
Les palettes principales
Il existe un autre concept que j’ai découvert récemment concernant le positionnement de certaines palettes. Je parle ici de celle qui permet de choisir le groupe Frontend qui aura accès au contenu :

Ce champ-là se trouve souvent à la fin de tous les autres et ceci s’effectuait par magie jusqu’au moment ou j’ai découvert une information dans le tableau TCA qu’il suffit de désactiver ou d’adapter.
Exemple avec tt_news :
$TCA['tt_news']['ctrl']['mainpalette'] = 10;
Ici on voit très clairement que la palette 10 sera toujours positionnée à la fin des autres.
Modifier les palettes facilement, utopie !
Peut-être avez-vous remarqué que lorsque vous utilisiez le kickstarter pour modifier une extension existante et donc une table dans la base de données pour y ajouter un champ, qu’il y avait une ligne ajoutée dans votre fichier ext_tables.php ? Je veux dire par là que l’assistant fait tout pour que votre nouveau champ soit disponible dans le formulaire.
Exemple : Je veux ajouter un champ SURTITRE dans tt_news, pour cela j’utilise l’extension Kickstarter et je demande à étendre une table existante, en l’occurrence tt_news.
Dans le fichier ext_tables.php, vous allez découvrir la ligne suivante :
t3lib_extMgm::addToAllTCAtypes("tt_news","tx_monextension_surtitre;;;;1-1-1");
Là vous allez vous précipiter dans la documentation de l’API pour voir à quoi sert cette fonction et vous tomberez ici :
| t3lib_extMgm.addToAllTCAtypes | ( | $ | table, |
| $ | str, | ||
| $ | specificTypesList = <code>”</code>, | ||
| $ | position = <code>”</code> | ||
| ) | |||
C’est la dernière valeur qui m’intéresse ici, on y trouve l’explication suivante :
Insert fields before (default) or after one of this fields (commalist with "before:" or "after:" commands). Example: "before:keywords,--palette--;;4,after:description". Palettes must be passed like in the example no matter how the palette definition looks like in TCA.
Je ne sais pas si vous comprenez la même chose que moi, mais on a la nette impression qu’il est possible de positionner notre champ où l’on veut dans une palette.. à moins que je me trompe.
Bref, j’ai été vérifié directement dans le code PHP de cette fonction et rien n’est possible de ce coté la. D’ailleurs, on ne peut même pas choisir un numéro de palette ou quoi que ce soit, pour cela il faut préciser le champ en entier et l’information de la palette.. au final quelque chose de trop complexe.
Donc pour conclure, n’utilisez cette fonction que pour ajouter votre champ entre un autre champ, MAIS qui n’est pas lui-même positionné dans une palette ! Pour cela, il faudra modifier la palette par vous même dans le TCA.
Conclusion
Comme vous pouvez le voir, ce billet n’est pas un cours sur comment fonctionne le TCA, pour cela il existe un très bon document que vous pouvez consulter ici. Par contre, je vous ai donné quelques pistes de réflexion et les limites, histoire de ne pas chercher à faire ce qui n’est pas réalisable
Si vous voulez en savoir plus sur le TCA, vous pouvez également consulter cette présentation de Dmitry Dulepov, monsieur TemplaVoilà !
Mise à jour du 11 septembre 2008 :
Vous pouvez consulter une mise à jour de cet article ici :
http://blogue.infoglobe.ca/2008/09/11/pour-aller-plus-loin-avec-les-palettes-de-typo3
Catégorie(s) : CMS/SGC
Tag(s) : programmation, TCA, TYPO3




















Article très intéressant
Merci