Boucle personnalisée
Salut à vous
quelqu'un sait-il comment utiliser la boucle mais sur un tableau de résultats personnalisés ..?
Je souhaite afficher une liste d'articles en utilisant un template déjà présent et je trouve dommage de recopier/modifier chacune des méthodes d'affichage des tags/catégories/etc
Merci à vous
quelqu'un sait-il comment utiliser la boucle mais sur un tableau de résultats personnalisés ..?
Je souhaite afficher une liste d'articles en utilisant un template déjà présent et je trouve dommage de recopier/modifier chacune des méthodes d'affichage des tags/catégories/etc
Merci à vous
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si le gabarit démo a des listes "bidon" qui sont des UL avec une suite de LI, c'est très simple, même chose avec des DIV qui se succèdent. les fonctions de liste d'articles, de catégories et de tags fonctionnent sensiblement sur le même principe.
À ce moment il faut utiliser une boucle WHILE, tirer la totalité des articles et tester chacun d'eux avant de l'afficher s'il respecte les critères désirés. Tu pourras donner un extrait de ton code et ça deviendra plus clair.
j'ai mis en ligne une version en développement : daniel-rolland.com/pluxml/pizza_ce_soir/
comme tags j'ai les ingrédients (ça permet de faire une recherche par ingrédient )
comme catégorie j'ai du style "fromagères" (4 fromages, savoyardes, etc) ; "sucrée/salée", "avec viande", "végétariennes" etc
je souhaite afficher les pizzas "végétariennes" avec "fromage de chèvre" (je filtre donc sur la catégorie "végétariennes" + tags "fromage de chèvre")
dans mes recherches de développement,
je bouclais sur tous les articles selon 1 critère : la catégorie OU le mot-clefs (via le template, normal)
puis je trie en fonction d'un 2ème critère : un autre ou plusieurs tags.
Ce 2ème paramètre passe en GET via les liens généré dans la sidebar
(note : j'ai enlevé cette fonction dans le site en ligne)
Mon code du template catégorie
et la sidebar personnalisée (je n'ai fait le test que sur les tags) :
voilou ;D
Est-ce que le souhait est de permettre au visiteur de faire un choix multiple et de lancer la recherche ensuite? Ça serait plus efficace et rapide. Pour ce faire, ma première idée serait d'utiliser une matrice (array) de ces ingrédients souhaités dans l'adresse url et de bâtir la requête en rejetant tout ce qui ne fait pas partie de la liste. Parce que les catégories sont à part, la recherche ne se fait que sur la catégorie en question. Si tout était une catégorie (croûtes et ingrédients), tout sortirait sur une page statique unique.
Avec cette méthode, tu pourrais même faire une page de "cases à cocher" et ne lancer la recherche qu'une seule fois.
Je me demandais aussi pourquoi impliquer la sidebar dans le processus de recherche. Si tout se fait dans le body, la sidebar reste indépendante avec son contenu bien à elle.
De cette manière dans l'article je peux placer les critères d'un côté et les ingrédients de l'autre. C'est plus facile et propre.
J'ai déjà un plugin qui crée des groupes de catégories, j'ai des meta-catégories "carte des pizzas", "carte des desserts", "boissons" etc ...
et dans ma sidebar, je n'ai plus qu'à appeler l'id de la meta-catégorie "pizza" pour que ça me retourne la liste des catégories associées, que j'injecte dans la méthode catList et un plugin qui affiche les tags après ce filtre ...
Cela me crée aussi des pages statics qui affichent la liste des articles des catégories ciblées (d'ailleurs ça ne marche pas en ligne )
J'ai fait ça pour éviter d'avoir dans la sidebar de recherche de pizzas les catégories liées à la vie de la pizzeria, l'actu divers etc ...
et de ne pas avoir à modifier les templates (tout doit se faire en admin).
Et aussi pour la liste des allergies (il est maintenant obligatoire pour tout restaurateur d'informer pour chaque plat les allergies possibles).
J'ai donc un autre plugin qui associe les allergies en fonction des ingrédients. Si un article (une pizza) possède certains tags (ingrédients), on affiche les allergies.
En admin je liste tous les tags et je coche les allergies associées
Pour faire la recherche, au lieu de passer par une page "recherche", de sélectionner des boîtes à cocher puis de lancer une recherche,
je trouve plus conviviale de passer d'abord par la sidebar, de manière à utiliser d'abord les fonctions natives de PluXml (catégories/tags) et d'éventuellement rajouter un bandeau au dessus de la liste d'articles "ajouter d'autres critères de recherche" qui là utiliserai une fonction particulière.
Si les paramètres sont passés en GET, suffit de générer des liens appropriés :
Je suis sur la page du tag boeuf haché (index.php?tag/boeuf-hache),
les liens pour rajouter les autres critères deviennent index.php?tag/boeuf-hache&tag_search=oignons-rouges pour les pizzas à base de boeuf haché ET oignons rouges
ou index.php?tag/boeuf-hache&cat_search=pizzas-sucree-salee pour les pizzas à base de boeuf hâché ET pizza sucrée/salée
si j'étais sur la catégorie "sucrée/salée" (index.php?categorie13/pizzas-sucree-salee)
j'aurai index.php?categorie13/pizzas-sucree-salee&tag_search=oignons-rouges
Je ne cherche pas le plus efficace et rapide pour PluXml mais le plus simple et convivial pour l'utilisateur
pas facile tout ça ...
Ne sachant toujours pas quel problème est à régler au juste, je ne lancerai pas dans la solution mais, pour l'instant, cette solution n'impliquerait probablement aucun tag et certainement pas de plugin.
Que ça soit pour la recherche comme pour le balisage des données (j'utilise les microdata).
Si je devais tout regrouper dans des catégories, un moment ou un autre il me faudra faire une condition :
si cette catégorie est un critère // si cette catégorie est un ingrédient.
Je ne peux faire un réglage en brut, dans le template pour paramétrer ces listes.
Si demain j'ajoute un ingrédient (donc une catégorie), je devrais modifier obligatoirement le template, chose impensable.
L'usage doit être aussi conviviale dans l'admin.
Dans ce cas-là, comment tu verrais la chose sans plugin ..?
Le problème est qu'en dehors de la boucle native de PluXml il n'est pas possible d'utiliser les méthodes de plxShow ( $plxShow->artTags, $plxShow->artCat etc ). L'est là le hic, faut tout réécrire, faire appel à plxMotor etc
En imaginant que tous ces articles ont une ou plusieurs catégories qui leur sont associées, on part d'une boucle unique qui teste l'appartenance à telle ou telle catégorie puis qui passe ou non à un test subséquent selon la réponse. En faisant l'extraction totale en boucle, on peut mettre dans des matrices (array) séparées les "croûtes", ingrédients, restrictions alimentaires, etc. On teste alors avec la fonction "in_array" qu'on répète avec autant de critères que désiré.
En effet, je suis d'accord, les fonctions classiques de PluXml sont trop restrictives pour permettre ce genre de tests. Je milite depuis un certain temps pour laisser l'option d'afficher ou pas le résultat d'une fonction. On verra dans le futur si la tendance fait des adeptes, le support est déjà évident des experts résidants.
La boucle WHILE "qui n'affiche pas tout de suite" est donc de rigueur, toujours selon mon avis. Ma suggestion d'utiliser les variables d'url me semble encore la plus claire, encore place à débat. Des experts du forum auront peut-être une autre suggestion mais pour moi ça rend les choses bien plus simples à coder et surtout débugger.
Le problème que je cherche dans l'histoire est un problème fonctionnel, une suite d'opérations par l'usager qui ne peut pas être menée à destination, désolé mais je n'en trouve toujours pas. Aucun développeur ne "doit" faire quoique ce soit avant d'avoir maîtrisé clairement le fonctionnel. Quand on commence la solution avant cette étape, on s'imagine des barrières.
Je suis client affamé, aujourd'hui j'opte pour la croûte alsacienne, j'adore le saucisson sec et le fromage de chèvre, je suis allergique aux oeufs, balancez-moi la liste des choix qui vont me satisfaire sans mettre ma vie en danger. Dans un tel scénario, on écarte les desserts, on accepte ou refuse les pizzas une à une. À la fin de la liste, il ne reste que les "survivantes" aux multiples tests (effectués une fois chacun par cycle) et on procède à leur affichage.
...?produit=pizza&croute=alsacienne&ingredients=saucissonSec,chevre&restriction=oeufs
J'appelle l'exclusion une "restriction" plutôt que le terme "allergie", ça laisse la l'option d'inclure un test super sympathique du genre "je déteste les artichauts même si ma vie n'est pas en danger"...
Sinon j'utilise la temporisation dans la boucle ... je trie ensuite ... et j'affiche en fin.
M'enfin pour l'instant, avec 20 articles à trier, en choisissant par catégorie ou par mot-clef, on réduit le choix à pas beaucoup.
Donc pour l'instant ce n'est pas urgent.
Ceci-dit, dans tous les systèmes de blog, où il y a une quantité d'articles impressionnant, je trouve que trier en fonction de la catégorie ET les mots-clefs serait un plus ... mais je n'ai jamais vu cela. Faut soit se palucher les X pages à la recherche d'articles intéressants, soit passer par la recherche
Note qui n'a rien à voir : tu peux choisir une végétarienne MAIS sans artichaut, que tu n'aimes pas ou que tu sois allergique
Nous avons l'obligation d'afficher les allergies ... alors soit !
Les matrices qui forment les sous-groupes comme les croûtes, les ingrédients, les restrictions, etc seraient créées et maintenues à la main dans mon obsession pour la simplicité. Ce n'est pas idéal mais puisque ces listes ne sont pas trop dynamiques et certainement pas créées par les utilisateurs, je les imagine nécessitant très peu de maintenance. Dans mes utilisations de cette méthode, je les mettais tout en haut de la page statique, elles auraient l'air de:
$produit = array("pizza", "dessert", "breuvage");
$croute = array("mince","epaisse");
$ingrédients = array("saucisse","tomates","fromageBleu", "fromageSuisse"...);
$restrictions = array("porc","oeufs","gluten"...);
Alors mon histoire de if(in_array($_GET('restriction'),$ingrédients)) prend tout son sens et permet de faire le tri en rejetant les non-conformes selon les critères choisis par le visiteur. Ces valeurs se retrouvent dans l'url et sont pêchées par le $_GET. Dans un élan de folie d'ergonomie, on peut même trouver la perle rare qui me gardera en vie, qui contient tout ce que j'aime mais qui contient malheureusement un ingrédient de trop que j'ai identifié comme "non-désiré". Ça me suggèrerait alors de prendre la végétarienne mais en spécifiant de ne pas mettre d'artichaut. Une seule page statique, une grosse boucle qui cycle la vingtaine de pizzas, quelques tests roulés sur chacune des répétitions, pas le moindre plugin.
Parfaitement d'accord, cette méthode s'applique bien parce qu'on a une liste assez raisonnable d'articles et de catégories. On ne ferait pas ça avec un site de nouvelles qui recherche en plein texte tous les sujets d'intérêt des lecteurs et des milliers d'articles de 3 pages. L'invention des tags est venue d'un genre d'indexation pour s'en sortir vivant et voir notre page retournée avant la retraite.
Perso ça ne me gêne pas puisque je sais lire un code et mettre les mains dedans.
Sauf que mon site peut-être réutilisé par un confrère qui le désire, et là, on oublie, il faut qu'il puisse gérer tout ça en admin.
Création de catégories, regroupement de ces catégories, ajout d'ingrédients (tags), liaison avec les allergies.
A savoir que je vais certainement mettre en cache le plus de résultat des routines des plugins.
Voir mettre tout le site en cache, mais pour l'instant ce n'est pas possible, à mon niveau ]:D
Les listes peuvent très bien venir d'une suite d'articles associés à quelques catégories qui les regroupent. Aucun tag, seulement des catégories. Mais, à mon avis, enseigner à quelqu'un comment ajouter un item dans une matrice est bien plus simple que de s'emmerder à allonger la liste de catégories qui sera déjà assez longue avec tout ce qui peut recouvrir une pizza. Le diabolique fichier de page statique est accessible par l'admin, les matrices sont au début de ladite page, c'est tout de même assez simple. Il faut pas tenter d'immuniser un administrateur de site contre la calamité d'avoir à lire des lignes de code qu'on a bien pensées et commentées pour guider un peu.
voilou, j'ai tenté un truc, qui correspond à ce que j'imaginais : un système de recherche par filtre, en tunnel :
plus on ajoute des paramètres de filtre, plus le nombre de résultat diminue ainsi que le nombre de filtres complémentaires ...
résultat en test ici
on filtre en fonction des catégories (critère) ET des tags (ingrédient) ... et j'ai bien galéré avec ce "développement sauvage" ]:D