Smarty assign scope global -
bobjo - 09/03/2017
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.3
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
Sur un site j'utilise CGBlog. Dans le gabarit de détail des article je passe le titre à une variable smarty afin de l'utiliser dans mon gabarit principal pour l'intégrer dans la balise title.
Assignation du titre de l'article :
Code :
[== Indéfini ==]
{assign var='actu_title' value=$entry->title scope='global'}
Intégration dans la balise title du gabarit principal :
Code :
[== Indéfini ==]
<title>{if isset($actu_title)}{$actu_title}{else}{title}{/if} - {sitename}</title>
Je suis entrain d'intégrer des microdata dans mes pages et j'ai besoin du titre de mon article.
Étrangement, lorsque je met ma variable {$actu_title} en dehors de la balise head je n'ai rien qui s'affiche...
Code :
[== HTML ==]
<head>
...
<title>{if isset($actu_title)}{$actu_title}{else}{title}{/if} - {sitename}</title>
<!-- Ici la variable affiche bien le titre de mon article -->
...
</head>
<body>
{$actu_title}
<!-- Ici la variable n'affiche rien -->
...
</body>
J'ai testé en mettant la variable juste avant la fermeture de la balise head, j'ai bien le titre de mon article.
J'ai testé en mettant la variable entre la fermeture de ma balise head et l'ouverture de la balise body, rien.
J'ai testé en mettant la variable juste après l'ouverture de la balise body, rien.
Je ne comprend pas pourquoi ma variable se vide (ou est détruite) après la fermeture de la balise head.
Si vous avez des réponses ou des solutions merci d'avance
Cordialement
bobjo
Smarty assign scope global -
Jean le Chauve - 09/03/2017
Je crois qu'écrire ton code comme ceci devrait te permettre de rendre la variable disponible dans le body et les autres gabarits :
Code :
{assign var='actu_title' value=$entry->title}
{$actu_title=$actu_title scope=global}
Smarty assign scope global -
bobjo - 09/03/2017
Bonjour,
Merci de me répondre.
Je viens de tester ta solution mais cela ne change rien.
Cordialement
bobjo
Smarty assign scope global -
Jean le Chauve - 09/03/2017
Ok, alors essaye ceci dans ton body :
Code :
[== Indéfini ==]
{ModuleCall assign='foo'}{$foo=$foo scope=global}
source :
https://forum.cmsmadesimple.org/viewtopic.php?p=329680#p329680
Smarty assign scope global -
Azam - 09/03/2017
Bonjour,
La solution ci-dessous fonctionne chez moi.
Gabarit de détail CGBlog
Code :
[== Indéfini ==]
{$titre=$entry->title scope='global'}
Gabarit de page
Code :
[== Indéfini ==]
<title>{if !empty($titre)}{$titre}{else}{title}{/if} - {sitename}</title>
Bonne soirée
Smarty assign scope global -
bobjo - 10/03/2017
Bonjour,
@Jean le Chauve : Je viens de tester la seconde solution que tu me propose. Mais je ne comprend pas bien ce que je dois mettre dans mon gabarit.
Dans un premier temps j'ai mis ça :
Code :
[== Indéfini ==]
{ModuleCall assign='actu_title'}{$actu_title=$actu_title scope=global}
Mais cela me met une page d'erreur et me dit que ModuleCall n'existe pas.
Dans un deuxième temps j'ai mis ça :
Code :
[== Indéfini ==]
{CGBlog assign='foo'}{$foo=$foo scope=global}
La j'ai pas d'erreur mais $foo je ne sais pas comment la renseigner.
Dans troisième temps j'ai mis ça :
Code :
[== Indéfini ==]
{CGBlog assign='actu_title'}{$actu_title=$actu_title scope=global}
J'ai pas d'erreur mais le gabarit est tout explosé...
Puis j'ai essayé ça dans le gabarit du détail article:
Code :
[== Indéfini ==]
{CGBlog assign='actu_title'}
{$actu_title=$entry->title scope='global'}
J'ai pas d'erreur mais j'ai pas le titre de mon article
@Azam : J'utilise le même système que toi pour afficher le title dans mon gabarit est cela fonctionne temps que je reste dans la balise head.
Le problème c'est lorsque je veux utiliser ma variable dans la balise body il semble qu'elle soit vidée ou supprimée.
Tu peux essayer sur ton site. Tu place ta variable {$titre} dans la balise body de ton gabarit rien ne sera affiché.
Merci à vous de prendre du temps pour mon problème.
Cordialement
bobjo
Smarty assign scope global -
Azam - 10/03/2017
Bonjour,
Je viens de faire le test, ça fonctionne aussi dans le body.
Cordialement,
Smarty assign scope global -
Jean le Chauve - 10/03/2017
Effectivement, modulecall doit être remplacé par le nom du module qui est ainsi assigné à la variable $foo, ce qui permet de pouvoir faire plusieurs appels à ce module dans le même gabarit, sans devoir requêter la BD à chaque appel.
Mais, j'ai été trop vite pour te proposer cela, et n'est pas utile dans ce cas.
C'est quoi, la version de ton cms ? Parce qu'Azam a raison, ta variable devrait être disponible partout.
Sinon, essaye ceci dans ta head :
Code :
[== Indéfini ==]
{share_data data='actu_title' scope=global}
Smarty assign scope global -
bobjo - 10/03/2017
Bonjour,
Ma version de CMSMS est 2.1.3 (c'est précisé dans le premier poste)
J'ai trouvé une solution en mettant le type de microdata dans la balise html au lieu de la balise body.
Ainsi je peux mettre ma variable dans la balise head.
Mais je ne sais pas dans quelle mesure cela est une bonne pratique (j'ai suivie les exemples que fourni google et schema.org pour l'intégration des microdata) bien que l'outil de teste de google ne retourne pas d'erreur.
Je vais tester ta dernière solution et je vous tiens au courant.
Encore une fois merci.
Cordialement
bobjo