Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je viens de rédiger un tutoriel sur smarty et le Zend Framework. Il sort tout juste du four, il contient certainement encore quelques coquilles :
http://www.kitpages.fr/zf_integrerSmarty.php
Philippe
Hors ligne
Bonjour,
Tout d'abord, je tenais à vous féliciter pour ce tutoriel qui a été assez simple à suivre. J'ai rencontré des erreurs à cause de ma configuration en module conférer http://www.z-f.fr/forum/viewtopic.php?id=339 pour de plus ample renseignement, elle a encore un peu évolué en rajoutant un répertoire "template" et "smarty" au même niveau que application, maintenant j'aimerai trouver une solution propre ou améliorer votre interface pour prendre en compte ce changement de répertoire que je perds par cette initialisation
$smarty->template_dir = TEMPLATE_DIR.'/views/scripts/';
Il faudrait rendre dynamique cette variable "TEMPLATE_DIR" pour savoir dans quel module, je suis. Sinon, si vous voyez une autre solution viable je suis preneur.
J'ai fini par le faire fonctioner en mode "module default" avec le TEMPLATE_DIR fixe.
@++, dinoxyz.
Dernière modification par dinoxyz (10-08-2007 18:01:11)
Hors ligne
Une première solution pour les modules est d'uliser le répertoire "template" créé en haut avec une structure de répertoire normale.
$smarty->template_dir = TEMPLATE_DIR;
Sans le "view/script",
/application /modules /default /controllers /blog /controllers /template /index index.tpl /blog /smarty
J'ai aussi utilisé
Zend_Controller_Action_HelperBroker::removeHelper($viewRender);
à la place de
$controller->setParam('noViewRender', true);
Est-ce une bonne solution ?
Si quelqu'un voit une autre solution plus élégante je suis prenneur.
@++ Dinoxyz
Dernière modification par dinoxyz (10-08-2007 18:10:33)
Hors ligne
Bonjour,
En fait il y a une solution plus complète qui règle les problèmes de modules : tu peux définir le template_dir de smarty dans le helper. Comme ça tu peux sans problème intégrer le nom du module, du controlleur ou de l'action dans le template_dir.
A mon avis, le plus propre serait de définir dans Kitpages_View_Smarty les méthodes :
- setScriptPath, getScriptPath
- setBasePath, getBasePath
(en modifiant le template_dir de $_smarty)
et ensuite d'utiliser ces fonctions dans Kitpages_Controller_Action_Helper_ViewManager :
dans preDispatch, tu récupères le nom du module, du controlleur et de l'action et du définis le scriptPath en fonction.
A+, Philippe
Hors ligne
Bonjour,
Je vais creuser ta solution et voir si je peux arriver à avoir quelque chose de mieux et dans ce cas je te t'enverrai les sources pour que tu puisses modifier tes classes si tu es intéressé.
@++, Dinoxyz.
Hors ligne
Bonjour,
En ce moment je teste smarty et je n'arrive pas à faire passer un tableau en paramètre
dans le controller
$arr = array(1000, 1001, 1002);
$this-view->myArray = $arr;
Dans le template
<ul>
{foreach from=$myArray item=foo}
<li>{$foo}</li>
{/foreach}
</ul>
J'ai une belle erreur Parse error: syntax error, unexpected T_OBJECT_OPERATOR
Désolé de vous embêter, avec ça mais je ne vois pas comment le résoudre.
Cordialement,
Dinoxyz
Dernière modification par dinoxyz (13-08-2007 23:25:59)
Hors ligne
Merci à toi, je testerai.
Dinoxyz
Hors ligne
Bertrand a écrit:
Pour ma part , je fais plutot un truc du style:
controller:
$this->view->myList=array(1,2,3,4,5,6,7,8,9);
view:
foreach ($myList as $myDetail) {
}
Ce n'est pas du smarty ça ?
Hors ligne
Je suis d'accord avec toi et ça ne passe pas avec le tutoriel.
@++
Hors ligne
Bonjour dinoxyz,
Je viens de faire le test chez moi, les tableaux marchent bien :
Dans mon controller :
$this->view->tableau = array(2,5,8); echo $this->view->render("default/index/home.tpl");
et dans ma vue (j'utilise {| et |} comme délimiteurs dans smarty pour éviter les problèmes avec Javascript)
liste :<br/> {|foreach from=$tableau item=toto|} val={|$toto|}<br/> {|/foreach|}
Et j'obtiens bien
liste : val=2 val=5 val=8
J'avoue que je ne vois pas où est l'erreur dans ton message du 13/08 (que je n'avais pas vu passer.... c'est tombé pendant mes vacances ).
A+, Philippe
Hors ligne
Merci, mais pour moi ça n'avais pas marché, je referai un test ce week-end
@++ dinoxyz
Hors ligne
Bonjour,
J'ai implémenté la solution du helper pour tenir compte du multi-modules avec Smarty c'rst à dire rendre dynamique le répertoire de templates.
Voici les modifs que j'ai faites :
Dans le KitpagesControllerActionHelperViewManager :
/* * Created on 20 juin 07 * * @author Philippe Le Van (http://www.kitpages.fr) * @copyright 2005-2007 */ class KitpagesControllerActionHelperViewManager extends Zend_Controller_Action_Helper_Abstract { private $_view = null; private $_basePathTempates = ""; public function setView($view) { $this->_view = $view; } /** * Affecte le base path dans lequel se trouve l'arborescence des tempates * @parm string $basePathTempates Chemin relatif */ public function setBasePathTempates($basePathTempates) { if (!empty($basePathTempates)) { if (substr($basePathTempates, -1) == DIRECTORY_SEPARATOR) { $this->_basePathTempates = $basePathTempates; } else { $this->_basePathTempates = $basePathTempates . DIRECTORY_SEPARATOR; } } } public function init() { $this->getActionController()->view = $this->_view; // Chemin d'accès aux templates détermniné dynamiquement à partir du module actuel, // controlleur actuel et action actuelle $dirTempates = $this->_basePathTempates . parent::getRequest()->getModuleName() . DIRECTORY_SEPARATOR . parent::getRequest()->getControllerName() . DIRECTORY_SEPARATOR . parent::getRequest()->getActionName() ; // Affectation de ce chemin à la vue pour utilisation par Smarty $this->getActionController()->view->setScriptPath($dirTempates); } }
Dans le bootstrap :
// initialiser le helper Zend_Loader::loadClass("KitpagesControllerActionHelperViewManager"); $viewManager = new KitpagesControllerActionHelperViewManager(); $viewManager->setView($view); $viewManager->setBasePathTempates(".". DIRECTORY_SEPARATOR. "views" . DIRECTORY_SEPARATOR); Zend_Controller_Action_HelperBroker::addHelper($viewManager);
Dans le KitpagesViewSmarty :
public function setScriptPath($path) { $this->setTemplateDir($path); } /** * Set templates directory * * @param string $path */ public function setTemplateDir($path) { $this->_smarty->template_dir = $path; } /** * Processes a view script and returns the output. * * @param string $name The script script name to process. * @return string The script output. */ public function render($name) { return $this->_smarty->fetch($name); }
A noter que mes vues se trouvent dans
/views/modulex/controlleury/template.tpl
J''espère que ce code pourra vous aider...
A+
kaboume
Dernière modification par kaboume (08-10-2007 08:11:48)
Hors ligne
J'avais laissé tomber cette solution mais peut-être qu'avec ta méthode, je referai un test.
Merci, pour ton code.
@++
Hors ligne
Pour info,
Dernière mise à jour de mon implémentation sur mon blog :
http://www.ericmery.fr/blog/index.php?2 … ty-modules
Hors ligne