[Résolu] Récupération d'un {content_image} depuis un gabarit de menu

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.6.6 "Bonde"
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~ Le site web concerné contient plusieurs modules fait sur mesure ne permettant pas la migration vers une version plus récente du CMS dans l’état
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour,

Comme indiqué dans le sujet, j’aimerais savoir si il est possible de récupérer la valeur d'un {content_image} commun à tout les gabarits du site depuis un gabarit de menu.
Le site utilise déjà la vignette/image de la page en guise d'image pour le bandeau (Je sais pertinemment que c'est une erreur de choix du précédent développeur qui aurait dû utiliser un content_image justement mais il serait à présent fort compliqué de devoir tout modifier).
L'image du {content_image} en question doit servir pour l'affichage d'une vignette dans le sous menu justement.

Sans avoir regardé le code qui concerne le module de gestion des gabarits des menu, j'imagine qu'il récupère par défaut un set d'informations très limité pour le rendu de ses gabarits (Ce serait catastrophique si le PHP chargé en mémoire l’intégralité du contenu de chaque page lors du rendu du gabarit du menu !).

Un simple {$node|print_r} dans la boucle l'indique clairement :

Code :
[== Indéfini ==]
stdClass Object
(
    [id] => 49
    [pagetitle] => Administration municipale
    [url] => (url interdite lors de l'envoi du message)
    [accesskey] =>
    [type] => contentlinked
    [tabindex] =>
    [titleattribute] => test
    [modified] => 2013-02-13 13:14:01
    [created] => 2010-02-12 09:36:33
    [hierarchy] => 2.2
    [depth] => 2
    [prevdepth] => 2
    [haschildren] =>
    [menutext] => Administration municipale
    [raw_menutext] => Administration municipale
    [target] =>
    [index] => 2
    [alias] => administration-municipale
    [parent] =>
    [current] =>
)

Existe-il un moyen de récupérer cette valeur en utilisant les fonctionnalités interne du module 'Menu' ou-bien dois-je coder cette fonctionnalité dans un nouveau plugin/user-tag (si c'est possible) ?


Merci d'avance pour vos retours ! Smile
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.6.6 "Bonde"
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~ Le site web concerné contient plusieurs modules fait sur mesure ne permettant pas la migration vers une version plus récente du CMS dans l’état
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour,

Comme indiqué dans le sujet, j’aimerais savoir si il est possible de récupérer la valeur d'un {content_image} commun à tout les gabarits du site depuis un gabarit de menu.
Le site utilise déjà la vignette/image de la page en guise d'image pour le bandeau (Je sais pertinemment que c'est une erreur de choix du précédent développeur qui aurait dû utiliser un content_image justement mais il serait à présent fort compliqué de devoir tout modifier).
L'image du {content_image} en question doit servir pour l'affichage d'une vignette dans le sous menu justement.

Sans avoir regardé le code qui concerne le module de gestion des gabarits des menu, j'imagine qu'il récupère par défaut un set d'informations très limité pour le rendu de ses gabarits (Ce serait catastrophique si le PHP chargé en mémoire l’intégralité du contenu de chaque page lors du rendu du gabarit du menu !).

Un simple {$node|print_r} dans la boucle l'indique clairement :

Code :
[== Indéfini ==]
stdClass Object
(
    [id] => 49
    [pagetitle] => Administration municipale
    [url] => (url interdite lors de l'envoi du message)
    [accesskey] =>
    [type] => contentlinked
    [tabindex] =>
    [titleattribute] => test
    [modified] => 2013-02-13 13:14:01
    [created] => 2010-02-12 09:36:33
    [hierarchy] => 2.2
    [depth] => 2
    [prevdepth] => 2
    [haschildren] =>
    [menutext] => Administration municipale
    [raw_menutext] => Administration municipale
    [target] =>
    [index] => 2
    [alias] => administration-municipale
    [parent] =>
    [current] =>
)

Existe-il un moyen de récupérer cette valeur en utilisant les fonctionnalités interne du module 'Menu' ou-bien dois-je coder cette fonctionnalité dans un nouveau plugin/user-tag (si c'est possible) ?


Merci d'avance pour vos retours ! Smile
#2
Et en écrivant simplement {content_image} dans le gabarit de menu à l'endroit où tu veux que la valeur apparaisse, ça ne marche pas ?
Je viens de tester avec {page_image} et ça s'affiche.
Code :
[== Indéfini ==]
{if $count > 0}
{page_image}
<ul>
{foreach from=$nodelist item=node}
#2
Et en écrivant simplement {content_image} dans le gabarit de menu à l'endroit où tu veux que la valeur apparaisse, ça ne marche pas ?
Je viens de tester avec {page_image} et ça s'affiche.
Code :
[== Indéfini ==]
{if $count > 0}
{page_image}
<ul>
{foreach from=$nodelist item=node}
#3
en fait, je crois qu'il veut le page-image de chaque page, donc dans la boucle.
J'ai cherché et pas trouvé...une petite UDT s'impose, ou alors passer par le champ extra1 et faire saisir le nom de l'image...pas top Sad
{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
en fait, je crois qu'il veut le page-image de chaque page, donc dans la boucle.
J'ai cherché et pas trouvé...une petite UDT s'impose, ou alors passer par le champ extra1 et faire saisir le nom de l'image...pas top Sad
{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)
#4
Salut Jissey Smile
Citation :Le site utilise déjà la vignette/image de la page en guise d'image pour le bandeau
Pas dans la boucle, sinon elle va s'afficher à tous les liens du menu.
Pour moi, {content_image} devrait fonctionner pour afficher la valeur.

Je n'ai pas très bien compris la demande, que veux-tu faire exactement : un exemple serait le bienvenu.
#4
Salut Jissey Smile
Citation :Le site utilise déjà la vignette/image de la page en guise d'image pour le bandeau
Pas dans la boucle, sinon elle va s'afficher à tous les liens du menu.
Pour moi, {content_image} devrait fonctionner pour afficher la valeur.

Je n'ai pas très bien compris la demande, que veux-tu faire exactement : un exemple serait le bienvenu.
#5
Edit : Merci pour vos réponses, je composé ce message sans avoir vu vos retours.

Non, le "scope de définition" de cette balise smarty est limité au rendu de la page elle même, dans le système de rendu des gabarits de pages uniquement et non dans le rendu des menus.

La présence de cette donnée est aussi contextuelle au gabarit de page.

Je ne sais pas si je suis assez claire, un exemple sera plus parlant Smile


Partons du principe que je souhaite disposer d'une image dans mon gabarit de page "normal" :


Code :
[== PHTML / Smarty ==]
{process_pagedata}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>{sitename} - {title}</title>
{metadata}
{stylesheet}
</head>
<body>

{*    Ici, je ne fait que déclarer mon content_image pour qu'il soit détecter par CMSMS
    et qu'il soit possible de choisir son image dans les pages utilisant ce gabarit
    En assignant son contenu inutilisé à une variable qui ne sera pas appelée
    dans ce template... *}
{content_image block='imagemenu' label='Image dans le menu (53 x 35 pixels)' dir='images/images_menu' assign='notused'}

<!-- start header -->
<div id="header">
  <h1>{sitename}</h1>
</div>
<!-- end header -->

<!-- start menu -->
<div id="menu">
  {menu}
</div>
<!-- end menu -->

<!-- start content -->
<div id="content">
  <h1>{title}</h1>
  {content}
</div>
<!-- end content -->

</body>
</html>

Je souhaite ensuite utiliser l'image que l'administrateur de la page aura choisi dans la boucle de rendu du menu.
Pour se faire je dois accéder aux informations suivante sur le $node en cours de la boucle dans le gabarit de menu :

- Le nom du gabarit utilisé par la page (Afin de conditionner l'appel de cette image qui ne sera pas forcement présente dans les autres gabarits de pages !)
- La valeur du {content_image block="imagemenu"}

Dans mon de menu j'aurais quelque chose de ce style :

Code :
[== HTML ==]
{if $count > 0}
<ul>
    {foreach from=$nodelist item=node}
    <li>
        {*    C'est ici que j'ai besoin de récupérer la valeur de mon content_image
            si le noeud correspond bien à une page concernée par mon gabarit de page "normal" *}
        {if ($node->gabarit == 'normal'}
        <img src="{$node->content_image['imagemenu']}" alt="" />
        {*    La syntax des 2 lignes du dessus est un exmple de ce que j'aimerais pouvoir utiliser,
            c'est complètement faux faux bien-sûr, aucun tableau $node->content_image ou propriété $node->gabarit n'existe ! *}
        <a href="{$node->url}"><span>{$node->menutext}</span></a>
        {/if}
    </li>
    {/foreach}
</ul>
{/if}
#5
Edit : Merci pour vos réponses, je composé ce message sans avoir vu vos retours.

Non, le "scope de définition" de cette balise smarty est limité au rendu de la page elle même, dans le système de rendu des gabarits de pages uniquement et non dans le rendu des menus.

La présence de cette donnée est aussi contextuelle au gabarit de page.

Je ne sais pas si je suis assez claire, un exemple sera plus parlant Smile


Partons du principe que je souhaite disposer d'une image dans mon gabarit de page "normal" :


Code :
[== PHTML / Smarty ==]
{process_pagedata}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>{sitename} - {title}</title>
{metadata}
{stylesheet}
</head>
<body>

{*    Ici, je ne fait que déclarer mon content_image pour qu'il soit détecter par CMSMS
    et qu'il soit possible de choisir son image dans les pages utilisant ce gabarit
    En assignant son contenu inutilisé à une variable qui ne sera pas appelée
    dans ce template... *}
{content_image block='imagemenu' label='Image dans le menu (53 x 35 pixels)' dir='images/images_menu' assign='notused'}

<!-- start header -->
<div id="header">
  <h1>{sitename}</h1>
</div>
<!-- end header -->

<!-- start menu -->
<div id="menu">
  {menu}
</div>
<!-- end menu -->

<!-- start content -->
<div id="content">
  <h1>{title}</h1>
  {content}
</div>
<!-- end content -->

</body>
</html>

Je souhaite ensuite utiliser l'image que l'administrateur de la page aura choisi dans la boucle de rendu du menu.
Pour se faire je dois accéder aux informations suivante sur le $node en cours de la boucle dans le gabarit de menu :

- Le nom du gabarit utilisé par la page (Afin de conditionner l'appel de cette image qui ne sera pas forcement présente dans les autres gabarits de pages !)
- La valeur du {content_image block="imagemenu"}

Dans mon de menu j'aurais quelque chose de ce style :

Code :
[== HTML ==]
{if $count > 0}
<ul>
    {foreach from=$nodelist item=node}
    <li>
        {*    C'est ici que j'ai besoin de récupérer la valeur de mon content_image
            si le noeud correspond bien à une page concernée par mon gabarit de page "normal" *}
        {if ($node->gabarit == 'normal'}
        <img src="{$node->content_image['imagemenu']}" alt="" />
        {*    La syntax des 2 lignes du dessus est un exmple de ce que j'aimerais pouvoir utiliser,
            c'est complètement faux faux bien-sûr, aucun tableau $node->content_image ou propriété $node->gabarit n'existe ! *}
        <a href="{$node->url}"><span>{$node->menutext}</span></a>
        {/if}
    </li>
    {/foreach}
</ul>
{/if}
#6
Voilà qui est bien expliqué Smile
Tu peux le faire sans trop de problème avec CGSimpleSmarty.
{$cgsimple->get_page_content($node->alias,'imagemenu','nomVariableAassigner')}{eval var=$nomVariableAassigner}
Voir la doc du module.
#6
Voilà qui est bien expliqué Smile
Tu peux le faire sans trop de problème avec CGSimpleSmarty.
{$cgsimple->get_page_content($node->alias,'imagemenu','nomVariableAassigner')}{eval var=$nomVariableAassigner}
Voir la doc du module.
#7
Si tu n'as pas cette classe (à cause de ta version), voici son code :
Code :
[== Indéfini ==]
//////////
  // Get page content from a content block
  //////////
  function get_page_content($alias,$block = '',$assign = '')
  {
    $result = false;
    $gCms = cmsms();
    $contentops = $gCms->GetContentOperations();
    $smarty = $gCms->GetSmarty();

    if( $block == '' ) $block = 'content_en';

    if( $alias != '' ) {
      $content = $contentops->LoadContentFromAlias($alias);
      if( is_object($content) ) {
    $result = $content->GetPropertyValue($block);
      }
    }

    if( $assign != '' ) {
      $smarty->assign(trim($assign),$result);
      return;
    }
    return $result;
  }
#7
Si tu n'as pas cette classe (à cause de ta version), voici son code :
Code :
[== Indéfini ==]
//////////
  // Get page content from a content block
  //////////
  function get_page_content($alias,$block = '',$assign = '')
  {
    $result = false;
    $gCms = cmsms();
    $contentops = $gCms->GetContentOperations();
    $smarty = $gCms->GetSmarty();

    if( $block == '' ) $block = 'content_en';

    if( $alias != '' ) {
      $content = $contentops->LoadContentFromAlias($alias);
      if( is_object($content) ) {
    $result = $content->GetPropertyValue($block);
      }
    }

    if( $assign != '' ) {
      $smarty->assign(trim($assign),$result);
      return;
    }
    return $result;
  }
#8
Merci ! Je vais tester çà de suite Smile
#8
Merci ! Je vais tester çà de suite Smile
#9
Merci encore ! Ca fonctionne ! Smile
Je me suis basé sur la version 1.4.4 de CGSimpleSMarty, je vais me pencher d'avantage sur ce module afin de conditionner le gabarit également pour que le code reste propre (Même si la variable ne renvoi rien si le block n'existe pas, sans provoquer d'erreur)
#9
Merci encore ! Ca fonctionne ! Smile
Je me suis basé sur la version 1.4.4 de CGSimpleSMarty, je vais me pencher d'avantage sur ce module afin de conditionner le gabarit également pour que le code reste propre (Même si la variable ne renvoi rien si le block n'existe pas, sans provoquer d'erreur)
#10
Amuse-toi bien et n'hésite pas à revenir pour nous poster tes astuces Smile
#10
Amuse-toi bien et n'hésite pas à revenir pour nous poster tes astuces Smile
#11
Il me reste maintenant à trouver une technique pour récupérer l'alias de la page pointée pour les nœuds de type 'section' (Ou les redirections internes). J'ajouterais l'explication si je trouve.
#11
Il me reste maintenant à trouver une technique pour récupérer l'alias de la page pointée pour les nœuds de type 'section' (Ou les redirections internes). J'ajouterais l'explication si je trouve.


Atteindre :


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