Forum CMS Made Simple FR
[Résolu]udt et smarty - remplacer méthode _compile_source - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : [Résolu]udt et smarty - remplacer méthode _compile_source (/thread-2142.html)



[Résolu]udt et smarty - remplacer méthode _compile_source - pierrepercee - 08/08/2012

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.3
#~ Url du site :
#~ Hébergeur / Soft : localhost
#~ Informations Système :
#~ 1.11.1 (JCE)
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour,

Suite à l'upgrade vers 1.11 voici quelques retours d'expérience:
Ceux qui rencontrent des problèmes avec le module News, le tag SocialBookmarking et le module CGFeedBack tireront grand profit de la mise à jour différentielle diffusée par JCE sur son site (un grand merci à JCE de nous faire profiter avec quelques heures d'avance de la dernière Maj).
Sinon la syntaxe "smarty" doit désormais être impeccable... Les UDT (les miens, pas ceux des autres) qui fonctionnaient bien en 1.10.3 causent désormais un certain nombre d'erreurs.
Faites impérativement un upgrade en local avant de tenter l'upgrade sur un site en production sous peine de...

Sinon cette syntaxe ne fonctionne plus (extrait http://wiki.cmsmadesimple.fr/wiki/Udt_base)
Code :
[== Indéfini ==]

$smarty = cmsms()->GetSmarty();
$smarty_data = "{menu}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
echo $_contents;

à cause de la méthode "_compile_source", (erreur
Code :
[== Indéfini ==]
Call of unknown method '_compile_source'.
Error: at line 806 in file C:\wamp\www\wxs\lib\smarty\sysplugins\smarty_internal_templatebase.php
) je n'ai pas trouvé comment réécrire la chose en Smarty3. Il y a bien un thread sur le sujet dans le forum anglais ici mais la solution ne s'y trouve pas !
Voilà si quelqu'un s'est déjà penché sur ce point... Smile


[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 08/08/2012

J'ai rencontré l'erreur (sur www.su3.fr)

Je n'ai pas encore de solution. Je reste à l'écoute de ce thread Smile

Apparemment la solution sera de repasser par une fonction purement Smarty de compilation (et non une fonction custom interne à cmsms comme c'était le cas avant)


[Résolu]udt et smarty - remplacer méthode _compile_source - Jean le Chauve - 08/08/2012

De la manière dont les 2 ont répondu à ton post, je me demande si tu vas recevoir une réponse plus efficace.
Te remballer sur smarty.net n'est pas des plus sympas, surtout sans donner de lien précis Wink
C'est pourtant la seule méthode que je connaisse pour incorporer des balises smarty dans une udt.


[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 08/08/2012

http://www.smarty.net/docs/en/api.functions.tpl

Notre solution est l'une de ces fonctions, je regarde laquelle correspondrait au mieux à notre besoin : transformer une chaine vers un Objet Template Smarty et ensuite de pouvoir le compiler


[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 08/08/2012

regarde de ce côté : http://www.smarty.net/docs/en/resources.string.tpl

Dans ton UDT "toto":

Code :
$smarty->assign('foo','value');
$template_string = 'display {$foo} here';
$smarty->display('string:'.$template_string); // compiles for later reuse
$smarty->display('eval:'.$template_string); // compiles every time

Dans ton gabarit


Code :
{toto}{include file="string:$template_string"} {* compiles for later reuse *}
{toto}{include file="eval:$template_string"} {* compiles every time *}



[Résolu]udt et smarty - remplacer méthode _compile_source - pierrepercee - 08/08/2012

Salut et merci Bess !

Dans mon cas je cherche à appeler un UDT dans un autre UDT (tu parles de gabarit, je dois mal comprendre). Je viens de faire un essai avec cette méthode mais j'ai du en "faire une", cela ne marche pas.
C'est vrai que sur le forum US la réponse faite à "rotezecke" ne fait guère avancer la chose... La doc Smarty, entre nous c'est pas vraiment un modèle de pédagogie hein! :/


[Résolu]udt et smarty - remplacer méthode _compile_source - pierrepercee - 08/08/2012

Je ne sais pas comment on modifie le Wiki mais ce serait bien, une fois la solution trouvée et validée, de modifier l'article en question histoire de ne pas laisser de "scories anciennes". Smile


[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 08/08/2012

le wiki est en mode "accès écriture sur demande" pour éviter le spam.

Je te créé un compte pour l'occasion


[Résolu]udt et smarty - remplacer méthode _compile_source - jce76350 - 08/08/2012

Ce serrait pas mieux de déplacer cette discussion dans Modules, Tags, Aide concernant l'utilisation des modules, balises et balises utilisateur car les propos pas grand chose n à voir avec Installation ?


[Résolu]udt et smarty - remplacer méthode _compile_source - pierrepercee - 08/08/2012

Bonsoir JCE,

Effectivement cela a plus à voir avec les balises utilisateurs, tu as raison. Je l'ai mis ici car la difficulté n'est rencontrée que lors de l'installation de la 1.11 avec l'adoption de Smarty3 et je pensais que pour les nouveaux utilisateurs de la 1.11 confrontés au problème il n'était pas complètement illogique de consulter cette section.
Merci Bess pour le compte, je n'ai pas encore eu le temps de regarder le problème, mais dès que cela "tourne", je modifie le Wiki.


[Résolu]udt et smarty - remplacer méthode _compile_source - jce76350 - 09/08/2012

Citation :Effectivement cela a plus à voir avec les balises utilisateurs, tu as raison. Je l'ai mis ici car la difficulté n'est rencontrée que lors de l'installation de la 1.11 avec l'adoption de Smarty3
Oui mais rien a voir avec installation , justes un problème de balises en CMSms 1.11
Donc je déplace dans Modules, Tags


[Résolu]udt et smarty - remplacer méthode _compile_source - pierrepercee - 09/08/2012

Merci JCE d'avoir déplacé ce "thread". je n'ai pas encore eu le temps de regarder de plus près les méthodes disponibles que Bess a eu la gentillesse de m'indiquer (a vrai dire j'ai fait une vague tentative puis j'ai été occupé par ailleurs). Wink


[Résolu]udt et smarty - remplacer méthode _compile_source - kraygoon - 16/08/2012

Je ne sais pas si vous aviez réussi à trouver solution, mais voici la mienne :
Code :
[== PHP ==]
$smarty = cmsms()->GetSmarty();
$smarty_data = "{menu}";
@ob_start();
echo $smarty->display('string:'.$smarty_data) ;
$_contents = @ob_get_contents();
@ob_end_clean();
echo $_contents;



[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 16/08/2012

Je confirme Kraygoon : tu as tout bon dans le code, ça fonctionne impec chez moi. Merci pour l'astuce que je reporte dans le WIKI aussitôt


[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 16/08/2012

Rectification de Calguy1000

Code :
$smarty = cmsms()->GetSmarty();
$smarty_data = "{menu}";
echo $smarty->display('string:'.$smarty_data) ;

effectivement ^^


[Résolu]udt et smarty - remplacer méthode _compile_source - kraygoon - 17/08/2012

Désolé pour le « @ob_start() » et la suite. En effet, je n'avais pas rencontré précisément ce code et il fallait que le retour du $smarty->display() me soit fourni dans une variable.


[Résolu]udt et smarty - remplacer méthode _compile_source - bess - 17/08/2012

aucun soucis, moi même en regardant le code superflu je me suis dis "putain pourquoi je l'avais pas vu celle là"...

j'imagine qu'en ayant démarré de l'ancien code , ça a faussé notre jugement parce que oui clairement il y avait du superflu et qu'aucun de nous ne l'a vu ^^

j'ai mis à jour les docs wiki.


[Résolu]udt et smarty - remplacer méthode _compile_source - pierrepercee - 17/08/2012

Grand merci à tous. Je n'ai pas eu le temps de me pencher dessus ces derniers jours et mes affinités avec la syntaxe Smarty étant ce qu'elles sont cela aurait sans doute donné un "Brontosaure" à peine bricolé et tout juste fonctionnel. Wink
Merci à Bess d'avoir modifié le Wiki !