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
  2. $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);
    
  3. Spécifications des chemins
  4. $renderer->setPartialRootPath("path/to/partials/");
    $renderer->setTemplateRootPath("path/to/templates/");
    $renderer->setLayoutRootPath("path/to/layouts/");
    $renderer->setTemplatePathAndFilename("path/to/template.html");
    
  5. Assignations des variables
  6. $renderer->assign("myvar",array("test"=>"test"));
    
  7. Génération du rendu
  8. $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.

Partager :


Article(s) sur le même sujet :

  1. Générer le rendu d’un contenu en TS et dans un plugin en TYPO3
  2. Effectuer des requêtes dans un plugin/module TYPO3
  3. Changer le titre de la page dans un plugin
  4. Ajouter un flexform à un plugin
  5. Embarquer une config realurl par défaut dans une extension TYPO3