Utiliser Fluid dans un plugin tslib_pibase

Posté le 02-09-2010

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.

  1. Instanciations des objets

    $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);
    
  2. Spécifications des chemins

    $renderer->setPartialRootPath("path/to/partials/");
    $renderer->setTemplateRootPath("path/to/templates/");
    $renderer->setLayoutRootPath("path/to/layouts/");
    $renderer->setTemplatePathAndFilename("path/to/template.html");
    
  3. Assignations des variables

    $renderer->assign("myvar",array("test"=>"test"));
    
  4. Génération du rendu
    $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.

comments powered by Disqus