LISE, pas évidente l'histoire -
pierrepercee - 26/03/2016
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.2
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bon dans LISE j'ai une instance qui comporte environ 300 produits différents, répartis en une vingtaine de catégorie (faut créer un champ de type "categories" avec l'alias "category" pour enfin obtenir l'apparition de l'onglet "Catégories", c'est curieux maiis bon...). 10 custom fields ont été créés . Si je compte le champ natif "Titre" (on y accède par $item->title), cela fait 11 champs descriptifs pour chaque produit.
Ce n'est pas énorme mais cela commence à faire du monde.
Pour faire simple je souhaiterais boucler au travers des différentes catégories et de l'ensemble des produits pour obtenir une structure HTML analogue à la suivante (c'est un exemple peut être plus parlant)
Code :
[== HTML ==]
<h2> LEGUMES</h2> <!--correspond à une catégorie définie dans Lise via l'onglet catégorie-->
<h4> Haricots </h4> <!--correspond au champ $item->title du produit dans LISE-->
<ul>
<li><strong> 600 gr</strong></li><!--custom field quantité avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'quantité'}-->
<li> 0.80 euros </li><!--custom field prix -->
<li><i> vert sombre</i> </li><!--custom field couleur avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'couleur'} -->
<li> qualité nutritive moyenne</li><!--custom field qualité nutritive -->
</ul>
<h4> Pommes de terre </h4> <!--correspond au champ $item->title du produit -->
<ul>
<li> <strong>800 gr</strong></li><!--custom field quantité avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'quantité'}-->
<li> 0.60 euros </li><!--custom field prix -->
<li><i> jaune</i> </li><!--custom field couleur avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'couleur'} -->
<li> qualité nutritive moyenne</li><!--custom field qualité nutritive -->
</ul>
<h2> FRUITS</h2> <!--correspond à une catégorie définie dans Lise via l'onglet catégorie-->
<h4> Banane </h4> <!--correspond au champ $item->title du produit -->
<ul>
<li><strong>300 gr<strong></li><!--custom field quantité avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'quantité'}-->
<li> 2.80 euros </li><!--custom field prix -->
<li> <i>jaune </i></li><!--custom field couleur avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'couleur'} -->
<li> qualité nutritive excellente</li><!--custom field qualité nutritive -->
</ul>
<h4> Oranges </h4> <!--correspond au champ $item->title du produit -->
<ul>
<li> <strong>1200 gr<strong></li><!--custom field quantité avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'quantité'-->
<li> 2.30 euros </li><!--custom field prix -->
<li><i> orange</i>i> </li><!--custom field couleur avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'couleur'} -->
<li> qualité nutritive excellente</li><!--custom field qualité nutritive -->
</ul>
<h4> Poires </h4> <!--correspond au champ $item->title du produit -->
<ul>
<li><strong> 2200 gr</strong></li><!--custom field quantité avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'quantité'}-->
<li> 5.80 euros </li><!--custom field prix -->
<li><i> vert</i> </li><!--custom field couleur avec mise en forme basée sur test du nonm du champ ({if $fielddef.name == 'couleur'} -->
<li> qualité nutritive assez bonne</li><!--custom field qualité nutritive -->
</ul>
désolé mais c'est encore le plus simple pour se faire comprendre !
D'abord faut boucler sur l'ensemble des catégories...en principe
Bon je n'arrive pas non plus à trouver la syntaxe pour tester la catégorie et afficher les champs qui appartiennent à cette catégorie.
Je m'en suis sorti avec un bon mal de crâne et une logique complétement idiote qui fait que je fais boucler le zinzin 10 fois plus qu'il ne faudrait. Les pages mettent 3 secondes pour arriver sur un I7....
Si quelqu'un a les compétences....
LISE, pas évidente l'histoire -
pierrepercee - 26/03/2016
Un petit bout de code pour mieux voir le truc :
Code :
[== Indéfini ==]
<ul>
{foreach from=$items item=item}
{foreach from=$item->fielddefs item=fielddef}
{if $item->category == '3'}
<h3>{$item->title}</h3>
{foreach from=$item->fielddefs item=fielddef}
{if $fielddef.value != ''}
<li><strong>{$fielddef.name}:</strong> {$fielddef.value}</li>
{/if}
{/foreach}
{/if}
{/foreach}
{/foreach}
</ul>
Pour l'heure je réplique ce code pour chaque catégorie, c'est complètement idiot.
Il y a bien un morceau de code pour l'utilisation des catégories dans les gabarits de sommaire qui traine dans le gabarit de défaut mais.... pas vraiment parlant pour moi.
Code :
[== Indéfini ==]
{* use LISELoader plugin if you need Category information in default module action templates *}
{LISELoader item='category' force_array=1 value=$fielddef.value assign='cats'}
<!-- categories -->
<div class="item-category">
Category: {$cats|implode:','}
</div>
Bon
LISE, pas évidente l'histoire -
pierrepercee - 26/03/2016
Comble de l'infortune dans LISE le fameux
Code :
[== Indéfini ==]
{get_template_vars}
ne renvoie rien !
LISE, pas évidente l'histoire -
pierrepercee - 26/03/2016
On progresse doucement : j'ai essayé ça , cela me semblait déjà moins farfelu
Code :
[== Indéfini ==]
{LiseLoader item='category' instance='LISEfruitslegumes'
value=$item->fielddefs.categories.value assign='macat'}
{foreach from=$categories item=category}
<ul>
{foreach from=$items item=item}
{foreach from=$item->fielddefs item=fielddef}
<h3>{$macat}</h3>
{foreach from=$item->fielddefs item=fielddef}
{if $fielddef.value != ''}
<li><strong>{$fielddef.name}:</strong> {$fielddef.value}</li>
{/if}
{/foreach}
{/foreach}
{/foreach}
</ul>
{/foreach}
Hélas, je ne récupère qu'un pauvre
Code :
[== Indéfini ==]
Syntax error in template "module_db_tpl:LISEfruitslegumes;summary_test2" on line 1 "{LiseLoader item='category' instance='LISEfruitslegumes'" unknown tag "LiseLoader"
'
Avec unknown tag "LiseLoader" j'y perds mon latin. C'est quoi ce plugin ? je pensais qu'il faisait partie de LISE.
LISE, pas évidente l'histoire -
Jean le Chauve - 26/03/2016
Je ne connais pas du tout ce module, mais tu devrais essayer avec les majuscules, comme ceci : {LISELoader
LISE, pas évidente l'histoire -
pierrepercee - 27/03/2016
Salut Jean,
Merci ! J'avais mis le nez dessus, et puis j'ai déserté, j'ai maintenant un problème tout bête de parcours de tableau associatif. Avec quelques heures de récupération,ça devrait le faire. Je reviendrai ici formaliser ça.
Sinon LISE, je ne sais pas ce que tu utilises comme module mais c'est ultra puissant. Le principe est simple tu as un module principal qui te permet de créer des instances travaillant de façon autonome sur leurs propres tables en base de données.
Un peu comme si tu pouvais créer plusieurs modules "news" différents, chacun avec ses propres réglages.
Certains aspects sont pas encore très aboutis : ex devoir créer un customfield category pour avoir un onglet catégories , cela fait un peu bricolage, sinon une fois pris en main c'est ultra puissant.
Après je ne sais pas comment cela supporte la charge et je dois avouer que j'ai comme un doute, d'ailleurs si certains utilisateur de son ancêtre Listit2 ont des infos là dessus, je suis preneur !
LISE, pas évidente l'histoire -
airelibre - 28/03/2016
Hello,
je prend le train en route - pour ta première problématique, je ferai tout d'abord un affichage de sommaire des catégories :
Code :
{LISENomModule action=category}
Ceci affiche la liste des catégories. Tu crées un nouveau gabarit de catégories et dans ta boucle tu fais quelque chose du type :
Code :
{foreach $categories as $category}
<h2>{$category->name}</h2>
{LISENomModule category=$category->alias}
{/foreach}
Et tu peux alors créer un second gabarit pour le sommaire des items d'une catégorie.
A noter que j'ai un doute sur le {$category->
alias} mais l'idée est là.
Pour cette problématique en tous cas, mieux vaut à mon avis faire deux appels imbriqués. Vu qu'il y a moins de catégories que d'items, cela prendra moins de requêtes.
Pour le {get_template_vars}, j'utilise généralement un bon vieux :
Code :
<pre>
{$mon_item|print_r}
</pre>
Le <pre> est uniquement si tu regardes le code dans le navigateur - si tu regardes le code source ou l'inspecteur de code, pas besoin.
Pour accéder à une valeur d'un champ défini, inutile de faire un
foreach sur toutes les fielddefs - il suffit de faire :
Code :
{$item->fielddefs.[b]alias_champ[/b]->value}
Le foreach du gabarit d'exemple n'est là que pour tenir compte de toutes les définitions de champs - mais dans un contexte d'intégration, il est rare d'avoir besoin d'afficher tous ces champs de la même manière.
Enfin pour la charge, en effet il ne faut pas avoir de trop nombreux items X de nombreux champs définis et vouloir tout afficher sur la même page. J'ai un exemple sur l'un des sites de mes clients où j'ai 300 items x 25 champs, le tout sur une même page - ca prend 5-6 secondes sur un hébergement mutualisé moyen. La plupart du temps on utilisera une pagination, donc plus de problèmes, mais il arrive parfois qu'on en aie besoin. Pour notre cas client, nous sommes passés par un chargement asynchrone des données à l'aide de jQuery.
J'espère que cela t'aidera, ainsi que d'autres lecteurs / utilisateurs de LISE qui est très utile
LISE, pas évidente l'histoire -
pierrepercee - 01/04/2016
Salut,
Grand merci à toi pour toutes ces infos, c'est précieux- Pour le moment ça passe... - la page met 2s à se charger. Mais je vais creuser tes pistes.
Les solutions Ajax, Jquey, quand on ne peut vraiment pas faire autrement OK sinon c'est trop aléatoire pour le fonctionnement avec de vieux navigateurs peu fréquentables (je viens de passer quelques heures avec la console de débug d'IE en émulation IE8 pour créer un polyfill potable qui rend compatible mon site créé avec un framework css moderne).
Sur le fond, on empile des briques sans trop savoir et on risque de créer des effets de bord non négligeables.
Plus généralement le moins j'ai d'appel js sur mes pages pour des fonctionnalité importantes, le mieux je me porte.
Quand je vois que Jquery et Ajax font maintenant partie intégrante de certains gros modules....cela ne m'enthousiasme pas plus que cela.
Mais je suis curieux... Au niveau du principe tu peux m'expliquer ce que tu appelles un
Citation :un chargement asynchrone des données à l'aide de jQuery
?
Merci encore pour ces infos !
LISE, pas évidente l'histoire -
airelibre - 01/04/2016
C'est bien d'un appel ajax que je parle, dans jQuery via $.get(); Cela provoque un chargement asynchrone.