[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: !1.7/8/9/10/11
#~ Url du site :
#~ Hébergeur / Soft : Apache
#~ Informations Système :
#~ Cms Version: 1.10.3
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Printing: 1.1.2
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ TinyMCE: 2.8.3
#~ CMSPrinting: 1.0
#~ MicroTiny: 1.1.1
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 300000000
#~ default_upload_permission: 664
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.3.3-7+squeeze15
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 0
#~ memory_limit: 128M
#~ max_execution_time: 60
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 10M
#~ upload_max_filesize: 10M
#~ session_save_path: /var/lib/php5 (1733)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: apache2handler
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.1.66
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour/Bonsoir, tout d'abord, veuillez m'excuser pour cette version obsolète mais dans ma situation actuelle, je ne peux pas le mettre à jour : je suis stagiaire dans une entreprise et je n'ai pas spécialement envie de mettre leur site indisponible.
De plus, la machine qui héberge le serveur n'est pas relié à internet donc aucun risque non? (vu que le message rouge qui s'affichait quand j'ai choisi la version m'a bien fait réfléchir
)
Bon enfin bref! Tout ça pour vous dire que je suis confrontais à un problème, je voudrais réaliser quelque chose d'assez simple : utiliser une balise smarty dans une balise utilisateur (concrètement, invoquer une balise smarty dans une autre).
J'ai fais des recherches et tout, je suis tombé sur ce sujet :
Implémenter une balise Smarty dans une autre (peut pas mettre de lien!) mais soit il n'y a aucun lien avec mon problème, soit je n'ai pas compris les codes qui sont utilisés :/
Et aussi, sur le wiki, j'ai trouvé ce bout de code :
Code :
[== Indéfini ==]
$smarty = cmsms()->GetSmarty();
$smarty_data = "{menu}";
echo $smarty->display('string:'.$smarty_data) ;
Je l'ai implémenté dans une de mes balises mais cela me renvoie une erreur :
Code :
[== Indéfini ==]
../lib/smarty/Smarty.class.php:1593 - trigger_error
../lib/smarty/Smarty.class.php:1415 - _fetch_resource_info
../lib/smarty/Smarty.class.php:1254 - _compile_resource
../lib/smarty/Smarty.class.php:1106 - fetch
../lib/classes/class.usertagoperations.inc.php(260) : eval()'d code:58 - display
../tmp/templates_c/69^%%70^707^707A8977%%content%3Acontent_en.php:6 - cms_user_tag_ldap_add
../lib/smarty/Smarty.class.php:1263 - include
../plugins/function.content.php:121 - fetch
../tmp/templates_c/%%98^983^983F5C9C%%tpl_body%3A20.php:60 - smarty_cms_function_content
../lib/smarty/Smarty.class.php:1263 - include
../index.php:269 - fetch
string(54) "Smarty error: unable to read resource: "string:{menu}""
Je suppose que c'est dû à ma version non?
En tout cas, j'espère que vous avez une solution à mon problème et désolé pour la gêne occasionnée ! :|
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
Bonjour et bienvenue,
Citation :Je suppose que c'est dû à ma version non?
Bien vu! C'est du SMARTY 3.
Toi, tu disposes de SMARTY 2.
Recherche dans le forum "_compile_source", tu trouveras l'ancienne méthode.
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Je me sens minable à côté de certains car je suis passé sur un de vos anciens posts :
[Résolu] Balise utilisateur et, effectivement, j'ai trouvé votre bout de code :
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{NOM_BALISE}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo $final_compiled;
J'ai testé et ça marche nikel .. youhou! ... Mais ... à la base, je voulais faire quelque chose avec ça mais je viens de voir que ce n'est pas possible (ou à moins qu'il existe une autre astuce
)
En faites, ce que je voulais faire, c'est d'utiliser les variables qui sont stockés dans une autre balise.
Exemple :
{fichier_variable}
Code :
[== Indéfini ==]
$test = "bambi";
{recup_variable}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{NOM_BALISE}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo $final_compiled;
echo $test;
Quand j'invoque la balise {recup_variable}, je retrouverai "Bambi".
En gros, je voudrais que la balise {recup_variable} aille récupérer le contenu de la variable $test dans la balise {fichier_variable}? Est-ce possible?
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
je pense que dans {fichier_variable}, il faut que tu passes ta variable à SMARTY, et normalement, tu dois la récupérer:
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$test = "bambi";
$smarty->assign(test,$test);
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
ou bien si tu n'as qu'une variable faire simplement un return $test qur tu récupères directement dans $final_compiled;
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
J'ai essayé votre solution mais ça ne renvoie rien :/ Voici les fichiers que j'ai utilisé :
{param_variables}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$test = "bambi";
$smarty->assign(test,$test);
{recup_variable}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{param_variables}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo $final_compiled;
echo "Le contenu de la variable $test est :".$test;
La page générée m'affiche :
Citation :Le contenu de la variable $test est :
jissey a écrit :ou bien si tu n'as qu'une variable faire simplement un return $test qur tu récupères directement dans $final_compiled;
En faites, je pensais plutôt utiliser un tableau de variables avec un array(), comme ça, je les récupère en faisant $variable[1],$variable[2],$variable[3],....
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
je n'ai pas le temps de tester si tout ça fonctionne...mais si tu fais:
{param_variable}
Code :
[== Indéfini ==]
$test=array();
$test[]="bambi";
$test[]="panpan";
$test[]="Méchant chasseur";
return $test;
tu dois récupérer ton tableau dans : $final_compiled;
Essaie en remplaçant echo $final_compiled; par var_dump($final_compiled);
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
jissey a écrit :je n'ai pas le temps de tester si tout ça fonctionne...mais si tu fais:
Oui je vous comprends, faire du code sans les outils, c'est très difficile à gérer mais déjà, je m'incline pour votre aide précieuse et rapide
Concernant, mon problème, je crois que j'ai trouvé, je vous envoie les codes dans les minutes qui vont suivre !
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Bon j'ai une bonne et une mauvaise nouvelle :
Pour la bonne nouvelle, j'arrive à récupérer une variable de la balise {param_variables} en utilisant ces codes :
{param_variables}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$test="bambi";
return $test;
$smarty->assign(test,$test);
{recup_variable}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{param_variables}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo "Le contenu de la variable $test est :".$final_compiled;
Donc voilà ... et pour la mauvaise nouvelle? Bah je n'arrive pas à reproduire la même chose pour un Array. J'ai procédé comme ceci :
{param_variables}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$test=array();
$test[]="bambi";
$test[]="panpan";
$test[]="Méchant chasseur";
return $test;
$smarty->assign(test,$test);
{recup_variable}
Code :
[== Indéfini ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{param_variables}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo "Le contenu de la variable $test est :".var_dump($final_compiled);
et je récupère ceci :
Citation :string(5) "Array" Le contenu de la variable est :
J'ai utilisé un print_r mais il ne me ressort rien .. comme ci le tableau était vide !
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
J'ai trouvé quelque chose sur le site smarty.net :
Code :
[== Indéfini ==]
$myArray = array('no' => 10, 'label' => 'Peanuts');
$smarty->assign('foo',$myArray);
{$foo.no}, {$foo.label}
En utilisant cette balise, on peut directement appeler les valeurs d'un tableau, je ne sais pas si ça peut vous donner une idée
J'ai essayé de le mettre dans le code mais il n'a pas trop aimé la présence du "$" dans le $foo.label
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
non, en fait, dans param_variable, il ne faut pas assigner la variable à smarty, sinon, il faut la recompiler pour la récupérer...Il faut utiliser le return de PHP.
Je regarde de plus près mais je n'ai pas d'install avec smarty 2.
Je fais un essai avec SMARTY 3 déjà pour voir...
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Ok ok , d'ailleurs j'ai testé un truc marrant, j'ai remplacé return $test; dans {param_variables} par return print_r($test);
J'obtiens la ligne suivante quand j'invoque {recup_variable} :
Citation :Le contenu de la variable est :Array ( [0] => bambi [1] => panpan [2] => Méchant chasseur ) 1
C'est quoi ce 1 après le Array?! :o
PS : Un peu inutile ce que je viens de faire en faites ...
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
bon, je ne trouve pas, ça ne doit pas être la bonne piste.
Je dois partir, si quelqu'un veut prendre la suite...sinon, je jette un oeil à mon retour.
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Me revoilà ! J'ai trouvé une solution alternative à mon problème, grâce à ton aide, j'ai pu "bidouiller" ces scripts pour sortir quelque chose.
Voici mes 2 scripts :
{param_variables}
Code :
[== PHP ==]
$test=array();
$test[]="bambi";
$test[]="panpan";
$test[]="méchant chasseur";
//----------------------------------------------------------------------------------------------
for ($i = 0; $i <= (count($test)-1); $i++) {
if ($i!=(count($test)-1)) {
$tableau .="$test[$i], ";
}
else {
$tableau .="$test[$i]";
}
}
global $gCms;
$smarty = &$gCms->GetSmarty();
return $tableau;
$smarty->assign(tableau,$tableau);
{recup_variable}
Code :
[== PHP ==]
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{param_variables}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo "Le résultat est ".$final_compiled."<br>";
$test = explode(",", $final_compiled);
for ($i = 0; $i <= (count($test)-1); $i++) {
echo "Le résultat numéro ".$i." est ".$test[$i]."<br>";
}
Et j'obtiens ce magnifique résultat :p :
Citation :Le résultat est bambi, panpan, méchant chasseur
Le résultat numéro 0 est bambi
Le résultat numéro 1 est panpan
Le résultat numéro 2 est méchant chasseur
C'est un peu gamin ce que j'ai fais mais j'ai obtenu ce que je voulais ... je suis sûr qu'il existe une fonction déjà prédéfini pour sortir un array d'une autre balise mais je n'ai rien trouvé
.
Donc voilà! Je voulais savoir qu'est-ce que vous en pensez?
D'ailleurs, j'ai une dernière question, si je veux mettre plusieurs array dans la balise
{param_variables}, comme par exemple :
Code :
[== PHP ==]
$disney=array();
$disney[]="bambi";
$disney[]="panpan";
$disney[]="méchant chasseur";
$ville=array();
$ville[]="Bordeaux";
$ville[]="Grenoble";
$ville[]="Paris";
Comment je fais pour récupérer séparement
$disney et
$ville depuis la balise
{recup_variable}?
Je pensais qu'en rajoutant
$smarty->assign(ville,$ville); ça marcherait mais vu que j'utilise
$final_compiled, je l'ai dans l'os ...
[Résolu] Utiliser une balise utilisateur dans une autre. -
Jean le Chauve - 22/03/2013
C'est pour quoi faire tout ça ?
Tu pourrais aussi utiliser append sans passer par une udt (
http://www.smarty.net/docs/en/language.function.append.tpl#id449590) si c'est juste pour afficher des variables :
{assign var=foo value=[1,2,3]}
{assign var=foo value=['y'=>'yellow','b'=>'blue']}
{assign var=foo value=[1,[9,8],3]} // can be nested
Voir
http://www.smarty.net/docs/en/language.syntax.variables.tpl#id428565
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Jean le Chauve a écrit :C'est pour quoi faire tout ça ?
Pour résumé, mon maître de stage veut avoir accès à une sorte de fichier de config où il puisse ajouter, modifier ou supprimer des variables (exemple : nom de société). Ce fichier de configuration sera utilisé pour alimenter tous les udts du CMS.
Pour être plus précis, je dois créer un onglet "Annuaire" qui présentera tout le contenu d'un serveur LDAP avec interface graphique qui permet d'ajouter/modifier/supprimer des entrées.
Voici un screenshoot de mon interface (avec quelques informations cachées bien sûr!)
Jean le Chauve a écrit :Tu pourrais aussi utiliser append sans passer par une udt
(### si c'est juste pour afficher des variables :
{assign var=foo value=[1,2,3]}
{assign var=foo value=['y'=>'yellow','b'=>'blue']}
{assign var=foo value=[1,[9,8],3]} // can be nested
Voir ###
Oui mais ces balises smarty ne sont pas utilisables dans une udt non? A moins que je n'ai pas compris quelque chose... :/
[Résolu] Utiliser une balise utilisateur dans une autre. -
bess - 22/03/2013
autre solution : créé un fichier myconfig.php configuré ainsi :
Code :
<?php
$config['extra'] = array();
$config['extra']['toto'] = 'toto';
$config['extra']['tata'] = 'tata';
?>
modifier config.php, ajouter vers la fin :
Code :
include_once('myconfig.php');
?>
maintenant tu peux PARTOUT utiliser
Code :
$config = $cmsms()->GetConfig();
$config_extra = $config['extra'];
et exploiter les données.
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
bess a écrit :autre solution : créé un fichier myconfig.php configuré ainsi :
Code :
<?php
$config['extra'] = array();
$config['extra']['toto'] = 'toto';
$config['extra']['tata'] = 'tata';
?>
modifier config.php, ajouter vers la fin :
Code :
include_once('myconfig.php');
?>
maintenant tu peux PARTOUT utiliser
Code :
$config = $cmsms()->GetConfig();
$config_extra = $config['extra'];
et exploiter les données.
Votre idée me plaît énormément! Je me suis empressé à le tester mais j'ai un message d'erreur :
Citation :Fatal error: Function name must be a string in /var/www/citroen/lib/classes/class.usertagoperations.inc.php(260) : eval()'d code on line 83
[Résolu] Utiliser une balise utilisateur dans une autre. -
Jean le Chauve - 22/03/2013
Je comprends mieux.
Essaye en remplaçant $config = $cmsms()->GetConfig(); par
global $gCms;
$config = &$gCms->GetConfig();
[Résolu] Utiliser une balise utilisateur dans une autre. -
DarkVlad - 22/03/2013
Jean le Chauve a écrit :Je comprends mieux.
Essaye en remplaçant $config = $cmsms()->GetConfig(); par
global $gCms;
$config = &$gCms->GetConfig();
Ah bah... sans le global c'est sûr que ... :| .. *mode boulet*
Du coup en essayant ces lignes de commandes :
Code :
[== PHP ==]
global $gCms;
$config = &$gCms->GetConfig();
$config_extra = $config['extra'];
echo $config_extra['toto'];
J'obtiens bien le résultat "toto" sur ma page!
En rajoutant d'autres variables comme
Code :
[== Indéfini ==]
<?php
$config['extra'] = array();
$config['extra']['0'] = 'toto';
$config['extra']['1'] = 'tata';
//--------------------------------
$config['ville']['0'] = 'Bordeaux';
$config['ville']['1'] = 'Grenoble';
?>
Je peux belle et bien les invoquer !
Code :
[== PHP ==]
global $gCms;
$config = &$gCms->GetConfig();
$config_extra = $config['extra'];
$config_ville = $config['ville'];
echo $config_extra['0'];
echo $config_ville['0'];
Merci à vous 3 les pros !
[Résolu] Utiliser une balise utilisateur dans une autre. -
Jean le Chauve - 22/03/2013
Oh, je n'ai rien à voir la-dedans, je suis juste passé avant les autres qui t'auraient donné la même réponse
Bon amusement avec tes codes.
N'oublie-pas le petit [Résolu] dans le titre de ce fil en modifiant ton premier post
[Résolu] Utiliser une balise utilisateur dans une autre. -
jissey - 22/03/2013
bon, ben je vois que tout est résolu
Tant mieux.
Bonne continuation
Et comme le dit SA Seigneurerie :
Citation :N'oublie-pas le petit [Résolu] dans le titre de ce fil en modifiant ton premier post :p
[Résolu] Utiliser une balise utilisateur dans une autre. -
bess - 25/03/2013
mon code était fonctionnel cmsms 1.10+ effectivement