Forum CMS Made Simple FR

Version complète : [Résolu]Recuperation d'une variable d'un module dans le gabarit ...
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.12
#~ Url du site : pas le droit de vous le dire :-)
#~ Hébergeur / Soft : dédié ovh - debian - lamp - php 5.6.7
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.12
#~ Installed Modules:
#~ CMSMailer: 5.2.2
#~ CMSPrinting: 1.0.5
#~ FileManager: 1.4.5
#~ MenuManager: 1.8.6
#~ MicroTiny: 1.2.9
#~ ModuleManager: 1.5.8
#~ News: 2.15.1
#~ Search: 1.7.12
#~ ThemeManager: 1.1.8
#~ Gallery: 2.0.2
#~ CGExtensions: 1.49.7
#~ MleCMS: 1.11.4
#~ CGSimpleSmarty: 1.9.1
#~ CGContentUtils: 1.5.1
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ max_upload_size: 10000000
#~ url_rewriting: mod_rewrite
#~ 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.6.7-1
#~ 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: 120
#~ 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/sessions (1733)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: apache2handler
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.5.43
#~ Server Db Grants: Trouvé un privilège "GRANT ALL" qui semble être adapté
#~ Server Time Diff: Aucune différence de date du système de fichiers trouvées
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour à tous,

Je débute dans l'utilisation de ce Cms, qui me plait beaucoup pour plein de raisons, mais là je sèche un peu sur un probleme de passage de variable entre un template d'un module et le template (gabarit) principal de ma page (basé sur le gabarit Simplex).

Je tiens tout d'abord à préciser que j'ai lu de nombreux posts et tutoriels (dont celui du tres bon Goran Ilic sur son blog arvixe) mais sans y trouver la solution à mon problème.

J'utilise le module MleCMS pour avoir une version française et une version anglaise de mon site, et j'utilise le module Gallery (2.0.2) pour afficher une gallerie d'images.

J'ai crée un page "Galerie", contenant plusieurs galeries d'images ayant chacune un titre.

Quand je suis sur la page Galerie, le titre de ma page devient "Galerie", et le fil d'ariane (breadcrumb) affiche bien là ou je me trouve...

Ce que je souhaites réaliser, c'est remplacer le titre de ma page et le lien du fil d'ariane quand je suis sur une galerie particuliere (exactement le meme principe que pour les News, avoir le titre d'une news plutot que le titre de la catégorie News).

Dans mon template de Galerie individuelle (AE-galery), j'ai ajouté l'instruction {assign var='get_title' value=$gallerytitle} en tout début.

Toujours dans le meme gabarit, en lieu et place de la balise {$gallerytitle}, j'ai mis la balise {$get_title}.... cela fonctionne parfaitement...

Dans mon gabarit principal (simplex), j'ai ajouté juste apres {process_pagedata} la condition suivante:

{if !isset($get_title)}
{title assign='get_title'}
{/if}

J'ai suivi le blog de Goran (mais je n'ai pas encore le droit de vous mettre le lien :-))...

puis, dans le header de mon gabarit, j'ai remplacé <title> {title} </title> par <title> {$get_title} </title>

jusque là, tout va bien, le titre de ma page devient le titre de ma galerie d'image.....

par contre, je ne peux utiliser cette variable nulle part ailleurs ?!? et c'est là que je sèche....

je souhaitais la récupérer dans le fil d'ariane que j'ai personnalisé par mon propre template.... nada....

pensant que je faisais une mauvaise manip, j'ai voulu afficher ce titre n'importe ou dans la page (entre les balises <body>)... nada

j'ai essayé de créer une balise meta bidon en mettant ma variable dans le contenu... ca marche !!

je recrée un <p>{$get_title}</p> juste apres ma balise <body>..... nada.... j'obtiens <body><p></p>....

donc voila mon probleme.... je peux inclure le contenu de ma variable dans le header de ma page, mais pas dans le body ?!?!

peut-etre ai-je loupé une information concernant la "portée" des variables smarty ? je ne sais plus.... je m'en remets à vous pour éclairer ma lanterne :-)

j'espère que mon message est assez clair et précis....

merci d'avance à ceux qui voudront bien se pencher sur mon probleme....

cordialement,
stephane
Bonjour et bienvenue à toi Stéphane,

Essaye avec un {assign var='get_title' value=$gallerytitle nocache scope='global'}
http://www.smarty.net/docs/en/language.f...assign.tpl

Tu peux écrire une url sans le www. même si tu n'as pas encore posté 10 messages Wink
bonjour Jean le Chauve,

merci pour ta réponse, j'ai testé mais.... malheureusement sans succès...

je récupère bien ma variable dans le header (<head></head>) de mon gabarit principal, le titre de ma page change comme souhaité, mais je ne peux pas récupérer cette variable dans le body (et encore moins dans le breadcrumbs.... ce que je cherche a faire en fait).

je viens d'essayer avec le module de News, en créant une nouvelle page, j'ai mis le gabarit NCleanBlue.... idem....

par contre j'ai remarqué que lorsque je mets la condition if !isset($get_title).... {title assign='get_title'}.... au début de mon gabarit, juste apres {process_pagedata}, et que j'appelle ma variable dans le header, j'ai le titre de ma news, mais dans le body j'ai le titre de la page News (pas le titre du détail donc)... et lorsque je ne mets pas cette condition, rien ne s'affiche dans le body (le header est ok)....

j'ai l'impression que c'est une histoire "d'ordre" dans lequel smarty génère la page en fonction des différentes données:

1 - il charge le gabarit par défaut, donc ne trouve pas get_title et lui assigne title...
2 - il traite le <body>, donc avec get_title = title,
3- il traite le breadcrumbs, toujours avec get_title = title,
4 - il traite le {content}, donc avec get_title = title, mais là, ma page modifie le get_title en lui assignant le {$gallerytitle},
5 - il traite le header (<head></head>) mais là, get_title est renseigné par $gallerytitle donc il ne lui assigne pas {title}.... et j'ai bien mon {$gallerytitle} qui s'affiche partout ou j'ai ma balise {$get_title} (donc dans le titre de ma page) ....

c'est peut-etre le fonctionnement par défaut de smarty, mais du coup, comment peut-on récupérer une variable assignée dans le template d'une page ? c'était bien vu le scope="global" mais ca ne fonctionne pas si ma logique concernant l'ordre de traitement est la bonne....

j'avoue qu'à force de chercher, je m'embrouille..... j'ai l'impression de passer à coté de quelque chose d'hyper simple et évident mais je seche..... parfois on cherche des choses hyper compliquées alors que la solution est simple..... d'ou l'intéret de bosser à plusieurs (ce qui n'est pas mon cas) ou d'intégrer une communauté :-D

merci en tout cas de vous pencher sur mon probleme ;-)

cordialement,
stephane
yessssssssss ca y est j'ai trouvé :-)

comme je le disais, la solution était super simple :-)

en fait, c'etait bien une question d'ordre de traitement des variables smarty dans le gabarit principal....

la solution: juste apres le tag <body>, j'ai rajouté {content assign='mycontent'}..... et bien sur, dans le corps de ma page, j'ai remplacé {content} par {$mycontent} ..... ainsi ma variable {$get_title} est disponible partout (titre du document, titre de page, breadcrumbs....) :-)
Oui, effectivement, il y a un ordre que tu peux vérifier avec $config['debug'] = true; dans le config.php.
Pour parer à cela, tu peux appeler le {content} avant toute autre chose.
Écris {content assign=pagecontent} tout en haut du gabarit (avant {process_pagedata}), puis remplace {content} par {$pagecontent} (dans le body).
Je pense que ça doit marcher.
Oups, on s'est croisé :lol:
Félicitations pour ton raisonnement.
C'est dans ces moments (Yessssss, j'ai trouvé) qu'on adore développer Smile

N'oublie pas de modifier le titre de ce post en y plaçant [Résolu].
merci Jean le Chauve :-)

oui c'est dans ces moments qu'on adore développer et qu'on se dit "m**** !! pourquoi je cherche toujours des trucs compliqués alors que d'autres font tout pour nous simplifier la tache :-)"

ceci dit, ca permet aussi de toujours en apprendre.... je connais smarty depuis.... presque le début, mais je ne savais pas qu'avec la version 3 la fonction assign disposait des parametres/options nocache et scope ;-)

bonne journée à tous, je vais faire un peu de css maintenant pour changer un peu :-)