Forum CMS Made Simple FR

Version complète : Module News: Trier les catégories
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: -1.9.4.3
#~ Url du site :
#~ Hébergeur / Soft : Infomaniak
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour à tous,

Pour gérer les rapports mensuels d'une association, j'ai opté sur le module News. Chaque année correspond à un mandat annuel au cours duquel l'association publie chaque mois des rapports (fichier pdf).
Et en FrontEnd, voici la structure que je souhaite avoir:

-Mandat Année 2012-2013

-Mandat Année 2011-2012
Rapport d'activité d'Octobre 2011
Rapport d'activité de Juillet 2011

- Mandat Année 2010-2011

J'ai donc créé les catégories "Mandat Année 20xx-20yy" puis je crée des articles associés à chaque catégorie. Seulement je ne parviens pas à trier les catégories car je souhaiterai bien que le dernier mandat soit placé plus haut. Voici le gabarit Sommaire que j'ai modifié:

Code :
[== Indéfini ==]
<!-- Start News Display Template -->
{* This section shows a clickable list of your News categories. *}
<ul class="list1">
{foreach from=$cats item=node}
{if $node.depth > $node.prevdepth}
{repeat string="<ul>" times=$node.depth-$node.prevdepth}
{elseif $node.depth < $node.prevdepth}
{repeat string="</li></ul>" times=$node.prevdepth-$node.depth}
</li>
{elseif $node.index > 0}</li>
{/if}
<li{if $node.index == 0} class="firstnewscat"{/if}>
{if $node.count > 0}
    <h2>{$node.news_category_name}</h2>
{foreach from=$items item=entry}
<div class="NewsSummary">

{if isset($entry->extra)}
    <div class="NewsSummaryExtra">
        {eval var=$entry->extra}
    {* {cms_module module='Uploads' mode='simpleurl' upload_id=$entry->extravalue} *}
    </div>
{/if}
{if isset($entry->fields)}
  {foreach from=$entry->fields item='field'}
     <div class="NewsSummaryField">
        {if $field->type == 'file'}
          <a href="{$entry->file_location}/{$field->value}"/>{$entry->title|cms_escape}</a>
        
        {/if}
     </div>
  {/foreach}
{/if}

{if $entry->postdate}
    <div class="NewsSummaryPostdate">
        Publié le {$entry->postdate|cms_date_format}
    </div>
{/if}
</div>
{/foreach}


{else}<h2>{$node.news_category_name} </h2>{/if}
{/foreach}
{repeat string="</li></ul>" times=$node.depth-1}</li>
</ul>

{* if you don't want category browsing on your summary page, remove this line and everything above it *}

{if $pagecount > 1}
  <p>
{if $pagenumber > 1}
{$firstpage}&nbsp;{$prevpage}&nbsp;
{/if}
{$pagetext}&nbsp;{$pagenumber}&nbsp;{$oftext}&nbsp;{$pagecount}
{if $pagenumber < $pagecount}
&nbsp;{$nextpage}&nbsp;{$lastpage}
{/if}
</p>
{/if}

<!-- End News Display Template -->

Quelqu'un a-t-il une idée?

Merci de votre contribution.
Bonjour,
la seule solution que je vois est de passer par un modifier.
Il y a un exemple ici :
http://www.smarty.net/forums/viewtopic.php?t=1079 (non testé, non garanti par mes soins).
Quand tu as vérifié et testé ce code, tu le mets dans un fichier que tu nommes :
function smarty_cms_modifier_sort_by_fields($sortby)
et que tu places dans le dossier plugins de ton installation.
Tu n'as plus qu'à appliquer ce modifier à $cats.
J'ai une erreur:

string(136) "Smarty error:[in module_db_tpl:News;summaryrma line 4]: [plugin] modifier 'sortby' is not implemented (core.load_plugins.php, line 124)"

Où l'erreur?
Merci Jissey pour le tuyau.

Le fichier modifier.sortby.php doit être installé dans le répertoire /lib/smarty/plugins et le fichier qui marche bien est composé comme ceci:

Code :
[== PHP ==]
<?php
#
# sorts an array of named arrays by the supplied fields
#   code by dholmes at jccc d0t net
#   taken from http://au.php.net/function.uasort
# modified by cablehead, messju and pscs at http://www.phpinsider.com/smarty-forum

function array_sort_by_fields(&$data, $sortby){
     static $sort_funcs = array();

   if (empty($sort_funcs[$sortby]))
   {
       $code = "\$c=0;";
       foreach (split(',', $sortby) as $key)
       {
          $d = '1';
             if (substr($key, 0, 1) == '-')
             {
                $d = '-1';
                $key = substr($key, 1);
             }
             if (substr($key, 0, 1) == '#')
             {
                $key = substr($key, 1);
              $code .= "if ( ( \$c = (\$a['$key'] - \$b['$key'])) != 0 ) return $d * \$c;\n";
             }
             else
             {
              $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return $d * \$c;\n";
           }
       }
       $code .= 'return $c;';
       $sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
   }
   else
   {
       $sort_func = $sort_funcs[$sortby];
   }
   uksort($data, $sort_func);
}

#
# Modifier: sortby - allows arrays of named arrays to be sorted by a given field
#
function smarty_modifier_sortby($arrData,$sortfields) {
  array_sort_by_fields($arrData,$sortfields);
  return $arrData;
}
?>

Et enfin dans le gabarit du sommaire je modifie comme ceci

Code :
[== Indéfini ==]
{foreach from=$cat|@sortby:"news_category_name" item=node}

Mon problème est donc résolu.
en mettant le modifier dans smarty, ça marche bien sûr mais en principe, on ne touche pas aux fichiers du "core" pour éviter des mésaventures lors de mises à jours.
C'est pour ça que la codification sous la forme "function smarty_cms_modifier" dans "plugins" est faite.
Ceci dit, le risque n'est pas grand concernant smarty!
Bonne continuation.
Message de Tripas par email, le sujet étant fermé :

Citation :Bonsoir,

Je reviens sur sur ce sujet car il ne fonctionne pas correctement. En ayant ajouté des nouveaux articles dans une nouvelle catégorie, il regroupe mal les articles par catégorie.
Dans ma page j'ai ajouté:

{news summarytemplate='rma' category='*Mandat*'}

Pour afficher toutes les catégories débutant par Mandat; et là, il mélange les articles du Mandat Année 2011-2012 et à ceux de la catégorie "Mandat Année 2012-2013".
Quelqu'un pourrait-il m'aider?

En vous remerciant.