Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu] Utiliser une balise utilisateur dans une autre.
#1

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 Rolleyes )

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 ! :|
#2

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.

{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)
#3

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 Wink )
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? Big Grin
#4

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);

{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)
#5

ou bien si tu n'as qu'une variable faire simplement un return $test qur tu récupères directement dans $final_compiled; Smile

{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)
#6

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],....
#7

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);

{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)
#8

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 Smile

Concernant, mon problème, je crois que j'ai trouvé, je vous envoie les codes dans les minutes qui vont suivre !
#9

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 !
#10

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 Smile J'ai essayé de le mettre dans le code mais il n'a pas trop aimé la présence du "$" dans le $foo.label
#11

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...

{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)
#12

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 ...
#13

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.

{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)
#14

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é Sad .

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 ...
#15

C'est pour quoi faire tout ça ?
Tu pourrais aussi utiliser append sans passer par une udt (http://www.smarty.net/docs/en/language.f...l#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.s...l#id428565
#16

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!)

[Image: 324710tableau5.png]

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... :/
#17

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.
#18

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
#19

Je comprends mieux.
Essaye en remplaçant $config = $cmsms()->GetConfig(); par
global $gCms;
$config = &$gCms->GetConfig();
#20

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! Big Grin

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 ! Smile
#21

Oh, je n'ai rien à voir la-dedans, je suis juste passé avant les autres qui t'auraient donné la même réponse Wink
Bon amusement avec tes codes.
N'oublie-pas le petit [Résolu] dans le titre de ce fil en modifiant ton premier post Wink
#22

bon, ben je vois que tout est résolu Smile
Tant mieux.
Bonne continuation Cool

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

{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)
#23

mon code était fonctionnel cmsms 1.10+ effectivement Smile
Sujet fermé


Atteindre :


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