Forum CMS Made Simple FR

Version complète : [Résolu]udt et smarty - remplacer méthode _compile_source
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
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
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)
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.
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
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 *}
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! :/
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
le wiki est en mode "accès écriture sur demande" pour éviter le spam.

Je te créé un compte pour l'occasion
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 ?
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.
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
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
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;
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
Rectification de Calguy1000

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

effectivement ^^
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.
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.
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 !