Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-08-2010 11:09:03

TeChn4K
Membre
Date d'inscription: 29-07-2010
Messages: 12

Avis sur une solution pour Smarty et les templates de même nom

Bonjour à tous,

J'aimerai avoir votre avis concernant une spécificité de mon implémentation de Smarty.

Quand j'ai voulu désactiver la recompilation des templates (smarty->force_compile) , je me suis retrouvé avec un sérieux problème :
J'ai plusieurs vues qui portent le même nom (users/create et pages/create par exemple). Quand Smarty regardait son cache, il ne voyait pas de différence entre les deux. Pour lui, l'identifiant d'un template est son nom. Du coup, j'avais un même template compilé pour deux pages différentes ...

Pour répondre à ce problème, j'ai fais en sorte de préfixer chaque vue avec un id unique :

Code:

(controller plugin : preDispatch)

 $smarty = $view->getEngine();
       
 $id = $request->getParam('id');
        
 $id = (($id == 0) ? '' : '-'.$id);
            
 $smarty->compile_id = $moduleName.'-'.$controllerName.'-'.$actionName().$id;

Cela fait que des vues avec un mêmeNom.tpl sont pour smarty des vues différentes grace à leurs préfixes.
Le seul souci qui me reste est que du coup mon layout se retrouve compilé autant de fois qu'il y a de vues (car lui aussi est préfixé), alors qu'il ne change pas ..

Que pensez vous de cette solution ? En avez vous des différentes ? Comment avec vous fait vous pour palier à ce problème ?

Dernière modification par TeChn4K (19-08-2010 11:10:22)

Hors ligne

 

#2 19-08-2010 14:12:03

omega2
Membre
Lieu: Boisbriand, quebec, canada
Date d'inscription: 01-04-2009
Messages: 85
Site web

Re: Avis sur une solution pour Smarty et les templates de même nom

Salut,
Est ce que tu utilises smarty 2.x ou une RC de la 3.X?
Avec la 2.X, tu as une fonction de la classe Smarty qui se nomme "_get_auto_filename". Cette fonction sert à déterminer le nom de la version "compilé" (soit de la version en php) du template. Pour ça, elle utilise le nom du template et un CRC du chemin menant au fichier (répertoire+dossier). En théorie, deux templates n'auraient la même version compilé que si le chemin d'accès est identique.

Avec les 3.x, je ne sais pas précisément comment ils ont géré ça. Il y a toujours un CRC qui rentre en jeux sur les trois premiers paramètres de la fonction fetch (dont le nom du fichier de template) si on appelle la fonction "fetch" avec le nom du template. Ce CRC sert à vérifier s'il existe déjà une version du template en cache. Ensuite le code qui mène à la création du fichier compilé et le remplissage du cache est plus complexe avec entre autre un cache qui n'était pas présent dans les versions 2 et un test sur le type de paramètre passé àa la fonction fetch (différent si "chaine de caractère", "objet de template" ou autre objet). Je ne saurais pas dire si le CRC est utilisé pour déterminer le nom du fichier contenant la version compilé du template.

Si tu utilises smarty3.x, commence dont par vérifier la valeur du premier paramètre passé à la fonction fetch de smarty. S'il n'y a que le nom du fichier et pas le dossier contenant le fichier, alors le problème vient de là. Sinon, et si tu n'obtiens pas de meilleure réponse sur ce forum, n'hésite pas à poser la question sur celui de smarty. Ils seront surement à même de te dire ce qu'il en est.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages