- 1
[Opened] jTpl à la volée
Posted by mich on 07/18/2011 10:01
Bonjour à tous,
Je me demandais si il est possible de créer des jTpl à la volée. Par exemple dans le cas suivant : L'objectif du module est d'enregistrer des actions effectuées dans d'autres modules. Pour cela ce module "log" possède un listener. Les modules "autres" vont donc émettre des évènements avec en paramètre un texte : Michel a effectué une modification sur <a href="{jurl 'monmodule~ctrl:action', array('foo' => 'bar')}">bar</a>
J'aimerai donc enregistrer directement en base de donnée cette chaine, mais lors de l'affichage j'aimerai qu'elle soit interprétée par jTpl. J'aimerai conserver la chaine afin de permettre de changer de moteur d'url n'importe quand, mais aussi car les différents liens et leurs quantités sont indéterminés.
Est-ce que cela est possible et est-ce que je m'y prend correctement ? Si vous avez d'autres pistes n'hésitez pas.
Merci merci !
[Opened] jTpl à la volée
Posted by manooweb on 07/18/2011 10:23
Hello,
Oui c'est possible ! Utilises l'objet jTpl. J'ai procédé comme cela dans le module jGmap pour générer à la volée du javascript à partir d'une classe.
$myTemplate = new jTpl(); $myTemplate->assign('myTemplateVariable','truc'); $templateGenerated = $myTemplate->fetch('myModule~myTemplateName');
Manu
[Opened] jTpl à la volée
Posted by mich on 07/18/2011 10:43
Merci pour cette réponse rapide, je pense que cette utilisation n'est pas adaptée car elle n'interprète pas les balises de template {jurl ...}
Si j'utilise
$tpl = new jTpl(); $tpl->assign('montexte', 'Michel a effectué une modification sur <a href="{jurl \'monmodule~ctrl:action\', array(\'foo\' => \'bar\')}">bar</a>'); $generated = $tpl->fetch('test');
J'obtiendrais dans $generated :
Michel a effectué une modification sur <a href="{jurl 'monmodule~ctrl:action', array('foo' => 'bar')}">bar</a>
Hors j'aimerai obtenir :
Michel a effectué une modification sur <a href="index.php/monmodule/ctrl/action?foo=bar">bar</a>
[Opened] jTpl à la volée
Posted by manooweb on 07/18/2011 11:34
{jurl ....} est directement dans le template donc tu n'as pas à la passer dans une variable lors de la génération du template. si tu veux avoir une url dans le code php il faut utiliser la méthode statique jUrl::get
Cf. http://jelix.org/articles/fr/manuel-1.3/urls#utilisation
Manu
[Opened] [RESOLU] jTpl à la volée
Posted by mich on 07/18/2011 11:36
Voilà la solution que j'ai trouvée pour ce cas. J'ai simplement créé un fichier template temporaire et j'écris dedans. Ensuite j'utilise fetch()
en faisant appel à ce template temporaire.
$path = dirname(__FILE__); $tmp = fopen($path.'/../templates/tmp.tpl','w'); fputs($tmp, 'Michel a effectué une modification sur <a href="{jurl \'monmodule~ctrl:action\', array(\'foo\' => \'bar\')}">bar</a>'); fclose($tmp); $tpl = new jTpl(); $generated = $tpl->fetch('tmp');
Du coup j'obtiens $generated =
Michel a effectué une modification sur <a href="index.php/monmodule/ctrl/action?foo=bar">bar</a>
J'utilise ensuite cette variable comme bon me semble :)
[Opened] [RESOLU] jTpl à la volée
Posted by mich on 07/18/2011 11:39
m@noo a dit :
{jurl ....} est directement dans le template donc tu n'as pas à la passer dans une variable lors de la génération du template.
si tu veux avoir une url dans le code php il faut utiliser la méthode statique jUrl::get
Cf. http://jelix.org/articles/fr/manuel-1.3/urls#utilisation
Cette méthode est inadaptée, car je ne peux connaitre à l'avance les liens et les quantités qui doivent être générés. Je voulais justement stocker le template dans ma base pour le réutiliser ensuite.
[Opened] jTpl à la volée
Posted by manooweb on 07/18/2011 11:48
ben ton {jurl ...} tu le laisses dans ton template et tu passes uniquement en paramètre les infos pour le construire (module controleur action, paramètres) tu fais une boucle sur une liste d'enregistrement qui comprend tous ces paramètres.
Manu
[Opened] [RESOLU] jTpl à la volée
Posted by mich on 07/18/2011 14:09
Oui, c'est aussi une bonne solution. J'avais justement ces 2 là en tête. C'est en cours de conception. Je vais opter pour cette dernière qui est plus propre. Merci pour ces conseils.
- 1