Utiliser Fluid dans un plugin tslib_pibase
2/09/10
Avec l’arrivée de extBase et Fluid, j’ai souvent entendu la question suivante : comment profiter de Fluid dans un plugin classique (n’étendant pas extBase)? Voici donc la démarche à adopter et un exemple de fonction. Vous pourrez alors profiter de la puissance du système de templating Fluid dans tous vos plugins.
- Instanciations des objets
- Spécifications des chemins
- Assignations des variables
- Génération du rendu
$renderer = t3lib_div::makeInstance('Tx_Fluid_View_TemplateView');
$controllerContext = t3lib_div::makeInstance('Tx_Extbase_MVC_Controller_ControllerContext');
$controllerContext->setRequest(t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Request'));
$renderer->setControllerContext($controllerContext);
$renderer->setPartialRootPath("path/to/partials/");
$renderer->setTemplateRootPath("path/to/templates/");
$renderer->setLayoutRootPath("path/to/layouts/");
$renderer->setTemplatePathAndFilename("path/to/template.html");
$renderer->assign("myvar",array("test"=>"test"));
$renderer->render();
Enfin, voici un exemple de fonction toute prête vous permettant d’implémenter Fluid. Il suffit de spécifier le chemin de votre template (dans mon exemple forcément dans le répertoire de l’extension) et de passer un array contenant vos données. Attention à bien créer les chemins présents dans cette fonction : res/partials etc…
function fluidView($template,$context = array()) {
$renderer = t3lib_div::makeInstance('Tx_Fluid_View_TemplateView');
$controllerContext = t3lib_div::makeInstance('Tx_Extbase_MVC_Controller_ControllerContext');
$controllerContext->setRequest(t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Request'));
$renderer->setControllerContext($controllerContext);
$template = t3lib_extMgm::extPath($this->extKey) . $template;
$renderer->setPartialRootPath(t3lib_extMgm::extPath($this->extKey) . "res/partials/");
$renderer->setTemplateRootPath(t3lib_extMgm::extPath($this->extKey) . "res/templates/");
$renderer->setLayoutRootPath(t3lib_extMgm::extPath($this->extKey) . "res/layouts");
$renderer->setTemplatePathAndFilename($template);
foreach ($context as $key => $value) {
$renderer->assign($key,$value);
}
return $renderer->render();
}
Pour tout savoir sur la manière d’utiliser Fluid, je vous conseil fortement de consulter la documentation officielle. L’apport de Fluid est vraiment conséquent par rapport à l’ancien système et les plugins doivent être développés en prenant en considération extBase/Fluid (pour préparer la version 5.0).
Merci à la mailing-list TYPO3 dans laquelle j’avais vu cette information qui méritait d’être relevée.
Article(s) sur le même sujet :



8 septembre 2010 - 15 h 04 min
Enfin un blog en français qui parle de TYPO3
ça fait plaisir.
10 septembre 2010 - 12 h 24 min
GRAND Merci pour ce blog que je suis très régulièrement pour essayer d’apprendre.
Pour le présent article, une petite remarque. Je n’arrive déjà pas à voir comment utiliser ce système de templating dans TYPO3 (hors de toute programmation d’extension) par rapport à l’ancien système …
10 septembre 2010 - 12 h 25 min
d
10 septembre 2010 - 15 h 31 min
Tu installe l’extension « fluid » tu appel cette méthode en passant le chemin du template ET le tableau de données à remplacer.
Tu peux alors utiliser dans ton template la syntaxe fluid et plus les ### comme auparavant.
10 septembre 2010 - 18 h 57 min
Merci, c’est sympa de répondre.
Et pour la nouvelle syntaxe, il faut se référer à la doc officielle FLOW3 que tu as citée ? Je l’avais déjà parcouru et j’avais trouvé cela 1) indigeste, 2) très tournée vers la programmation plus que vers l’intégration
Encore merci
12 octobre 2010 - 16 h 40 min
Je reprends le sujet peut être un peu tard, mais quelqu’un a-t-il compris comment utiliser la syntaxe Fluid dans un template ?
Je suis newbie sur Typo3
12 octobre 2010 - 17 h 19 min
En utilisant cette fonction + la documentation officielle, normalement, tu ne doit pas rencontrer de soucis.
Alors, je te conseil de faire un tour sur le forum officiel : http://forum.typo3-fr.org/index.php
On se fera un plaisir de te répondre.