Page 1 of 2

[Résolu] Liste par catégorie (CTLModuleMaker)

Posted: Tue Jul 07, 2009 1:34 pm
by Dalien
Bonjour,

Voici le formulaire pour ajouter des items:

Image

Et la liste des items:
Image

Voici les variables que je peux utiliser:

* $leveltitle
* $parentobj (if parent is specified)
* $itemlist (array of items)
* $item->is_selected
* $item->name
* $item->alias
* $item->detaillink
* $item->detailurl
* $item->newused
* $item->newused_namevalue
* $item->categorie
* $item->categorie_namevalue
* $item->marque
* $item->modele
* $item->annee
* $item->capacite
* $item->fichier
* $item->image
* $item->isdefault

Je veux faire une liste pour chaque catégories ( 0 à 7 ) dans mon gabarit.

Quelque chose comme ça (dans mes propres mots)
 ;D :

Code: Select all

{if categorie(0) !=""}

<h2 class="sous-titre">Titre Première Catégorie</h2>

{foreach from=$itemlist item=resultat}
 
	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>

       # Unité : {$resultat->name}<br />
        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Année : {$resultat->annee}<br />
        Capacité : {$resultat->capacite}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche et le prix…</a></h3>
       <br /><br /><br />
 
{/foreach}

<div class="separateur"></div> 

{/if}

{if categorie(1) !=""}

<h2 class="sous-titre">Titre Deuxième Catégorie</h2>

{foreach from=$itemlist item=resultat}
 
	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>

       # Unité : {$resultat->name}<br />
        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Année : {$resultat->annee}<br />
        Capacité : {$resultat->capacite}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche et le prix…</a></h3>
       <br /><br /><br />
 
{/foreach}

<div class="separateur"></div> 

{/if}

...

La table dans la base de données: cms_module_equipements_equipements
Image


Merci beaucoup d'aider un novice comme moi.

Re: Liste par catégorie

Posted: Wed Jul 08, 2009 2:48 pm
by plger
"Catégorie" est un champ ordinaire. Pourquoi n'as-tu pas fait un module à deux niveaux, l'un étant les catégories, et l'autre les équipements? C'est pas mal exactement à ça que ça sert. Tu aurais alors la possibilité d'utiliser toutes les fonctionnalités de hiérarchie (dont trois méthodes différentes pour faire des listes ordonnées par parents). Ce serait clairement le mieux.

Si tu veux rester avec le module tel que tu l'as créé, tu peux procéder de la manière suivante :
(provient du faq; les catégories vides ne sont pas affichées, une seule requête) :

Utilise le template suivant:

Code: Select all

{assign var="fieldflag" value=false}
{foreach from=$itemlist item="resultat"}
	{if $resultat->categorie != $fieldflag}
		{if $fieldflag}<div class="separateur"></div> {/if}
		<h2 class="sous-titre">{$resultat->categorie_namevalue}</h2>
		{assign var="fieldflag" value=$resultat->categorie}
	{/if}
	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>

       # Unité : {$resultat->name}<br />
        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Année : {$resultat->annee}<br />
        Capacité : {$resultat->capacite}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche et le prix…</a></h3>
       <br /><br /><br />
{/foreach}
Et appelle ton module avec le paramètre orderby="categorie"

Pierre-Luc

Re: Liste par catégorie

Posted: Wed Jul 08, 2009 7:28 pm
by Dalien
merci énormément pour ta réponse plger


je dois recommencer le module pour ajouter un autre champs

donc tu me conseille de faire le premier niveau pour Catégories

et l autre niveau pour les champs

alors le gabarit ressemblerait à quoi,s.v.p. ?

encore merci

Daniel

Re: Liste par catégorie

Posted: Thu Jul 09, 2009 2:52 am
by plger
Lorsqu'il y a peu de catégories, tu peux utiliser le template de catégorie suivant :

Code: Select all

{foreach from=$itemlist item="item"}
Cat: {$item->name}<br/>
{cms_module module="yourmodulename" forcelist=1 what="nameoflevelbelow" parent=$item->alias}
{/foreach}
(modifié selon l'output désiré)
Puis tu appelles la liste de catégories en utilisant ce template; pour chaque catégorie, la liste d'items sera récupérée.
(si tu veux cacher les catégories vides, tu peux enlever la ligne Cat et afficher les infos de catégorie dans le template des items)

Si tu as beaucoup de catégories, tu peux utiliser l'action sitemap (c'est le plus optmial), ou utiliser la méthode décrite au post précédent en remplaçant $resultat->categorie  par $resultat->parent_id

Re: Liste par catégorie

Posted: Thu Jul 09, 2009 6:25 am
by Dalien
Hé que j'ai hâte de bien comprendre $smarty!

J'ai recréé le module pour ajouter une autre variable.

Voici les variables disponibles;

Pour Catégorie:
    *  $leveltitle
    * $parentobj (if parent is specified)
    * $itemlist (array of items)
    * $item->is_selected
    * $item->name
    * $item->alias
    * $item->detaillink
    * $item->detailurl
    * $item->type
    * $item->type_namevalue
    * $item->isdefault
Pour Équipements:
    *  $leveltitle
    * $parentobj (if parent is specified)
    * $itemlist (array of items)
    * $item->is_selected
    * $item->name
    * $item->alias
    * $item->detaillink
    * $item->detailurl
    * $item->neuf
    * $item->usages
    * $item->marque
    * $item->modele
    * $item->annee
    * $item->capacite
    * $item->carburant
    * $item->fichier
    * $item->image
    * $item->parent_id
    * $item->parent_alias
    * $item->parent_name
    * $item->parentlink
    * $tiem->parenturl
    * $item->isdefault
Je dois afficher les items dans 2 pages différentes: Neuf et Usagé.

Pour la page Neuf, le gabarit doit ressembler à ceci:

Code: Select all

<h2 class="sous-titre">{$resultat->categorie_namevalue}</h2>

	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>

        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Capacité : {$resultat->capacite}<br />
        Carburant : {$resultat->carburant}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche…</a></h3>
Pour la page des Usagés :

Code: Select all

<h2 class="sous-titre">{$resultat->categorie_namevalue}</h2>

	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>

        # Unité : {$resultat->name}<br />
        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Année : {$resultat->annee}<br />
        Capacité : {$resultat->capacite}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche et le prix…</a></h3>
Les catégories doivent être dans cette ordre, mais ne pas s'afficher s'il n'y a pas d'items:
Chariots À combustion - Pneumatiques
Chariots À combustion - Pneus solides
Chariots Électriques - Trois roues
Chariots Électriques - Quatre roues
Chariots Électriques - Allée-étroite
Sélecteur de commande
Gerbeur/transpalette
Attachements/Autres

Merci merci merci et merci pour ton aide des plus précieuses!

Re: Liste par catégorie

Posted: Thu Jul 09, 2009 6:31 am
by Jean le Chauve
@dalien : peux-tu ajouter CTLModuleMaker dans le titre du premier post, ça permettra de retrouver ce post avec la recherche ? Merci d'avance et un super merci à plger :)

Re: Liste par catégorie (CTLModuleMaker)

Posted: Thu Jul 09, 2009 2:18 pm
by plger
Cette méthode n'est pas la seule (voir les posts précédents), ni la plus optimale, mais devrait être assez simple
(vérifier que le nom du module et le nom des niveau (what) sont les bons)

Pour l'ordre des catégories, tu règles ça avec les flèches dans le panneau d'administration.

Créer le template suivant, le nommer "catlist_neuf" :

Code: Select all

{foreach from=$itemlist item="parent"}
{cms_module module="equipements" forcelist=1 what="equipements" listtemplate="liste_neuf" parent=$parent->alias}
{/foreach}

Créer le template suivant, le nommer "catlist_usage" :

Code: Select all

{foreach from=$itemlist item="parent"}
{cms_module module="equipements" forcelist=1 what="equipements" listtemplate="liste_usage" parent=$parent->alias}
{/foreach}
Créer le template suivant, le nommer "liste_neuf" :

Code: Select all

<h2 class="sous-titre">{$parentobj->name}</h2>
{foreach from=$itemlist item="resultat"}
	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>
        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Capacité : {$resultat->capacite}<br />
        Carburant : {$resultat->carburant}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche…</a></h3>
{/foreach}
<div class="separateur"></div> 
Créer le template suivant, le nommer "liste_usage" :

Code: Select all

<h2 class="sous-titre">{$parentobj->name}</h2>
{foreach from=$itemlist item="resultat"}
<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank"><img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" /></a>
        # Unité : {$resultat->name}<br />
        Marque : {$resultat->marque}<br />
        Modèle : {$resultat->modele}<br />
        Année : {$resultat->annee}<br />
        Capacité : {$resultat->capacite}<br /><br /><br />
       <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche et le prix…</a></h3>
{/foreach}
<div class="separateur"></div> 
Créer deux requêtes sur le niveau catégories, l'une pour le neuf et l'autre pour l'usagé. Ne rien choisir ou choisir item_order pour le classement.

Ouvrir le fichier modules/equipements/templates/noresult.tpl et effacer son contenu (pour qu'il ne soit plus écrit "aucun résultat")

Dans la page neuf, appelé la requête qui récupère le neuf (supposons que son id est 3) :
{cms_module module="equipements" query="3" listtemplate="catlist_neuf"}
même chose pour l'usagé :
{cms_module module="equipements" query="3" listtemplate="catlist_usagé"}

** Je suggérerais de ne pas faire des templates différents pour neuf et usagé, mais d'utiliser des {if}{/if} pour les différencier

Re: Liste par catégorie (CTLModuleMaker)

Posted: Sat Jul 11, 2009 3:25 pm
by Dalien
Bon voici mon dernier template:

Code: Select all

{assign var="fieldflag" value=false}
{foreach from=$itemlist item="resultat"}

	{if $resultat->categorie != $fieldflag || $fieldflag == "0"}
		{if $fieldflag || $fieldflag == "0"}<div class="separateur"></div> {/if}
		<h2 class="sous-titre">{$resultat->categorie_namevalue}</h2>
		{assign var="fieldflag" value=$resultat->categorie}
	{/if}

	<h3 class="liste"><a href="uploads/{$resultat->fichier}" target="_blank">
{if $resultat->image != ""}
<img src="uploads/{$resultat->image}" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" />
{else}
<img src="images/pasdimage.jpg" alt="{$resultat->marque} - {$resultat->modele}" title="{$resultat->marque} - {$resultat->modele}" />
{/if}
</a>

        {if $resultat->marque != ""}Marque : {$resultat->marque}<br /><br />{else}<br /><br />{/if}
        {if $resultat->modele != ""}Modèle : {$resultat->modele}<br /><br />{else}<br /><br />{/if}
        {if $resultat->capacite != ""}Capacité : {$resultat->capacite}<br /><br />{else}<br /><br />{/if}
        {if $resultat->carburant != ""}Carburant : {$resultat->carburant}<br /><br />{else}<br /><br />{/if}
            <a href="uploads/{$resultat->fichier}" target="_blank" title="Cliquez ici pour voir la fiche">Voir la fiche…</a><br /><br /></h3>
   

{/foreach}
L'affichage se fait bien MAIS j'aimerais ne pas avoir à mettre les items par ordre dans le panneau admin.
Automatiquement qu'ils se placent par ordre de Catégorie, dans le panneau ET dans les pages.

J'ai essayé ceci mais sans succès:

{cms_module module="equipements" what="equipements" query="1"  listtemplate="Liste-Neuf" orderby="categorie" forcelist=1}

Une fois trouvé, je vais formater mon texte en CSS pour enlever les
et   du gabarit.

Merci.

Re: Liste par catégorie (CTLModuleMaker)

Posted: Sat Jul 11, 2009 3:38 pm
by plger
"Catégorie" n'est plus un champ ordinaire, alors :
{cms_module module="equipements" what="equipements" query="1"  listtemplate="Liste-Neuf" orderby="parent" forcelist=1}

Re: Liste par catégorie (CTLModuleMaker)

Posted: Sat Jul 11, 2009 3:56 pm
by Dalien
Oui Categorie est redevenu un champ ordinaire, désolé.

Re: Liste par catégorie (CTLModuleMaker)

Posted: Tue Jul 14, 2009 6:03 am
by Dalien
ENFIN RÉUSSI!!!!!!!!!!!!!!

J'ai modifié les requêtes en ajoutant OrderBy categorie ASC.

Je sais c'est con de ne pas l'avoir fait avant mais comme j'ai déjà dis, je suis novice dans le CMSMS et surtout dans $smarty.

Me reste juste à intégrer la recherche dans la page des items usagés.

Un autre défi en vu.

Si plger peut me donner un coup de main ça serait G R A N D E M E N T apprécié.

Re: Liste par catégorie (CTLModuleMaker)

Posted: Tue Jul 14, 2009 2:58 pm
by plger
Et de quoi as-tu besoin comme coup de main?

Re: Liste par catégorie (CTLModuleMaker)

Posted: Tue Jul 14, 2009 4:30 pm
by Dalien
Installer la recherche dans la page des usagés.

Il y aurait la recherche et la liste des tous les items usagés. Si une personne écrit quelque chose dans la recherche, la liste deviendrait le(s) résultat(s) de la recherche.

J'espère que tu me suis!  ;D

Re: Liste par catégorie (CTLModuleMaker)

Posted: Tue Jul 14, 2009 4:48 pm
by plger
Et as-tu essayé d'ajouter
{cms_module module="equipements" action="search" what="equipements" searchmode="advanced"}
ou
{cms_module module="equipements" action="search" what="equipements" searchmode="simple"}
dans la page?

Re: Liste par catégorie (CTLModuleMaker)

Posted: Wed Jul 15, 2009 4:04 am
by Dalien
C'est que la liste n'est plus là lorsque j'ajoute action="search"  et searchmode="simple"(ou advanced).

J'aimerais avoir les 2 en même temps. Dans le haut la section recherche et ensuite la liste. Et si quelqu'un fait une recherche, la liste change pour les résultats de la recherche.