Abonnement à ma liste de contacts

🖮 URL SourceForge ou Github: https://github.com/slhuilli1/formatfichier/tree/main
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives
 

Aujourd'hui, dans cet article, je vous propose la génération et à création de "double-plugin", dont la/les fonctionnalité(s) principale(s) est d'aller rechercher sur l'intégralité des articles contenus dans un Joomla, des éléments, pour en générer "une synthèse".

Afin de mieux comprendre le projet, je vous propose de manière argumentée accompagné d'un exemple, ce que ce plugin fait et pourquoi ce plugin fait ceci.
Dans le cadre de mon emploi, je gère sur Joomla Content, de la documentation. Ce sont des articles Joomla Content.
Or, dans ces articles, jusqu'à maintenant, je génère un lien <a href="/"...> vers un fichier pdf pour faire télécharger ce fichier.
Cependant, au fil de l'utilisation et du remplissage de chacune de mes fiches contenant tous ces liens, articles classés par catégories, je me suis rendu compte que certaines questions de la part de mes collègues arrivent sans que je ne puisse y répondre.
Je prends un exemple très simple. Dans chacun de mes articles (ces articles suivants tous un format prédéfini et donc uniformisé), je vais gérer un ensemble de fichiers de la "catégorie B". Il faut voir ces cartegories comme des <Hn> dans l'article. C'est une catégorie parmi une quinzaine dans l'article. Dans cette catégorie B, pour chacun de mes articles,  je peux avoir N liens hypertextes vers des fichiers PDF. Et comme j'utilise des tabs de régular labs, pour l'instant, j'ai un code qui peut ressembler à ca :
{tab title="First Tab"}
<ul>
<li>{tip title="[[[tiptitreapropos]]]" content="<span class="fic-auteur">[[[auteur]]]</span>: Marcel DUCHEMIN<br/><span class="poids-fichier">[[[poids]]]</span>13 Mo<br/><span class="fic-date">[[[date]]]</span> : 08/01/2014"}
</ul>
{tab title="Second Tab"}
{/tabs}

Ma problématique

La question et le problème sont les suivants : comment recenser à un endroit déterminé, l'ensemble des liens d'une de ces catégories ?
Je ne l'ai pas mentionné mais l'information est intéressante, bien que bloquante au départ, c'est que chacune de ces catégories de liens vers des fichiers est affichée de manière graphique dans l'outil tabs de regular labs.
Or, si vous connaissez un petit peu ce composant, dans sa version gratuite, cet outil propose deux types de short code :
  • le premier est en ouverture d'un Tab, {tab}
  • le deuxième étant la fermeture de l'ensemble des tabs.

Dans chacun de mes onglets, j'ai en plus une liste à puce avec l'ensemble des liens hypertextes vers mes fichiers PDF à télécharger, accompagné de quelques fioritures comme des phylactères dans lesquels je mentionne :

  • le poids du fichier,
  • l'auteur du fichier
  • sa date de création.

Ce code ressemble donc à ca pour UN lien donné : 

<li>{tip title="[[[tiptitreapropos]]]" content="<span class="fic-auteur">[[[auteur]]]</span>NomAuteur<br /><span class="poids-fichier">[[[poids]]]</span> : 20Mo<br /><span class="fic-date">[[[date]]]</span> : 20/05/2021"} <a href="/toto.pdf" target="_blank">Libellé<span class="ref-interne-seo">50254</span></a></li>

 Fonctionnalités de mon plugin

Ce plugin a donc pour but de gérer ses liens hypertexte. L'intérêt de ce plugin et notamment la possibilité d'avoir à un seul endroit une génération de code HTML, qui, au fil du temps, peut être modifié. En effet, à ce jour, je mentionne trois informations ainsi que le lien hypertexte. Il n'est pas exclu que dans quelques années, il n'y est pas quelqu'un qui me demande de rajouter une information spécifique. Passer par un plugin de ce genre permet de gérer automatiquement à un seul endroit l'ensemble de la mise en page (balises, classes, id css...) du contenu complémentaire, pour ensuite n'avoir plus qu'à modifier à un seul endroit les potentielles corrections. Au moins, le formatage de l'information est standardisé et localisé à un seul endroit.
Mais surtout, l'autre point essentiel pour lequel j'écris cet article, et le suivant : dans la mesure où je travaille avec des shortcodes, je peux écrire le shortcode de mon choix avec le contenu de mon choix, et le plugin va reformater automatiquement le contenu. Mais surtout, avec mon développement, ce plugin peut aussi récupérer sur l'ensemble des articles de Joomla, les éléments qui possèdent ces short code pour en faire ce que j'appelle une synthèse. Bien entendu, toutes ces "recherches" se font au travers d'utilisation de regex !

Principe de fonctionnement de la synthèse

 Le principe de fonctionnement de ma synthèse de donner repose sur deux conditions :
  1. La première condition est en fait une simple requête SQL dont le but est de récupérer pour chacun des articles publiés, le titre de l'article, son numéro au cas où, ainsi que le champ introtext de Joomla content. C'est à partir de ce contenu de ce champs que nous allons extraire au moyen de regex les informations dont nous avons besoin.
  2. La deuxième condition, vous l'aurez sans doute deviné, et de regarder que notre article comporte des balises de synthèse, ces fameuses balises dans lequel nous allons spécifier un ensemble d'informations, qui vont servir à la fois à l'affichage de ce contenu dans l'article, mais aussi à la possibilité de générer des synthèses. Sur le plan pratique, j'ai utilisé exactement le même formalisme que celui que nous utilisons traditionnellement dans les il plugin joomla :
{synthese-un-fichier|type:fichier-kit|taille:10 Mo|auteur:Sébastien LHUILLIER|date:20/09/2013|url:__DOCUMENT/fic.pdf|libelle:ceci est le libellé du fichier|ref-interne:47000-1}
 Que voyons nous dans ces paramètres ?
  • Le type du fichier (ici "fichier-kit")
  • La taille du fichier avec l'unité de mesure
  • L'auteur du fichier (généralement issu des méta données du fichier, extaction "manuellle")
  • l'URL relative du fichier
  • Un libellé pour mettre entre les <a> ET </a>
  • La référence interne
 J'entends sous le terme synthèse l'affichage un un endroit (un article, un module) de l'ensemble des éléments taggés avec les shortcodes désignés ci-dessus,
Vous pouvez vous rendre compte dans le shortcode que je viens de mentionner ci-dessus, que vous retrouvez le tag associé à ce plugin, et toute une ribambelle de paramètres séparés par un pipe. L'absence d'espace est volontaire Dans l'ensemble de ces champs, à droite du premier pipe, vous pouvez vous rendre compte que tout fonctionne par un duo, à la manière d'un fichier ini :
  • je définis une chaîne de caractères que l'on pourrait assimiler à un champ de base de données (Ex : auteur)
  • Je saisis un séparateur. j'ai utilisé ici le double point (:). (Ex. : sébastien LHUILLIER)
Et à la manière d'un plugin Joomla, l'ensemble de ma chaîne de caractères est compris entre crochets { et }.
Ainsi, l'ensemble de cette chaîne de caractères entre crochets arrondis, comporte les données portées de ce que je veux afficher à l'utilisateur. Pour extraire le contenu de ces informations stockées dans mes articles, vous l'aurez sûrement compris, rien de plus simple, il suffit d'utiliser des regex comme le montre mon brouillon de rédaction sur Regex101. Vous pourrez retrouver à la fois le regex à utiliser, mais aussi bien entendu le formalisme à utiliser dans mes articles pour utiliser mes plugins.

Un double short code

Shortcode de définition de lien

Comme je tiens à avoir une certaine souplesse lors de la rédaction de mes articles, je préfère travailler avec des plugins de contenu au lieu de module. Ainsi je n'ai qu'à intégrer un short code dans un article pour par exemple, afficher la synthèse des contenus de l'ensemble de mes articles.
Mais qui dit double short code dit short code évidemment. Le premier permet de définir le fait que nous spécifions dans un article un lien vers un fichier ainsi que l'ensemble des informations qui lui sont associées Pour se faire, dans mes articles Joomla, j'utilise le short code {synthese-un-fichier avec une ribambelle de paramètres séparés par le caractère pipe. C'est la raison pour laquel dans cet article, je n'ai pas "fermé" le chorcode mais il doit l'être !
Voila un exemple de regex : {synthese-un-fichier.*type:(.*)\|taille:(.*)\|auteur:(.*)\|date:(.*)\|url:(.*)\|libelle:(.*)\|ref-interne:(.*)\}
Parmi ces paramètres nous retrouvons comme vous pouvez le voir,
  • le type de document que nous souhaitons rendre téléchargeable,
  • son poids que l'on peut aussi appeler sa taille en octet ou dans un multiple de cette valeur,
  • un auteur de document,
  • sa date de création,
  • et bien entendu l'URL relative vers le document,
  • un libellé pour l'hyperlien (ce qui sera entre <a...> et </a> de manière à ne pas afficher le nom du fichier mais bien un texte autre permettant à l'utilisateur de donner une information libre sur ce lien,
  • et une dernière information qui est très importante dans notre cadre métier, et la référence (interne) de la documentation. Cette référence n'a aucun lien avec des informations techniques liées à Joomla ou à de la programmation, cette référence est tout simplement un code interne documentaire. Nous pourrions l'assimiler, par exemple, pour un supermarché, à un code-barre.

Shortcode de synthèse 

Une fois que nous avons défini ensemble des short codes sur les différents articles de Joomla qui nous intéresse, nous avons donc besoin d'afficher à l'utilisateur une synthèse. Pour le moment, cette synthèse bien que fonctionnelle, ne prend pas en compte les doublon que l'on pourrait retrouver dans Jomla, mais la suppression des doublons est prévue. Cela pourrait effectivement éventuellement être une évolution intéressante.
Le programme de ce shortcode de synthèse va exécuter sur la base de données et sur la table des articles, une simple requête de type SQL, où nous allons rechercher le titre de l'article, son ID, et son contenu, dans la table $_content, pour lesquels le champ un trop texte contient au moins une balise de synthèse. C'est la raison pour laquelle, dans ma requête, j'encadre le paramètre du mot clé Iike par 2 caractères %.
Mais faire ce genre de requête en fait ne me fait que de renvoyer l'ensemble des articles j'ai intégré ses balise de synthèse. Il nous manque exactement la même chose que ce que j'ai créé dans le plugin dont j'ai fait la promotion ci-dessus, une simple extraction de données par regex. J'en profite pour spécifier, mais vous l'aurez compris, que le code d'extraction du regex est exactement le même dans cette requête que dans l'affichage du contenu dans l'article.
SELECT id,title,introtext FROM `#__content` WHERE `introtext` LIKE '%{synthese-un-fichier%' and state=1
Une fois cette requête exécutée, je récupère donc uniquement les articles pour lesquels j'ai défini des éléments de synthèse, et pour lesquels bien entendu l'article possède le statut "publié". Ainsi, je parcours l'ensemble de mes résultats, et pour chacun d'entre eux, je vais extraire le contenu par regex du champ.
À des fin de simplicité pour le développeur que je suis, une fois que ces informations sont extraites par regex, je les stocke dans un tableau PHP. J'utilise un tableau pour pouvoir sauvegarder un ensemble de résultats. L'intérêt du tableau, réside dans le fait que je n'ai plus qu'à le lire pour pouvoir le parcourir et récupérer ces informations afin de préparer une chaîne formatée dans laquelle je vais intégrer le contenu récupéré de ces informations. Toutes ces info recupérées, je les entoure de code HTML qui va bien pour pouvoir avoir une présentation sympathique. Libre à vous si vous réutilisez ce plugin de retoucher CSS et éventuellement mon code pour adapter ce plugin à votre besoin.
D'une manière générale, lorsque je fais ce genre de chose, j'ai toujours un double <div> :  J'ai un premier grand <div> qui contient l'ensemble des informations récupérées pour un enregistrement, et pour chacune des valeurs récupérées, je crée un autre <div> ou une autre balise <span> pour pouvoir y appliquer un style spécifique.
Vous retrouverez ces informations entre les lignes 78 et 87 de mon plugin

Evolution ?

En ce qui me concerne, ce plugin fait le travail que je shouhaite. Mais des évolutions peuvent arriver, auquel ca j'en reparlerai ici...
 

Code du plugin

Vous retrouverez ici tous mes articles explicatifs de mes concepts, mes résultats d'analyses techniques m'ayant permi d'aboutir à un fonctionnement de mes applicatifs très fonctionnel

Rapport sondage marche

Voici le rapport statistique du sondage (auquel vous pouvez toujours répondre) que j'ai lancé sur le sujet

Mon GitHub

Voyant que l'intégration du flux RSS ralentissait tout mon site, voisi le simple lien de mon flux RSS : Mon GitHub