Vous n'êtes pas identifié(e).

Annonce

ATTENTION

  • Prenez le temps de rechercher si quelqu'un n'a pas déjà proposé une solution à votre problème. Sur le forum français et sur le wiki
  • Pensez à mettre à jour votre version de CMS Made Simple. Nous ne faisons de support que sur LA dernière version de CMS Made Simple.
  • Renseignez impérativement le formulaire de nouveau message de manière la plus complète que possible. Dans votre CMS utiliser le menu Administration du site/Informations du système en haut Vue au format texte. Ces informations demandées nous permettent de mieux vous aider
  • Ajoutez [Résolu] au début du titre de votre 1er message lorsqu'une solution a été trouvée.

#1 09/03/2017 16:35:57

bobjo
Membre
Inscription : 24/02/2012
Messages : 172

Smarty assign scope global

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

[== Indéfini ==]
{assign var='actu_title' value=$entry->title scope='global'}

Intégration dans la balise title du gabarit principal :

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

[== 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

Hors ligne

 

#2 09/03/2017 16:58:19

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 687
Site Web

Re : Smarty assign scope global

Je crois qu'écrire ton code comme ceci devrait te permettre de rendre la variable disponible dans le body et les autres gabarits :

{assign var='actu_title' value=$entry->title}
{$actu_title=$actu_title scope=global}

Hors ligne

#3 09/03/2017 17:25:17

bobjo
Membre
Inscription : 24/02/2012
Messages : 172

Re : Smarty assign scope global

Bonjour,

Merci de me répondre.

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

Cordialement

bobjo

Hors ligne

#4 09/03/2017 17:45:40

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 687
Site Web

Re : Smarty assign scope global

Ok, alors essaye ceci dans ton body :

[== Indéfini ==]
{ModuleCall assign='foo'}{$foo=$foo scope=global}

source : https://forum.cmsmadesimple.org/viewtop … 80#p329680

Dernière modification par Jean le Chauve (09/03/2017 17:47:49)

Hors ligne

#5 09/03/2017 19:53:06

Azam
Membre
Lieu : Loubressac (Lot)
Inscription : 17/10/2008
Messages : 73
Site Web

Re : Smarty assign scope global

Bonjour,
La solution ci-dessous fonctionne chez moi.
Gabarit de détail CGBlog

[== Indéfini ==]
{$titre=$entry->title scope='global'}

Gabarit de page

[== Indéfini ==]
<title>{if !empty($titre)}{$titre}{else}{title}{/if} - {sitename}</title>

Bonne soirée

Hors ligne

#6 10/03/2017 10:08:08

bobjo
Membre
Inscription : 24/02/2012
Messages : 172

Re : Smarty assign scope global

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 :

[== 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 :

[== 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 :

[== 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:

[== 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

Dernière modification par bobjo (10/03/2017 10:17:49)

Hors ligne

#7 10/03/2017 12:39:53

Azam
Membre
Lieu : Loubressac (Lot)
Inscription : 17/10/2008
Messages : 73
Site Web

Re : Smarty assign scope global

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

Hors ligne

#8 10/03/2017 16:33:19

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 687
Site Web

Re : Smarty assign scope global

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 :

[== Indéfini ==]
{share_data data='actu_title' scope=global}

Dernière modification par Jean le Chauve (10/03/2017 16:33:47)

Hors ligne

#9 10/03/2017 18:06:37

bobjo
Membre
Inscription : 24/02/2012
Messages : 172

Re : Smarty assign scope global

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

Hors ligne

Pied de page des forums

  Flux Rss Twitter FaceBook