Forum CMS Made Simple FR

Version complète : [Résolu] Epingler un article avec le module News
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.11.2
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour à tous,

Après de nombreuses infructueuses recherches, je viens solliciter votre aide.
Je suis en phase de développement d'un site Web avec CMSMS. Mon problème est le suivant:

J'ai ma page d'accueil qui affiche les articles grâce au module News.
Ce que je souhaiterais faire est d'avoir la possibilité d'épingler certains articles afin qu'ils soient positionnés en premier.
De plus, je souhaiterais qu'il n'y ai que 3 articles affichés par page. Donc les articles épinglés en premier et les autres à la suite.

Ce que j'ai fait, c'est que j'ai créé une catégorie "épingle" et j'ai mis mes articles épinglés dedans. J'ai par la suite ajouté une balise News: {news pagelimit=3 detailpage='news' sortby="news_category"}

Cela fonctionne partiellement car à cause de l'attribut sortby je ne peut pas trier par la suite par ordre croissant de date.

Si quelqu'un a une solution, je lui en serait reconnaissant.

Merci d'avance.
Salut,

Je pense que tu as trouvé la bonne méthode !

J'ai tenté de créer une case à cocher nommée "spinned" et de trier sur cette valeur mais la doc stipule bien qu'on ne peut trier que sur une liste exhaustive de valeurs.

Ce qui fonctionne aussi : {news number='3' detailpage='news' sortby='news_extra' sortasc='true'}

Ou tu écris 1 dans les news à épingler et 0 dans les autres.
Chewbye a écrit :Cela fonctionne partiellement car à cause de l'attribut sortby je ne peut pas trier par la suite par ordre croissant de date.
Utilise le plugin de tri : http://www.cmsmadesimple.fr/forum/viewtopic.php?id=4439
Tu n'auras qu'à ajouter le modificateur dans ton foreach :
{foreach from=$items|sort_object_array:'date' item='entry'}
Bonjour,

Merci pour vos réponses, malheureusement je n'arrive à faire fonctionner aucune des 2.

Je vous donne un exemple, voici la liste de mes articles:

Nom de l'article Date Catégorie Extra

Article général 3 06/10/2012 17:30:36 Générale 0
Article général 2 06/10/2012 17:29:59 Générale 0
Article général 06/10/2012 17:29:29 Générale 0
Article épinglé 2 06/10/2012 17:28:30 Epinglé 1
Article épinglé 1 06/10/2012 17:16:01 Epinglé 1
News Module Installed 05/10/2012 17:06:05 Générale 0

Et voici l'ordre dans lequel j'aimerais que cela ressorte:

Article épinglé 2 06/10/2012 17:28:30 Epinglé 1
Article épinglé 1 06/10/2012 17:16:01 Epinglé 1
Article général 3 06/10/2012 17:30:36 Générale 0
Article général 2 06/10/2012 17:29:59 Générale 0
Article général 06/10/2012 17:29:29 Générale 0
News Module Installed 05/10/2012 17:06:05 Générale 0


@heriquet: en mettant 1 pour les épinglés et 0 pour les extra voici ce que ça me sort en utilisant {news number='3' detailpage='news' sortby='news_extra' sortasc='true'} :

News Module Installed
Article général
Article général 2
Article général 3
Article épinglé 1
Article épinglé 2

Les news épinglées sont à la fin et les dernier articles sont affichés en dernier.



@Jean le Chauve: J'ai utilisé le plugin en modifiant mon gabarit. J'ai remplacé {foreach from=$items item=entry} par {foreach from=$items|sort_object_array:'date' item='entry'}

et dans la page j'ai mis : {news pagelimit=3 detailpage='news' category="*" sortby="news_category"}

Voici le résultat:
News Module Installed
Article épinglé 2
Article épinglé 1
Article général 3
Article général 2
Article général


L'ordre est presque bien sauf le "News Module Installed" qui se retrouve au début au lieu d'être à la fin.

Je vois donne mon gabarit de sommaire d'articles si cela peut vous aider à résoudre mon problème:

Code :
[== HTML ==]
<!-- Start News Display Template -->


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


{foreach from=$items|sort_object_array:'date' item='entry'}
<div class="NewsSummary">

<div class="NewsSummaryLink">
<h2>
<a href="{$entry->moreurl}" title="{$entry->title|cms_escape:htmlall}">{$entry->title|cms_escape}</a>
</h2>
</div>


{if $entry->summary}
    <div class="NewsSummarySummary">
        {eval var=$entry->summary}
    </div>

    <div class="NewsSummaryMorelink">
        [{$entry->morelink}]
    </div>

{else if $entry->content}

    <div class="NewsSummaryContent">
        {eval var=$entry->content}
    </div>
{/if}

{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'}
          <img src="{$entry->file_location}/{$field->value}"/>
        {else}
          {$field->name}:&nbsp;{eval var=$field->value}
        {/if}
     </div>
  {/foreach}
{/if}
{if $entry->postdate}
    <div class="NewsSummaryPostdate">
        {$entry->postdate|cms_date_format}
    </div>
{/if}
</div>
{/foreach}

{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 -->
Essaie avec
Code :
[== Indéfini ==]
{news number='3' detailpage='news' sortby='news_extra' sortasc='false'}

J'ai peut-être inversé le système de booléen pour le tri. Si ton résultat est exactement l'inverse de ce que tu voulais, sortasc mis à false te fera un tri DESC donc dans l'autre sens Smile.
Effectivement cela me sort les articles épinglés en premier mais je suis retombé avec mon problème de départ, c'est-à-dire que les derniers messages postés sont affichés en dernier (alors que j'aimerais qu'ils soient affichés en premier).

En reprenant l'exemple précédent, voila ce que me ça me sort avec {news number='3' detailpage='news' sortby='news_extra' sortasc='false'} :

Article épinglé 1
Article épinglé 2
News Module Installed
Article général
Article général 2
Article général 3

Alors que j'aimerais:

Article épinglé 2
Article épinglé 1
Article général 3
Article général 2
Article général
News Module Installed
Change "épinglé" en autre chose qui commence sans accent : les caractères accentués sont considérés étant plus loin dans l'ordre alphabétique (valeur ascii).
favoris ?
Bonjour,
si tu veux la catégorie "epingle" triée en ascendant et la catégorie "general" triée en descandant, il faut faire appel à 2 tags {News}.
@jissey: Je voudrais faire appel aux deux catégories en tri de date descendant, mais j'aimerais que le tri se fasse dans chaque catégorie et non sur tous les articles. Je ne peux pas créer 2 tags {News} car il me faut une limite de 3 articles par page.

@Jean le Chauve: Je ne veux pas de tri par ordre alphabétique mais par date (du plus récent au plus vieux) et par catégorie( Catégorie "Epinglé" affichée avant les autres ).
@Jissey : ça va pourrir la pagination 2 tags... donc il faut que le tri soit identique pour tous les articles.

Tout ou rien en somme
@Bess : il n'y a pas de pagination dans son gabarit, et il a bien raison, ça pourri bien la vie, la pagination des News. Moi, je vire systématiquement!

Dans l'état actuel du module News, il n'est pas prévu ce que tu recherches, donc, 2 tris = 2 traitements.
A moins de savoir ranger chaque article dans un tableau SMARTY par catégorie, compter, et enfin trier à la fin chaque tableau avant de les afficher.
ok je n'avais pas vu qu'il n'avait pas de pagination.

donc 2 tag News sans aucune hésitation
Citation :@Jean le Chauve: J'ai utilisé le plugin en modifiant mon gabarit. J'ai remplacé {foreach from=$items item=entry} par {foreach from=$items|sort_object_array:'date' item='entry'}
Effectivement, si tu as ajouté le modificateur tel que je l'ai écrit plus haut (sans comprendre le fonctionnement), ça ne marche pas ; il faut d'abord regarder quels sont les valeurs possibles, et 'date' n'existe pas.
Tu as le choix entre :
postdate
startdate
enddate
create_date
modified_date
Je viens de tester avec 'startdate' et j'ai bien un tri par catégories, elles-mêmes sous-triées par dates.
Si tu souhaites inverser l'ordre des dates, il suffit de mettre un '-' devant startdate : |sort_object_array:'-startdate'
@jissey: il y a de la pagination sur mon gabarit sachant que je veux qu'il y ai 3 articles affichés par page:

Code :
[== Indéfini ==]
{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}

Donc impossible de mettre 2 balises {News}


@Jean le Chauve: merci pour ta réponse, effectivement je n'avais pas bien compris comment fonctionnait le plugin mais maintenant je vois à peu près comment ça marche.
Je viens de tester avec {foreach from=$items|sort_object_array:'-postdate' item=entry} dans mon gabarit et dans la page: {news number=3 detailpage='news' sortby='news_category'}. Malheureusement j'ai un problème avec ça car les articles sont bien triés par date mais plus par catégorie...

En reprenant l'exemple précédent:

Mes articles (j'ai rajouté un article aujourd'hui):

Nom de l'article Date(postdate) Catégorie

Article épinglé 3 08/10/2012 12:35:22 Epinglé
Article général 3 06/10/2012 17:30:36 Générale
Article général 2 06/10/2012 17:29:59 Générale
Article général 06/10/2012 17:29:29 Générale
Article épinglé 2 06/10/2012 17:28:30 Epinglé
Article épinglé 1 06/10/2012 17:16:01 Epinglé
News Module Installed 05/10/2012 17:06:05 Générale

Voilà ce que j'ai dans la page affichée:

Article épinglé 3 08/10/2012 12:35:22 Epinglé
Article général 3 06/10/2012 17:30:36 Générale
Article général 2 06/10/2012 17:29:59 Générale
Article général 06/10/2012 17:29:29 Générale
Article épinglé 2 06/10/2012 17:28:30 Epinglé
Article épinglé 1 06/10/2012 17:16:01 Epinglé
News Module Installed 05/10/2012 17:06:05 Générale

et si j'enlève |sort_object_array:'postdate' alors les articles sont triés par catégorie mais plus par date. Je comprend plus très bien là...
Je me suis dis par la suite que j'allais essayer de modifier le plugin pour pouvoir trier les deux champs, mais je n'ai pas trouvé de solution pour pouvoir trier 2 champs d'un tableau.
Ok, tu as raison, voici alors la solution (en considérant que ta catégorie Epinglé soit la première alphabétiquement) :
{news number='3' detailpage='news'} dans la page
+
{foreach from=$items|sort_object_array:'postdate'|sort_object_array:'category' item=entry} dans le gabarit sommaire.
Rien ne t'empêche de cumuler le modificateur Smile
Je n'ai que 2 catégories: Epinglé et Générale

J'ai essayé la méthode que tu m'as donné mais ça ne me tri que par date.
De plus j'ai essayé de trier juste par catégorie en utilisant ça:
{foreach from=$items|sort_object_array:'category' item=entry}

Mais ça ne me trie pas les catégories.
Moi je me pose une question qui m'intrigue! Qu'elle est le but de ce que tu veux faire? Pourquoi ne pas afficher les 3 dernier article? Est tu sur que cela serait une méthode pratique pour l'utilisation du site après!
Je sais pas par exemple tu ajoute une news qui n'est pas dans épinglé elle se retrouve masqué par 6-7 news épinglé? au final tu va finir par tous les épinglés si tu veux que quand une "NEWS" qui s'affiche !
[Image: Maquette.png]
Moi par exemple sur mon site que je suis entrain de travaillé, j'ai opté pour ce type d'affichage! et j'ai juste mi un compteur dans mon gabarit pour mettre une class différente!
[h]COMMENT OSES TU !!![/h] :mad: :mad: :mad:





on s'ennuie pas du tout avec le dernier batman :lol:
MDR j'avais pas vu la phrase plus bas je me demandais ce que tu me disais!!! arf le contenu n'est qu'a titre d'exemple pour la construction du site lol jpensais pas que quelqu'un le verrais Rolleyes
Chewbye a écrit :Je n'ai que 2 catégories: Epinglé et Générale

J'ai essayé la méthode que tu m'as donné mais ça ne me tri que par date.
De plus j'ai essayé de trier juste par catégorie en utilisant ça:
{foreach from=$items|sort_object_array:'category' item=entry}

Mais ça ne me trie pas les catégories.
J'ai testé et les tris se font (également avec category), attention le plugin ne fonctionne qu'avec cmsms 1.11+
Quelle est ta version ?
Bisare, j'ai la version 1.11.2 . Là je comprend vraiment pas d'où viens le problème

Est-ce que ça pourrait avoir un rapport avec mon gabarit?
Tu es en ligne ? Tu peux me donner accès ?
Je voudrais bien mais je ne peux utiliser la messagerie pour t'envoyer les informations de connexion en étant un nouveau membre.