Rendre toutes les fonctions de listes formatables
Pierre
Member
Encore une demande d'amélioration pour la postérité. J'apprivoise de plus en plus les fonctions comme lastArtList qui formattent les items d'une boucle et nous permet d'insérer la ou les variables aux endroits désirés. Même mon ami Rockyhorror a créé une version vignetteArtList qui rend mon plugin préféré aussi flexible que pouvait l'être lastArtList.
Cette intégration a beau me combler de bonheur, certaines autres fonctions (comme par exemple artCat, artTags et d'autres du même genre) produisent une liste pondue correctement mais en n'offrant qu'un champ "séparateur" comme flexibilité. Il me semble qu'il serait très pratique d'adopter partout la même approche que dans les fonctions formattables.
Dans certains cas, le gabarit offre par sa structure le moyen de détourner la fonction originale en trichant un peu avec le concept de séparateur, du genre:
<ul class="categories">
<li>
<?php $plxShow->artCat('</li><li>') ?>
</li>
</ul>
On voit que ce n'est pas un tour de force digne de mention mais vous voyez le principe. Un look et une méthode uniformisée du genre
<ul class="categories">
<?php $plxShow->artCat('<li>#cat</li>') ?>
</ul>
offirait la flexibilité et la simplicité d'exécution qui font la fierté de la communauté Pluxml. Mon exemple choisi est simple pour illustrer le concept, certaines autres fonctions sont parfois bien plus complexes et en tireraient un avantage encore plus évident. Aussitôt que la boucle a la possibilité de contenir plus d'une variable, l'exemple ci-haut ne fonctionne plus en déguisant le séparateur. Imaginez le formulaire de commentaire, combien ce serait facile de travailler directement dans la page d'article plutôt que dans sa propre "sous-page".
Un avis du même coup aux valeureux développeurs de plugins, plus ce principe du "formattez vous-même sur place" sera normalisé, plus la courbe d'apprentissage sera réduite pour nous les utilisateurs. Nous pourrions rêver à formatter directement les fils d'Ariane, outil de recherche, liste de résultats de recherche, et tant d'autres.
Voilà pour ma liste au Père Noël. En attendant, je me débrouille en ouvrant le moins souvent possible les fichiers "core", promis...
Cette intégration a beau me combler de bonheur, certaines autres fonctions (comme par exemple artCat, artTags et d'autres du même genre) produisent une liste pondue correctement mais en n'offrant qu'un champ "séparateur" comme flexibilité. Il me semble qu'il serait très pratique d'adopter partout la même approche que dans les fonctions formattables.
Dans certains cas, le gabarit offre par sa structure le moyen de détourner la fonction originale en trichant un peu avec le concept de séparateur, du genre:
<ul class="categories">
<li>
<?php $plxShow->artCat('</li><li>') ?>
</li>
</ul>
On voit que ce n'est pas un tour de force digne de mention mais vous voyez le principe. Un look et une méthode uniformisée du genre
<ul class="categories">
<?php $plxShow->artCat('<li>#cat</li>') ?>
</ul>
offirait la flexibilité et la simplicité d'exécution qui font la fierté de la communauté Pluxml. Mon exemple choisi est simple pour illustrer le concept, certaines autres fonctions sont parfois bien plus complexes et en tireraient un avantage encore plus évident. Aussitôt que la boucle a la possibilité de contenir plus d'une variable, l'exemple ci-haut ne fonctionne plus en déguisant le séparateur. Imaginez le formulaire de commentaire, combien ce serait facile de travailler directement dans la page d'article plutôt que dans sa propre "sous-page".
Un avis du même coup aux valeureux développeurs de plugins, plus ce principe du "formattez vous-même sur place" sera normalisé, plus la courbe d'apprentissage sera réduite pour nous les utilisateurs. Nous pourrions rêver à formatter directement les fils d'Ariane, outil de recherche, liste de résultats de recherche, et tant d'autres.
Voilà pour ma liste au Père Noël. En attendant, je me débrouille en ouvrant le moins souvent possible les fichiers "core", promis...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans quel cas utilises-tu ce genre de code
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Mon exemple a beau être un véritable cas (réglé en quelques minutes, j'en conviens), il servait surtout à illustrer mon concept du "formattage au lieu de livraison" comme le font si bien les fonctions classiques comme lastArtList, lastComList, catList , etc.
Les énormités comme le formulaire de commentaires par exemple (ou les plugins populaires comme l'outil de recherche) illustrent encore mieux le gain de temps et la clarté évidente au moment du codage de la page.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
<ul class="categories">
<li>
<?php $plxShow->artCat('</li><li>') ?>
</li>
</ul>
fournirait quelque chose comme:
Cet article peut être trouvé dans les catégories
<ul class="categories">
<li>première</li>
<li>deuxième</li>
</ul>
Mon désir est d'utiliser un jour plutôt
Cet article peut être trouvé dans les catégories
<ul class="categories">
<?php $plxShow->artCat('<li>#catDansLaListe</li>') ?>
</ul>
pour obtenir le même résultat.
Encore une fois, mon exemple est simple pour illustrer le concept qui serait un grand avantage dans des applications bien plus complexes.
la fonction artCat() affiche la liste sous forme de lien <a> pouvant etre séparé par un caractère, à passer en paramètre de la fonction: ex artCat(',')
toi tu souhaites afficher la liste des catégories sous forme de liste html <ul><li> ce que la fonction ne permet pas de faire proprement. Il faut la détourner avec ton astuce artCat('<li></li>')
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Tout comme si je dormais au gaz et que j'écrivais <?php $plxShow->lastArtList('#art_title') ?> je me réveillerais avec Mon premier titreMon deuxième titre
ça peut sembler ridicule ici mais c'est exactement ce qui est le plus flexible. C'est à nous d'insérer les LI, DIV ou je ne sais quoi qui recevra le ou les champs aux bons endroits. C'est là que je mettrais, après avoir pris un bon café, quelque chose comme
<?php $plxShow->lastArtList('<li>Ce magnifique article porte le titre de <div class="super-beau-design">#art_title</div> et son numéro id est <div class="design-plus-discret">#art_id'</div></li>'); ?>
qui me produirait une page élaborée et prête à améliorer facilement. Quand le gabarit d'exemple nous est fourni tout monté avec des mots bidon à travers du design, le tout se monte en quelques minutes avec un simple copier-coller et en remplaçant les mots bidon par les variables appropriées.
Ce n'est pas aussi facile avec artCat() parce que la fonction recrache une liste de liens plutôt que de tout séparer (nom de la cat et son url) comme le fait lastArtList. Puisqu'on séparerait le tout on verrait peut-être même
L'article peut être retrouvé dans: <?php $plxShow->artCat('<div class="belle-boite"><a href="#cat_url">#cat_title</a></div>'); ?>
Tu vois le genre, une matrice avec des données "nues" fournies item par item mais c'est nous qui décidons de "l'habillage". Ça fonctionne à merveille avec lastArtList en poussant la matrice article par article, c'est le même principe.
Pour ces exemples, toutes sortes de paramètres sont possibles, des DIV au lieu des LI (de UL), des niveaux de titrage, etc. Cette méthode permettrait de construire un thème complet et l'offrir dans Ressources avec zéro paramétrage. On peut rêver et penser que les fonctions classiques les plus communes comme la recherche et la page contact ferait partie du lot. Ai-je passé tout le message sans parler de Vignette? ah merde... on était si près.
Tu veux un like ?
Comme toi, je pense qu'il faudrait généraliser le $format pour avoir plus de possibilités d'affichage.
Il faudrait par exemple ajouter à $plxShow une fonction qui permettrait de préciser dans une chaine de format les champs de l'article à afficher comme on le fait pour la fonction lastArtList. On pourrait ainsi afficher des champs supplémentaires.
Je vais rajouter un hook au plugin chamPlus pour cela très bientôt, qui fait plus que d'afficher des vignettes.
A++
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Et puisqu'on y est, je transformerais tous les ECHO dans les fonctions par des RETURN, ce qui nous permettrait "d'utiliser" les données retournées plutôt que de forcément les afficher. Au moment de bâtir la page, il nous faudrait simplement écrire le ECHO $plxShow... si aucune opération n'était nécessaire. Mais là, j'en espère peut-être un peu trop, c'est ma nature...
J'ajouterai que pour ajouter des champs aux articles, c'est le grand Barnum. Mais on y arrive.
Les rafales de "echo" me font mal aux yeux aussi. L'utilisation du heredoc rend les choses plus lisibles pourtant.
La fonction première d'une fonction de $plxShow est d'afficher quelque chose à l'écran. Donc l'usage à l'intérieur d'un "echo" me semble normal. Par contre, l'usage d'une chaine de format en tant que paramètre devrait se développer.
Une autre idée qui me trotte dans la tête est de remplacer cet antique format xml par du json. Apparament cela bouge dans ce sens chez Wordpress.
La lecture d'un fichier json se fait en une ligne, à comparer à ce qui se fait pour le xml. Et les fichiers de données sont beaucoup plus poids plume.
A++
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Pour JSON, je frissonne de frayeur, mes cheveux gris me trahissent, je porte le XML dans mon coeur et rebute le JSON sans grande raison à offrir. Je prend aussi un temps fou à me décider de jeter mes vieilles chaussettes bien chaudes mais trouées...
XML est une antiquité pour moi. On utilise plus de caractères à écrire les balises que pour écrire les données. De plus le transfert d'un tableau associatif vers un fichier XML et inversement utilise beaucoup trop de lignes de codes (voir PlxMotor)
En regroupant les différents fichiers de config en un seul, on pourra charger la config de Pluxml en une ligne de code.
Le seul intérêt de XML est Xpath. J'ai toujours peiné pour trouver une doc clair et cela n'a pas d'intérêt pour Pluxml.
A++
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Je n'ai pas le choix d'avouer que c'est une énorme quantité de caractères pour très peu de véritables données mais j'aime bien la représentation canonique qui se saisit assez bien pour un néophyte.
Avec JSON, c'est le triomphe de l'efficacité. On pourrait argumenter que la clarté est un concept bien personnel et que chacun a son niveau de confort mais j'enseigne souvent les rudiments de XML juste après avoir initié la même personne au HTML. Leur ressemblance étant flagrante, la courbe d'apprentissage devient moins intimidante, un argument important pour gagner de la confiance.
Une nouvelle exception dans le débat, j'ai côtoyé des étudiants en design web qui faisaient évidemment du CSS dans leur sommeil. Tu me vois venir, ils ont compris en quelques secondes leur première feuille de code JSON, tellement la structure leur était familière. Mais mon argument tient toujours, ces personnes sont, techniquement, des informaticiens, je fais affaire surtout avec des gens qui s'intimident facilement et abandonnent à la moindre embûche. J'aimerais bien les voir coder en Assembler...
Je suis d'accord dans l'idée même si j'ai pas tout lu (désolé Pierre mais je trouve tes messages souvent un peu longs )
Soit pouvoir personnaliser le format de toutes les fonctions comme suggérées, soit proposer de retourner un array de données (ce qui serait bien plus flexible).
Dans l'idée : <li><a href="'.$art[link].'">'.$art[title].'</a></li>
J'ai moi même des soucis avec la customisation d'artCat et artTag notamment.
Je trouve qu'il manque parfois de cohérence dans les fonctions : certaines crachent du HTML quand d'autres sortent des données avec format perso, certaines ont des séparateurs d'autres non, etc ... A mon avis toutes les fonctions devraient sortir des données (GET) en Array et le reste est à la charge de la page PHP (formatter, faire des boucles sur les articles, etc ...)
En fait il faudrait faire un peu comme le format des requêtes SQL selon moi ... Ca n'empêche pas d'avoir à côté des fonctions de formattage qui crachent du HTML pour faciliter la tâche aux codeurs occasionnels mais je ne pense pas que ça devrait être la norme
Parler, c'est la liberté. La passion, ça ne se livre pas en 140 caractères...
Mais pour le coup le titre du topic est très clair et se suffit à lui-même : toutes les fonctions ne sont pas formattables ce qui est un problème évident à résoudre.
artTags() accepte une chaine de format en paramètre. Par défaut la chaine est comme ceci artCat() n'accepte pas de chaine de format. C'est vrai qu'on peut en avoir besoin parfois. Mais c'est facilement modifiable.
Pour les autres champs des articles, c'est vrai qu'il n'y a pas de fonction. J'ai rajouté un hook au plugin chamPlus pour pallier à ce manque. Mais cela est plus compliqué à coder que dans les 2 cas précédents. Le hook est récent. J'attends des retours pour éventuellement appliquer des correctifs.
Maintenant si tu veux travailler à un niveau plus bas, tu peux t'inspirer du template ci-dessous à appliquer à une catégorie, ou dès qu'il s'agit d'afficher un ou plusieurs articles.
template categorie-raw.php à ajouter au thème utilisé Le résultat est visible ici : http://www.jeveuxpartir.net/pluxml/index.php?categorie5/livre-xii
Mais pas sûr que beaucoup de gens accrochent.
A++
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
j'émets un énorme +1 pour le formatage des listes pour plus de souplesse dans l'affichage des données
et de rajouter des variables "brutes" comme pour ajouter des class "uniques" par exemple
je fais ces modifs car j'utilise jqueryMobile, associe des icônes aux éléments
Il m'arrive d'interroger le dossier data à partir d'un logiciel tierce voir de créer un fichier XML qui sera lu par PluXml ... c'est ce qui fait que j'ai choisi PluXml.
Je travaillais avec le nombre de commentaires attribués à un article dans un affichage dynamique. En lisant la documentation, j'étais très heureux de voir que la fonction artNbCom() permettait une certaine forme de formatage pour l'adapter au besoin. J'ai donc utilisé le format artNbCom('#nb','#nb','#nb') puisque je ne voulais que le chiffre, peu importe qu'il soit 0, 1 ou 99.
Je confesse que je n'ai pas étudié la page HTML rendue avant quelques essais mais la page affichée foutait tout en l'air, je cherchais ailleurs en pensant que ma lecture du manuel était bonne. Eh bien non, on a beau écrire
artNbCom('#nb','#nb','#nb')
ce qu'on imagine nous repousser un chiffre mais ce qui sort pour vrai c'est
<a href="http://un-url-que-je-ne-veux-pas/index.php?article3/mon-article#comments" title="0 Aucun commentaire">0</a>
alors qu'on attendait 0, un point c'est tout.
On peut travailler à faire des pirouettes pour s'en sortir mais un format de fonction sert à contrôler ce qui sort, c'est génialement bien utilisé pour plusieurs fonctions de PluXml. La plus populaire sans doute, lastArtList(), est la grande championne de cette flexibilité. Même s'il lui manque encore quelques petits items comme la date morcelée, au moins elle n'ajoute pas des paramètres fantôme au milieu du formatage comme mon exemple ci-haut. Ce sera pour une prochaine version, c'est certain, mais en y allant doucement, on peut même rendre toutes les fonctions compatibles aux versions antérieurs en pré-formattant par défaut "l'ancienne" sortie HTML de chacune des fonctions retouchées.
Alors, nous l'adorons notre PluXml, pourquoi pas le rendre encore plus adorable.
artNbCom est faite pour afficher le nombre de commentaires sous forme de liens à partir de la page d'accueil ou sous forme de texte à partir de la page de l'article.
si tu veux juste afficher le nombre d'article:
rien de plus
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Rien de mal à avoir une version par défaut, tu peux y mettre la version la plus "plausible" ou comme dans mon message précédent la version "backward-compatible" pour ne pas faire flancher toutes les installations de nos amis. Mon point est que la flexibilité totale est une garantie contre les imprévus. Je concède que ça ajoute des lignes dans les pages de fonctions, surtout quand on s'attaque à toutes les fonctions d'un coup comme je le suggère, mais les constructeurs de thèmes (et les "convertisseurs" comme moi) t'en seront éternellement reconnaissants.
On verra si l'avenir te donne assez de temps libre pour accomoder les grincheux, le grincheux en chef t'en remercie déjà.
On peut bâtir la fonction avec ou sans la balise quand on part d'une banque de variables, disons que j'en invente une du genre
artCatList('<a href="#catUrl">#catName<a>, ')
pour reproduire la version par défaut de artCat(', ') pour quelqu'un qui veut des virgules. C'est plus facile à dire qu'à faire, surtout quand pas la même personne qui doit le faire! Ces choses-là prennent du temps, c'est la longue route vers la perfection. En attendant, merci pour les méthodes détournées pour arriver à mes fins et me la fermer!
J'utilise à toutes les sauces la fonction artThumbnail() mais je ne trouve pas le moyen de tester la "présence" d'un contenu dans la variable de l'url. Ceci me permettrait de faire autre chose que générer une image brisée. Je force (sans la moindre retenue ou politesse) les utilisateurs de mes thèmes à inclure une image d'accroche mais j'aimerais bien avoir l'option de faire quelque chose de plus diplomatique.
Le problème se pose doublement quand j'utilise #img_url à l'intérieur de la sacrosainte lastArtList(), là j'y vais peut-être un peu fort mais on sait jamais, elle est sacrosainte après tout...
En passant, la fameuse "option en cas d'absence" ouvre la possibilité de plusieurs comportements, pas toujours le même, je ne veux pas mettre une image bidon du type mon-webmestre-ne-veut-pas-travailler.img comme remplacement. On peut sauter l'article, piger dans une banque, piger dans son body d'article, etc.
Bref, encore une fois, parce qu'on ne peut pas lancer les fonctions d'extraction sans les voir tout nous balancer à la figure, il faut un moyen détourné. Ce serait si facile dans mon petit univers rempli de licornes et de bonbons aux cerises:
$array = lastArtList(); rien ne s'affiche
echo lastArtlist(); comportement d'aujourd'hui
Un autre dossier sur la pile des fonctions qui ne peuvent être mises en forme sans bousiller le core alors que c'est clairement propre au thème: la pagination dans les bas de page. Elle a plusieurs visages possibles mais comportent une liste d'éléments prévisibles.
En mettant le formatage des variables dans un $fomrat, ça offrirait la flexibilité de monter la feuille de style avec ces items aux bons endroits.
Nous avons parlé de la fonction artTags un peu plus haut mais je reviens cette fois-ci avec $plxShow->tagList qui m'a forcé à extraire la fonction au complet pour l'inclure (deux fois) dans un thème. La variable coupable cette fois-ci est #tag_size. Si la valeur était restée numérique (ce qu'elle est après tout), j'aurais pu l'insérer un peu comme ceci:
$plxShow->tagList('<a href="#tag_url" class="tag-link" title="1 topic" style="font-size: #tag_size pt;">#tag_name</a>');
eh ben non... la variable ne recrache pas un chiffre comme un simple 5, elle recrache une chaîne "tag-size-5". Cette décoration extra-numérique me force à inclure
pour faire la même chose...
Pour une prochaine version, le simple fait de réellement séparer la valeur numérique pourrait remplacer la ligne
<?php $plxShow->tagList('<li class="tag #tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>'); ?>
par
<?php $plxShow->tagList('<li class="tag tag-size-#tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>'); ?>
pour respecter le thème par défaut et sa feuille de style. La différence est presque difficile à trouver.
En adoptant la bonne pratique de séparer les variables de leur formatage, personne n'en souffre, personne ne perd plus de temps, ce qui est loin d'être le cas en n'adoptant pas ce principe. Les situations comme celle décrite ici impliquent d'inclure des centaines de lignes de plus à un thème juste pour contourner les problèmes, ça fait peur au nouveaux en donnant l'impression que c'est compliqué de travailler avec PluXml. C'est bien triste.