Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
udt et smarty - remplacer methode _compile_source
#1
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...
Répondre
#2
>Par contre pour utiliser évaluer la balise smarty et ne pas l'afficher de suite

heuu j'ai pas compris ? :/
Répondre
#3
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>
Répondre
#4
ok j'ai compris ... merci de l'info Wink
Répondre
#5
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
Répondre
#6
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?
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#7
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">
Répondre
#8
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.
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#9
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);
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)