Jump to content

CMS orderBy


Recommended Posts

Bonjour à tous,

Je suis actuellement en train de rajouter une catégorie actu à ma boutique.

Un truc simple qui affiche le contenu des pages CMS d'une catégorie (id 6) CMS (dans mytheme/templates/cms/category.tpl) :

  {block name='cms_sub_pages'}
    {if $cms_pages}
      <div class="blog">
        {foreach from=$cms_pages item=cms_page}
          {if $cms_category.id==6}
            {$cms_page.content nofilter}
          {/if}
        {/foreach}
      </div>
    {/if}
  {/block}

 

Léger problème, impossible de trouver comment inverser l'ordre d'affichage des articles.

J'ai également tenté de le faire avec la fonctions getCMSPages, mais l'array est quasiment la même.

  {block name='cms_sub_pages'}
    {assign var=cmspages value=CMS::getCMSPages($language.id, 6, true, (int)Shop::getContextShopID())}
    <div class="blog">
    {foreach from=$cmspages item=cmspage}
      {$cmspage.content nofilter}
    {/foreach}
    </div>
  {/block}

Quand on regarde la fonction getCMSPages (/classes/CMS.php), on peut voir le code suivant :

class CMSCore extends ObjectModel
{
[...]
    public $position;
    [...]
    public static $definition = array(
    [...]
        'fields' => array(
        [...]
            'position' => array('type' => self::TYPE_INT),
            [...]
        ),
    );

    public static function getCMSPages($idLang = null, $idCmsCategory = null, $active = true, $idShop = null)
    {
        [...]
        $sql->orderBy('position');
        [...]
    }

Un quelconque moyen de modifier la position ?

Faut-il créer un override ? Si oui, je n'en ai jamais fait, si vous pouviez m'aiguiller, ça serait parfait :)

Merci d'avance et bonne journée.

Link to comment
Share on other sites

Pour votre override, si ces pages "blog" sont dans une catégorie cms particulière faites votre override comme suit:

 

class CMS extends CMSCore {

/** order blog pages by date **/

public static function getCMSPages($idLang = null, $idCmsCategory = null, $active = true, $idShop = null) {

[...]

if($idCmsCategory == 6) // exemple je ne connais pas l'id de la catégorie^^

      $sql->orderBy('date_add DESC');

ou

     $sql->orderBy('position DESC');

else

     $sql->orderBy('position');

[...]

}

}

Enregistrez-le dans /overrides/class/CMS.php

et supprimez le fichier /cache/class_index.php

Edited by Eolia (see edit history)
Link to comment
Share on other sites

5 minutes ago, doekia said:

{assign var=smc value=$cmspages|array_reverse:1}

{foreach from=$smc item=cmspage}

 

Super, merci Doekia, c'est exactement le modifier ce que je cherchais !

Plus besoin d'override du coup !

        {foreach from=$cms_pages|array_reverse item=cms_page}
          {if $cms_category.id==6}
            {$cms_page.content nofilter}
          {/if}
        {/foreach}

Je l'ai directement mis sur le foreach, pour plus de simplicité (il semble même fonctionner sans le :1).

$sql->orderBy('date_add DESC');

Eolia> Il n'y a pas de date d'ajout sur les pages CMS...?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...