Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Smarty] Obtenir valeur variable d'un objet smarty
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: -1.11.11
#~ Url du site : bastienperreuil.fr
#~ Hébergeur / Soft : FranceServ Hébergement
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.11.11
#~ Installed Modules:
#~ CMSMailer: 5.2.2
#~ CMSPrinting: 1.0.5
#~ FileManager: 1.4.5
#~ MenuManager: 1.8.6
#~ MicroTiny: 1.2.7
#~ ModuleManager: 1.5.8
#~ News: 2.14.4
#~ Search: 1.7.11
#~ ThemeManager: 1.1.8
#~ Gallery: 2.0.2
#~ ListIt2: 1.4.1
#~ ListIt2portfolio: 1.4.1
#~ AceEditor: 1.0
#~ CGExtensions: 1.45
#~ CGSmartImage: 1.17.1
#~ Piwik: 1.0.1
#~ ListIt2experiences: 1.4.1
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ max_upload_size: 32000000
#~ url_rewriting: mod_rewrite
#~ page_extension: .html
#~ 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.4.44
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 0
#~ memory_limit: 256M
#~ max_execution_time: 360
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 32M
#~ upload_max_filesize: 32M
#~ session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: fpm-fcgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.6.16
#~ 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 à tout le monde !

Je vous expose mon soucis : j'ai une page sur mon site qui me sert de portfolio. Pour afficher le contenu j'utilise le module News. Une fois affichés, j'aimerais pouvoir filtrer mes "objets" grâce au plugin isotop.js.

Pour que le filtre fonctionne, il faut définir des données communes entre le filtre et les objets : cela se traduit par des catégories qui vont servir à filtrer les objets : PAO, webdesign, graphisme, etc.

En code cela donne une liste de catégorie générées par le gabarit de catégories, chaque catégorie étant identifiée uniquement par un ID ({$node.news_category_id}) :

Code :
{if $count > 0}
<ul class="liste_categories" id="categories">
    <li class=""><a href="#montrer_tout">Réinitialiser</a></li>
    {foreach from=$cats item=node}
        <li class="option-set">
        {if $node.count > 0}
            <a href="#{$node.news_category_id}">{$node.news_category_name}</a><span class="nombre_article">({$node.count})</span>
        {/if}
        </li>
    {/foreach}
    {repeat string="</li></ul>" times=$node.depth-1}
</ul>
{/if}

Dans mon gabarit de sommaire d'article je veux disposer de la même information (ID catégories) dans les balises <article class="n° de cat ">
...
</article>

Le gabarit :
Code :
{foreach from=$items item=entry}
    <article class="grid_5 creation item " id="{$entry->category}">
        {* Test si il y a des champs personalisés et si oui récupere la valeur - cela ne peut être qu'une image. *}
        {if isset($entry->fields)}
           {foreach from=$entry->fields item='field'}
              {if $field->name == 'image de couverture'}
                <figure>
                  {$field->displayvalue}
                </figure>
               {* {else}
                 {eval var=$field->displayvalue} *}
              {/if}
          {/foreach}
        {/if}
        <ul class="keywords">
            <li class="categorie">{$entry->category}</li>
            <li class="date">{$entry->postdate|cms_date_format:"%Y"}</li>
            <li>
                {if isset($entry->fields)}
                  {foreach from=$entry->fields item='field'}
                          {if $field->name == 'client'}{$field->displayvalue}{/if}
                  {/foreach}
                {/if}
            </li>
        </ul>
            <div class="info">
                {if $entry->summary}
                    <div class="extrait">
                        <p>
                            {eval var=$entry->summary}
                        </p>
                        <div class="voirplus">
                            [{$entry->morelink}]
                        </div>
                    </div>
                {else if $entry->content}
                    <div class="detail_creation">
                        {eval var=$entry->content}
                    </div>
                {/if}
            </div>
    </article>
{/foreach}


Mon soucis et que je n'arrive pas à accéder à la variable $cats à l'intérieur de la boucle foreach. La seul méthode que j'ai trouvé est d'imbriquer une autre boucle {foreach from=$cats item=node} pour que le code {$node.news_category_id} me retoune un identifiant. Le soucis c'est que l'imbrication démultiplie le contenu affiché.

Voilà, vous savez tout... je ne suis pas un boss de smarty et j'ai cherché sur le net. Une solution ? :)
Répondre
#2
Bonjour,
Désolé, j'ai beau te relire 3 fois, je n'arrive pas à comprendre ce que tu veux exactement. Pourquoi as-tu besoin de $cats alors que tu as $entry->category ? Si tu n'arrives pas à obtenir l'id de la catégorie dans le gabarit sommaire, pourquoi n'utilises-tu pas simplement le nom de la catégorie ?
C'est difficile de t'aider sans pouvoir visualiser le code que tu souhaites obtenir. Fais un exemple en dur.
Répondre
#3
Bonjour,

J'aimerai réussir à obtenir l'identifiant des catégories (module news) dans le gabarit sommaire article.

Cela afin de faire fonctionner le filtre isotop.js.

Plus généralement, je me demandais comment accéder à des valeurs de variable smarty.

Obligé d'avoir un {foreach} ?
Répondre
#4
Ouaip, tu as vraiment éclairé ma lanterne, là :lol:
Bastien38 a écrit :J'aimerai réussir à obtenir l'identifiant des catégories (module news) dans le gabarit sommaire article.
Jean le Chauve a écrit :Si tu n'arrives pas à obtenir l'id de la catégorie dans le gabarit sommaire, pourquoi n'utilises-tu pas simplement le nom de la catégorie ?

Citation :Plus généralement, je me demandais comment accéder à des valeurs de variable smarty.
http://www.smarty.net/docs/en/language.s...iables.tpl

Citation :Obligé d'avoir un {foreach} ?
SI tu veux itérer sur les éléments d'un array, oui.
http://www.smarty.net/docs/en/language.f...oreach.tpl
Répondre
#5
Merci pour les liens, au final c'était une histoire de dièses. J'ai fait sauter les # de mes catégories ("#print" devient "print"), c'est cela qui posait problème (les catégories étant appelées dans l'attribut : <a href="#{$node.news.category_id}"> "pour pouvoir filtrer).

Le script .js comprenait pas le double dièse qu'engendrait la présence d'un lien rendu inactif par un # plus l'ajout d'une catégorie qui contenait déjà un #.

C'est pour cela que je voulais des numéros Smile

J'espère que l'explication est pas trop embrouillé Big Grin. Enfin bon, problème résolut et j'en sait un peu plus sur smarty !
Répondre


Atteindre :


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