Forum CMS Made Simple FR
udt et smarty - remplacer methode _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 : udt et smarty - remplacer methode _compile_source (/thread-2572.html)



udt et smarty - remplacer methode _compile_source - snatch1974 - 05/02/2013

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.4
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Juste un petit truc que je viens de découvrir car j'avais un problème.

Pour remplacer la méthode _compile_source avec smarty 3, dans le wiki il est mentionné d'utiliser :

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

Par contre pour utiliser évaluer la balise smarty et ne pas l'afficher de suite
il faut utiliser $smarty->fetch('string:'.$smarty_data):

pour mon problème, une carte avec mapping ça m'a donné ceci:

Code :
[== Indéfini ==]
$smarty = &cmsms()->GetSmarty();
foreach ($region as $val=>$coo) {

      $val = htmlentities($val, ENT_QUOTES);

      $smarty = &cmsms()->GetSmarty();
      $smarty_data = "{cms_selflink href='region' text='$val' urlparam='?l=$val'}";
    
      echo '<area alt="'.html_entity_decode($val).'" href="'.$smarty->fetch('string:'.html_entity_decode($smarty_data)).'" coords="'.$coo.'" shape="poly">';

}


Pt'être que ça peut servir à d'autres...


udt et smarty - remplacer methode _compile_source - bess - 06/02/2013

>Par contre pour utiliser évaluer la balise smarty et ne pas l'afficher de suite

heuu j'ai pas compris ? :/


udt et smarty - remplacer methode _compile_source - snatch1974 - 06/02/2013

Si on utilise $smarty->display() la balise smarty s'affiche automatiquement dû au "display" et dans mon cas exemple, ça affiche le lien en ltéral sur le site mais en dehors du "href" qui lui se retrouve vide.

Avec le $smarty->fetch c'est comme si la balise smarty devenait une variable...

je sais pas si c'est trés clair...


un autre exemple:

Code :
[== Indéfini ==]
$smarty = &cmsms()->GetSmarty();
$smarty_data = "{cms_selflink page='region' text='$val' urlparam='?l=$val'}";
      
echo '<h4>'.$smarty->display('string:'.html_entity_decode($smarty_data)).'</h4>';

donne ça en frontend:

Code :
[== Indéfini ==]
<a title="par region" href="http://www.nextride.eu/region.html?l=Alsace">Alsace</a>
<h4></h4>


alors qu'avec fetch:


Code :
[== Indéfini ==]
$smarty = &cmsms()->GetSmarty();
$smarty_data = "{cms_selflink page='region' text='$val' urlparam='?l=$val'}";
      
echo '<h4>'.$smarty->fetch('string:'.html_entity_decode($smarty_data)).'</h4>';

donne ça en frontend:

Code :
[== Indéfini ==]
<h4><a title="par region" href="http://www.nextride.eu/region.html?l=Alsace">Alsace</a></h4>



udt et smarty - remplacer methode _compile_source - bess - 06/02/2013

ok j'ai compris ... merci de l'info Wink


udt et smarty - remplacer methode _compile_source - snatch1974 - 06/02/2013

De rien, si ça peut éviter à d'autres de galérer comme je l'ai fait pour comprendre ce qui n'allait pas au départ... Big Grin


udt et smarty - remplacer methode _compile_source - jissey - 07/02/2013

s'cusez moi messieurs, mais moi je ne comprends pas vite.
Dans l'exemple que tu donnes, avec display, le href n'est pas vide?
La différence que je vois est la balise H4 qui se trouve après le display, mais la balise a est bien générée dans la 2 cas de la même manière?


udt et smarty - remplacer methode _compile_source - snatch1974 - 07/02/2013

non, dans le premier cas, la balise smarty ne génère que l'adresse d'une page (le href) alors que dans le second cas elle génère un lien complet vers une page (balise a).

donc, dans l'exemple 1

avec:
Code :
[== Indéfini ==]
$smarty = &cmsms()->GetSmarty();
      $smarty_data = "{cms_selflink href='region' text='$val' urlparam='?l=$val'}";
    
      echo '<area alt="'.html_entity_decode($val).'" href="'.$smarty->display('string:'.html_entity_decode($smarty_data)).'" coords="'.$coo.'" shape="poly">';

on obtient en affichage par exemple:
Code :
[== Indéfini ==]
http://www.nextride.eu/region.html?l=Rhône-Alpes
<area shape="poly" coords="419,304,424,305,433,303,438,297,445,297,451,302,454,294,454,282,467,283,472,290,480,289,488,289,494,281,500,288,505,288,503,281,511,276,524,276,525,288,531,292,534,301,527,308,543,323,543,334,527,344,519,348,512,345,511,349,515,354,515,358,510,359,492,375,493,379,494,382,490,381,490,389,496,391,495,398,481,393,475,393,471,396,461,396,452,396,446,398,442,395,437,391,429,383,432,375,442,363,448,349,445,349,437,343,434,345,426,345,427,337,423,331,417,327,416,321,416,318,419,313,415,309,415,305" href="" alt="Rhône-Alpes">

alors qu'avec fetch on obtient:

Code :
[== Indéfini ==]
<area shape="poly" coords="419,304,424,305,433,303,438,297,445,297,451,302,454,294,454,282,467,283,472,290,480,289,488,289,494,281,500,288,505,288,503,281,511,276,524,276,525,288,531,292,534,301,527,308,543,323,543,334,527,344,519,348,512,345,511,349,515,354,515,358,510,359,492,375,493,379,494,382,490,381,490,389,496,391,495,398,481,393,475,393,471,396,461,396,452,396,446,398,442,395,437,391,429,383,432,375,442,363,448,349,445,349,437,343,434,345,426,345,427,337,423,331,417,327,416,321,416,318,419,313,415,309,415,305" href="http://www.nextride.eu/region.html?l=Rhône-Alpes" alt="Rhône-Alpes">



udt et smarty - remplacer methode _compile_source - jissey - 07/02/2013

je crois que j'ai compris, mais tes exemples ne sont pas clairs . Tu parles de display alors que tu as écris fetch dans le premier cas.
En tout cas merci, ça me servira un jour, c'est sûr.


udt et smarty - remplacer methode _compile_source - snatch1974 - 07/02/2013

C'est vrai, j'ai corrigé... comme c'est un copier-coller de mon code d'origine utilisant fetch, j'ai oublié de le modifier après le collage! :p

Ca sert aussi pour mettre la balise smarty en variable du style:
Code :
[== Indéfini ==]
$smarty = &cmsms()->GetSmarty();
$smarty_data = "{cms_selflink href='region' text='$val' urlparam='?l=$val'}";

$lien = $smarty->fetch('string:'.html_entity_decode($smarty_data));

et utiliser $lien plus loin et plusieurs fois par exemple.

ou, ça peut aider pour imbriquer des balises smarty par ex.

Code :
[== Indéfini ==]
$smarty = &cmsms()->GetSmarty();
$smarty_img = "{CGSmartImage src=$file filter_resize='h,150' notag=1 noembed=1}";

$smarty_link = "{cms_selflink dir = 'next' image = '$smarty->fetch('string:'.$smarty_img)' text = 'Next'}";

echo $smarty->display('string:'.$smarty_link);