Forum CMS Made Simple FR

Version complète : [résolu]Module Download manager et sortby
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.10.3
#~ Url du site : http://www.lmptt.fr
#~ Hébergeur / Soft : ovh
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.10.3
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ CMSPrinting: 1.0
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ MicroTiny: 1.1.1
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ CGExtensions: 1.28.2
#~ CGSimpleSmarty: 1.5
#~ CGCalendar: 1.9.6
#~ CGGoogleMaps: 2.2.7
#~ DownloadManager: 1.5.2
#~ Gallery: 1.5.3
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 40000000
#~ default_upload_permission: 664
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale: fr_FR.utf8
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.2.17
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ memory_limit: 90M
#~ max_execution_time: 50000
#~ output_buffering: 0
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 8M
#~ upload_max_filesize: 40M
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.0.91
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour à tous,

Je suis confronté à un épineux problème lié au fonctionnement du module Download Manager que j'ai installé sur le site d'un client.

Ce dernier souhaite que soit affiché sur la page d'accueil du site un bloc contenant les 6 derniers téléchargements ajoutés.

Le module ne permettant pas de limiter le nombre d'items à afficher en natif (oubli fâcheux quand même....), j'ai créé un compteur, l'ai intégré à un gabarit spécifique dénommé "lasts" (merci Jean le Chauve d'avoir donné cette astuce dans un autre post!

Sur ma page d'accueil j'ai donc intégré la balise:

Code :
{cms_module module='DownloadManager' template="lasts"}

Et mon gabarit "lasts" précité se présente ainsi:


Code :
<ul>
{foreach from=$items item=item}
    
    {if $item->itemtype == 'file' }

{counter assign=lasts}

{if $lasts<6}

     <li class="links">
    {$item->name}
                
<span class="taille">({$item->size})</span>

<span class="download_link_icon"><a href="{$item->href}" title="Télécharger {$item->name}"><img src="modules/DownloadManager/images/icons/drive_disk.png"/></a></span>

{/if}
            
    {/if}

{foreachelse}
Aucun fichier à l'heure actuelle dans cette catégorie</li>
{/foreach}

</ul>

Cela fonctionne parfaitement.

Mon souci vient des items affichés.

Au lieu de m'afficher les 6 derniers dans l'ordre chronologique de leur création (par id en fait), il me les affiche par ordre alphabétique ( comme c'est le cas aussi dans le back-office ce qui pour le coup n'est vraiment pas pratique... Sad )

Du coup, ce ne sont pas forcément les derniers téléchargements qui sont affichés en page accueil....

J'ai tenté de rajouter sortby="id" dans ma balise mais le module ne le gère pas et me renvoie une erreur:

Code :
{cms_module module='DownloadManager' template="lasts" sortby="id"}

J'ai bien imaginé lui dire "vous n'avez qu'à rajouter un chiffre devant le nom du fichier lors de la création", mais pas de bol, le classement se fait par ordre ascendant et non l'inverse du coup les derniers fichiers ajoutés sont en fin de liste et n'apparaissent pas dans les 6.... :mad:

J'avoue que je bloque depuis deux jours là-dessus sans résultat... Quelqu'un aurait-il la solution miracle ou un début de piste à me donner...?!

Merci à tous

Bonne soirée
Je pourrais dire modifier le code source, mais ça n'est pas tu tout conseiller ni dans la philosophie CMSMS:-).

Dans ce cas de figure, quand un module ne me donne pas la main mise en sortie, la majeure partie du temps je passe par du js (pour le front). Donc je pense que tu dois pouvoir trier la sortie avec un plugin jQuery. C'est peut être une piste.

Eric
Merci pour ta réponse. Hélas tu t'en doutes j'espère pouvoir m'en sortir autrement que par ce biais surtout pour ceux qui ont le js désactivé...
Le module news et d'autres offrent bien cette fonction de tri, je me dis qu'il faut que je creuse de ce côté... mais là vu mon niveau en php, c'est mal barré... :/
Oui si tu maitrises php tu peux peut être passer par une udt, et je me pose la question, je ne connais pas ce module, mais via smarty, le tri ne serait pas possible ?

Pour le js, c'est juste en faire une bonne utilisation aussi, pas de js, pas de tri, js activé tri actif. Le principal étant que l'info soit vue.

Eric
J'ai essayé sans succés cette voie du tri smarty:

http://snipplr.com/view.php?codeview&id=45721

- créer un fichier modifier.sortby.php
- le mettre dans smarty/plugin
- assigner dans mon template la fonction de tri sous cette forme:

Citation :{foreach from=$items|@sortby:"id" item=item}

Résultat plantage complet... Big Grin
bonsoir,
regarde la doc de foreach http://www.smarty.net/docs/en/language.f...oreach.tpl .
Tu connais le nombre d'item et tu connais l'index en cours.
Tu as tout ce qu'il faut pour afficher les 6 derniers!
Tu commences à afficher quand @iteration > @total - 6
Merci Jissey.
J'étais effectivement allé voir cette doc mais toutes mes tentatives se sont soldées par un plantage ou une erreur de syntaxe. Comme je le disais plus haut, je suis plus adepte du css html js que du php..!
Tiens nous au courant de tes avancées.
Citation :Comme je le disais plus haut, je suis plus adepte du css html js que du php..!
et bien c'est bien, parce que moi, c'est ma hantise :mad:
Je viens de passer 3 jours à mettre au point un template en HTML5 "responsive design"...pfff quelle galère!
Je préfère 100 fois PHP et SMARTY Cool
Chaque langage pose ses petits soucis :-) et personnellement je m'amuse autant avec html css javascript que php ou smarty...

@whitewater Concernant smarty et tes erreurs de syntaxe, peut être qu'en montrant ton code, il serait possible de t'aider.

Eric
Merci à tous pour votre soutien Wink
Alors quelques franches avancées (qui je dois l'avouer ne sont absolument pas de moi mais d'un ami développeur JAVA qui a accepté de jeter un oeil).
Cela ne s'invente pas, en 1 heure il m'a pondu un truc qui fonctionne sans même connaître made simple et smarty.... limite scandaleux...

Alors certes selon ses mots "c'est pas propre, c'est une voie détournée, il pourront sûrement l'améliorer en connaissant smarty mieux que moi".

Oui mais bon ça marche et pour moi c'est l'essentiel à l'heure actuelle! :lol:

Ne voulant pas toucher au code du module en cas de futures mises à jour, voici le gabarit final qu'il a codé, on sait jamais ça pourra peut-être servir à de futurs utilisateurs:

Citation :<ul>

{php}

$sorted = array();
$gCms = cmsms(); //global $gCms;
$smarty = &$gCms->GetSmarty();
$data = $smarty->get_template_vars('items');

foreach ($data as $file) {
if($file->itemtype == 'file') {
$sorted[-strtotime($file->created)] = $file;
}
}

ksort($sorted);

$smarty->assign('itemsSorted', $sorted);
{/php}

{foreach item=item from=$itemsSorted}
{if $item->itemtype == 'file' }

{counter assign=lasts}

{if $lasts<6}

<li class="links">
{$item->name}

<span class="taille">({$item->size})</span>

<span class="download_link_icon"><a href="{$item->href}" title="Télécharger {$item->name}"><img src="modules/DownloadManager/images/icons/drive_disk.png"/></a></span>

{/if}

{/if}

{foreachelse}
Aucun fichier à l'heure actuelle dans cette catégorie</li>
{/foreach}

</ul>

Non décidément c'est imbuvable à mon niveau! Je reste avec mon bon vieux html/css et j'envisage de m'associer avec lui pour mes futurs développements spécifiques! Big Grin

NB: si quelqu'un pense pourvoir simplifier tout çà, qu'il n'hésite pas à se manifester!

Bon WE à tous et bonnes vacances aux petits chanceux....
a un poil de fesse il est bon.

Juste retirer le PHP et le mettre dans une Udt à part.


Ton Udt :

Code :
$sorted = array();
$smarty = cmsms()->GetSmarty();
$data = $params['variable'];

foreach ($data as $file) {
    if($file->itemtype == 'file') {
      $sorted[-strtotime($file->created)] = $file;
    }
}

ksort($sorted);

$smarty->assign('itemsSorted', $sorted);


et ton gabarit Smarty :

Code :
{NomDeTonUdt variable=$item}
<ul>
{foreach item=item from=$itemsSorted}
    {if $item->itemtype == 'file' }

{counter assign=lasts}

{if $lasts<6}

     <li class="links">
    {$item->name}
              
<span class="taille">({$item->size})</span>

<span class="download_link_icon"><a href="{$item->href}" title="Télécharger {$item->name}"><img src="modules/DownloadManager/images/icons/drive_disk.png"/></a></span>

{/if}
      
    {/if}

{foreachelse}
Aucun fichier à l'heure actuelle dans cette catégorie</li>
{/foreach}

</ul>
Merci Bess, ça va lui faire plaisir quand il lira le topic Wink

Par contre, juste pour info ton code me renvoie une erreur en l'état:

Citation :Warning: Invalid argument supplied for foreach() in /homepages/7/d172634579/htdocs/cms/lib/classes/class.usertagoperations.inc.php(260) : eval()'d code on line 5

Aucun fichier à l'heure actuelle dans cette catégorie

Du coup j'ai remis l'ancien code fonctionnel pour le moment.
salut,
remet la version de Bess qui est plus adaptée à CMSMS en modifiant juste l'appel de l'udt:
{NomDeTonUdt variable=$items} => $items et non $item.

Et associe-toi avec le developpeur java Smile
Merci encore à tous pour cette œuvre collective Wink
Cela fonctionne niquel.

Si c'était pas 11h et si j'étais pas au taff, je me serais bien fait une petite bière pour fêter çà :lol:

Vous pouvez clore le topic!
+1 pour la bière Smile
Il arrive même à réclamer une bière dans un topic fermé!!
c'est un signe, j'ai soif Sad