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

Smarty assign scope global
#1

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

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}
#3

Bonjour,

Merci de me répondre.

Je viens de tester ta solution mais cela ne change rien.

Cordialement

bobjo
#4

Ok, alors essaye ceci dans ton body :
Code :
[== Indéfini ==]
{ModuleCall assign='foo'}{$foo=$foo scope=global}
source : https://forum.cmsmadesimple.org/viewtopi...80#p329680
#5

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

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

Bonjour,
Je viens de faire le test, ça fonctionne aussi dans le body.
Cordialement,
#8

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}
#9

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
Sujet fermé


Atteindre :


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