Forum CMS Made Simple FR

Version complète : udt et smarty - remplacer methode _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.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...
>Par contre pour utiliser évaluer la balise smarty et ne pas l'afficher de suite

heuu j'ai pas compris ? :/
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>
ok j'ai compris ... merci de l'info Wink
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
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?
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">
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.
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);