
Sébastien LHUILLIER
QRCode autonome (sans webservice)
Après avoir regardé sur la JED les différents modules gratuits de générateur de QR Code, et après les avoir bien entendu téléchargé et analysé un tout petit peu le code de ces modules, je suis fort surpris de voir que beaucoup d'entre eux faisaient appel à un web service externe !
Qu'elle ne fut pas ma surprise d'apprendre et de voir ceci, lorsque l'on sait qui existe des bibliothèques PHP toutes faites permettant de générer des codes 3D.
Fort de ce constat, je m'empresse de regarder sur l'excellent site PHPClasses si quelqu'un n'aurait pas déjà écrit une classe toute faite permettant la génération de QR Code de manière autonome et sans connexion au net. bah oui, tout le monde ne bosse pas avec un e connexion internet ! loin de là.
Cette absence de connexion me donne une problématique supplémentaire : je dois, moi, oui oui bien moi, travailler sans API !!! Vous avez bien lu !!! C'est quand même fort pour LE gars qui s'amuse sur son site web avec !
Partant de ce constat, et donc sans que l'on soit tributaire d'un web service externe, je me suis mis à intégrer une bibliothèque PHP permettant la génération d'une image de ce type.
Le gros avantage à cette méthode, c'est que nous ne dépendons plus d'un web service externe, si ce dernier vient à tomber en panne, votre site continue de fonctionner de manière tout à fait normal puisque la bibliotheque reste sur VOTRE serveur ! Sans compter, comme je le disais, en cas de non connexion au net... ca continue de marcher
Nous allons donc voir dans ce module comment implémenrter et la bibliothèque génératrice du QR code. Je ne rentrerai pas dans le détail de la bibliothèque car je n'en suis pas auteur, mais je vais vous expliquer comment je l'ai intégré grâce à mes commentaires.
Encore un point. Est ce que je triche ? Oui un peu je l'avoue car les QRCodes sont généré en tant que fichiers puis affichés dans la page. Ils devraient être affichés à la volée. Cela dit, chose que je n'ai pas faite, il suffit de supprimer les fichiers générés dans le code du module.
Sticky notes (Post-it) pour Joomla
Dans le cadre de mes attributions professionnelles, je dois gérer un ensemble de données cohérent autour de différents matériels.
Première étape, création de notre champ personnalisé répétable

Création de l'article

Revenons à l'utilisation

Ruban
Je vous propose aujourd'hui un module ruban que j'ai spacifiquement écrit pour la template Protostar. N'utilisant pas cette template sur ce site, il ne fonctionne pas ici.
L'idée est de placer dans la coin gauche des pages un module qui affiche de manière diagonale, un texte. Ce texte est placé sur fond rouge mais vous pouvez changer tout le CSS fourni.
Table tri
j'en rêvais, et je n'ai fait... non sans mal !
Totalement ignorant en Javascript, je me suis lancé un défi de fabriquer un tableau des articles, triables et filtrables. Alors, ce module est à prendre toutefois avec des pincettes et si vous souhaitez adapter et corriger le code, n'hésitez pas et faites moi remonter vos améliorations... car j'en ai vu un que je n'arrive pas à résoudre. Je sais, je n'ai pas honte ed présenter un outil buggé car le bug n'intervient pas souvent.
Alors voila, je recherchais à afficher une liste d'articles Joomla Content (la démo va donc pas être simple ici étant sous k2) avec la possibilité de trier, afficher les articles et faire des recherches par "colonnes".
Administration
Ce module n'est pas à mettre dans les mains des personnes ignorant le langage SQL. En effet, l'idée est de travailler avec une très grande souplesse avec cet outil, ainsi, l'ensemble des valeurs affichées est le résultat d'une simple requete SELECT en SQL, dans laquelle l'utilisateur pourra intérroger la base de données de Joomla. Cela rend l'outil super souple car n'importe quel composant (Jevent, K2, Joomla content....) peut être interrogé et ses données retournées. Cerise sur le gâteau : la requete n'est pas dans le code mais dans l'interface d'administraion du module.
A contrario, cet outil permet de maitriser, via SQL, les jointures, les selects... afin de retourner que ce que l'informaticien souhaite.
Voila comment se présente l'interface d'administration de l'outil
Sur cette copie d'écran, vous retrouverez toute la très simple configuration du module ! Rien n'est complexe (même si les champs sont - trop ? - nombreux), les champs à remplir sont ceux sur lesquels sont basés le plugin JQuery Fancytable proposant l'affichage des résultats !
Le résultat
Comme je vous le disais, je n'ai aucun article Joomla content sur mon site donc pas simple de présenter un résultat autre que par copie d'écran sur laquel, qui plus est, le suis obligé de flouter des données. Mais si comme moi, vous utilisez K2 ou autre chose, il vous suffit d'adapter la requête SQL.
Je commente ce que l'on voit :
- tabletri : c'est le nom du module que je n'ai pas masqué dans la console d'administration de Joomla
- "ceci est la légende" : C'est la chaine de caractère légendant le tableau. On peut aussi dire que c'est le titre du tableau
- Identifiant, titre, Alias... : ce sont les titres du tableau, configurés dans la console d'adminitration (j'avais essayé de passer par des alias dans la requete SQL mais sans succès). Ces noms de colonne sont simplement séparés par le symbole : (qui ne peut dont être utilisé dans le titre de la colonne)
- (champs/rectangles) : fitres de recherches
- (chaque ligne) (floutées) : ce sont les résultats de la requête
Alors l'outil est largement perfectible, je le sais. Notament sur la partie client en jquery. Mais encore une fois, ne maitrisant pas ces technos, je travaille pas mal par tatonnement et analyse de code (ici le plugin JQuery utilisé pour ce résultat) que je sais déchiffdrer mais je n'ai pas la prétention de dire que je sais le lire.
Je vous joins mon module en PJ, si vous le retravaillez, ce sera avec grand plaisir que le mentionnerai ici les personnes qui se sont basées sur mon module pour le rentre perfectible. En encore une fois, je doute qu'il soit fort utile sur internet, mais sur une "application" métier Joomla en interne, la vision n'est pas la même !
Un plugin de "rapport de bugs"
Que voit on aujourd'hui ?
Oui vous avez bien lu le titre... mais vous allez être déçus... ou pas :) !
Dans le cadre de mes fonctions professionnelles d'adminitration d'un site intranet national, il arrive que des infos mentionnées soient devenues osolètes, erronnées, ... et donc l'article doit être supprimé de Joomla. Mais pour que j'en sois averti, Il faut donc faire une remontée de l'information au gestionnaire de la page (moi, quoi) afin que je corrige.
Alors, oui, j'ai déja écrit un module de ce type mais je souhaitais développer, pour me faire la main, un plugin pour ca. De plus, l'utilisation d'un plugin est drôlement plus souple puisqu' on peut l'intégrer où l'on veut dans sont article (Joomla content pour ma part) à l'aide de shortcodes.
L'idée de ce plugin est de définir une chaine entre deux tags dans un article et le plugin générera une chaine, avec un hyperlien et un mailto.
Alors le spam ? Oui bah pour être honnête, rien a faire puisque mon intranet n'est pas relié au net. On peut se permettre donc un lien hypertexte de type mailto: .
Alors j'ai déja écrit un article sur un plugin que j'avais fait à l'époque où je n'avais pas trop le temps de m'apesantir sur le sujet. Cette fois, je vais essayer de rendre et article plus pédagogique.
Il fait quoi ce plugin ?
Le plugin va remplacer l'appel dans un article {mailtoEnreg}Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.{/mailtoEnreg} par Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Rien de bien folichon, mais c'est un besoin... ou plutôt un besoin pédagogique ! Apprenons à réaliser ce plugin
Un plugin répond à un événement
Joomla a recenséune multitude d'événements que l'utilisateur peut générer. Bonne nouvelle, vous n'avez pas à détecter l'événement, juste trouver le bon pour y implémenter le code qui va bien. Vous pouvez retrouver la liste des événements et ce à quoi ils répondent sur la page Plugin/Events de Joomla! Documentation. Je ne vais pas ici faire un inventaire à la Prévert mais sachez que le système Joomla possède une cinquantaine d'événements. Pour celles et ceux qui ont déja codé avec des IDE comme Delphi, ou encore VB, c'est le code que vous mettez dans les onEvent. (Ex : onClick). Sauf qu'ici c'est bien à un événeemnts serveur qu'il faut répondre.
Il est a noter qu'ici, on souhaite transformer un shortcode en une chaine mailto. Alors il est où cet événement ? Que peut il bien être ? Et voila le premier travers auquel je me suis heurté et je tenais à prendre quelque igne pour mieux expliquer. Contrairement à un IDE comme ceux que j'ai cité, les événements de Delphi par exemple sont des événemments engendrés par des actions utilisateurs, qu'ils soient directs ou par ricochet (OnClick est direct car c'est sur une action souris, onChange peut être par ricochet car ca peut être, par exemple, en cliquant sur un bouton qu'un élément peut changer. Et ce sera sur l'événement onChange de l'objet sur lequel produire le test que l'on intégrera le code). Si je transpose cette explication au web, il nous vient tout de suite à l'esprit les différents événements Javascript. Et bien, vous avez tout faux, c'est pas ce que l'on cherche.
Pourquoi dis-je cela ? Car je suis tout de suite fourvoyé dans ce travers et n'ai plus rien compris jusqu'à ce que je reprenne tout depuis 0. Si vous analysez les différents événements de la liste dont je vous ai mis le lien, vous vous rendez vite compte que ces événements sont détéctés par joomla "en interne" et ne sont pas directement la conséquence d'actions utilisateurs directes. Il faut imaginer un moteur Joomla qui passe son temps à attendre de voir si l'utilisateur a fait une action qui puisse engendrée une action qui puisse répondre à un événement.
Dans notre exemple, le plugin répond à un onContentPrepare (je détaille le code plus loin). Si je regarde la documentation de onContentPrepare, on se rend compte qu'Il s'agit de la première étape de la préparation du contenu pour la sortie et est le point le plus courant pour les plugins orientés contenu pour effectuer leur travail. C'est donc une action qui est intercalée entre le moment où la page web est demandée, mais non encore affichée. Juste avant son affichage, on lance l'action avant de la retourner au navigateur modifiée (les shortcodes sont modifiés par du HTML). Nous verrons plus bas l'action (le code) en détail.
Organisation des fichiers d'un plugin Joomla.
L'organisation des fichiers d'un plugin s'organise ainsi et je crois bien que c'est encore plus simple que mes modules :
- un fichier php au coeur du systeme (mailidenreg.php) qui est le coeur de l'action
- le fichier XML associé (mailidenreg.xml)
Attention : je me suis fait avoir. Dans le fichier XML, il faut bien spécifier (ligne 13), le nom du plugin : nom du fichier sans l'extension.
Les fichiers
mailidenreg.php
<?php
defined('_JEXEC') or die('Access deny');
?class plgContentMailidenreg extends JPlugin{
?
function onContentPrepare($content, $article, $params, $limit){
?
preg_match_all('/{mailtoEnreg}(.*?){\/mailtoEnreg}/is',$article->text ,$matches);
? $i=0;
?foreach($matches[0] as $match){
?
$username=$matches[1][$i];
?
$email = $matches[0];
?
$sujet_email = $this->params->get('sujet_email', '');
?
$contenu_mail_avant_id_art = $this->params->get('contenu_mail_avant_id_art', '');
?
$idart = explode(':',JRequest::getVar('id'));
?
$texte_contenu .= $contenu_mail_avant_id_art.$idart[0].'%20%0AVeuillez%20nous%20spécifier%20la%20modification%20a%20effectuer%20:%0A';
?
$ligne = '<a class="titre-lien-mail-id-enreg" target="_blank" href="mailto:'.$username.'?subject='.$sujet_email.'&body='.$text_lien.'%0A'.$texte_contenu.'">'.$this->params->get('titre_lien', '').' </a>';
?
$article->text = str_replace($match,$ligne,$article->text);
}
}
}
Et voila, j'ai quand même passé du temps dessus a trouver des choses qui n'allaient pas.... Mais le plugin tourne désormais
Afficher le nombre d'enregistrements actifs dans Joomla
Dans un cadre pro, j'ai besoin de connaitre le nombre d'éléments saisis dans Joomla pour connaitre les différents taux d'avancement de mon projet, sachant que nous connaissons par avance le nombre d'enregistrements finaux. Je dois rendre compte au SHD (je ne sais pas si tout le monde connait l'abbréviation : supérieur hiérarchiquye direct) le nombre d'enregistrements gérés par le système. Sans rentrer dans la technique nous avons mis en place pour ette saisie, je dois pouvoir dire : j'en suis à X % de saisie.
Pour connaitre ce taux, il faut que je sache combien le système possèdent d'enregistrements totaux publiés. Ce petit module joue ce rôle. Pour chaque éléments, j'ai proposé de pouvoir demander une phrase d'introduction à afficher, phrase saisie par l'utilisateur, le reste des infos est simplement issu d'une simple requete SQL
Prix essence
Ville : NANCY
Automate : Oui
Mise à jour : dimanche 07 août 2022 03:57:00
La station se trouve sur une route
Ville : NANCY
La station se trouve sur une route
Ville : NANCY
Mise à jour : jeudi 23 janvier 2020 08:45:20
La station se trouve sur une route
Ville : NANCY
Automate : Non
La station se trouve sur une route
Ville : NANCY
Automate : Oui
La station se trouve sur une route
Ville : NANCY
Automate : Non
La station se trouve sur une route
Ville : NANCY
Automate : Non
Mise à jour : vendredi 05 août 2022 07:13:00
La station se trouve sur une route
Ville : NANCY
Automate : Oui
Mise à jour : dimanche 07 août 2022 03:47:00
La station se trouve sur une route
Ville : NANCY
Automate : Oui
Mise à jour : mardi 07 décembre 2021 01:04:20
La station se trouve sur une route
Module lister les dernières vidéos d'une chaine Youtube
Dans ma série "j'ai développé" plein de trucs mais j'ai pas encore eu le temps de les partager", voici l'un des N modules qu'il faut que je vous présente.
Au départ, l'idée est de pouvoir présenter au vos utilisateurs, les dernières vidéos qui ont été mises en ligne par une chaine Youtube. Une fois votre module installé, vous spécifiez dans votre console d'administration la référence de la chaine Youtube que vous voulez "suivre" et affectez le module à l'endroit où vous voulez.
Dans la console d'administration, vous avez 3 paramètres propres au module (je ne parle pas des paramètre d'affectation Joomla) obligatoires à renseigner :
- l'identifiant de la chaine Youtube à suivre
- La clef API que vous avez demandé à Youtube
- Le nombre maximal de résultats que vous voulez afficher
Une fois cette config effectuée, affectez le module comme bon vous semble et voila, c'est déjà fini. La présentation est facilement modifiable via les CSS mais je n'ai rien fourni dans le CSS. Comme à ma mauvaise habitude (enfin ce module date de l'époque où je l'ignorais), la présentation est (encore) dans le helper. N'hésitez pas à modifier le code si besoin.
Note sur les fichiers manifest des modules Joomla
Suite à une migration, ce matin, d'un module que j'avais développé en local sur mon environnement de développement, que je souhaitais migrer en production sur mon environnement de prod, je me suis rendu compte d'une grosse erreur que je souhaitais notifier dans cet article.
En effet, lorsque j'ai migré mon module en prod, lle fichier CSS dans lequel je stocke tous les styles propres à mon module, était absent du serveur . Et la procédure que j'avais mise en place, était de prendre le répertoire de mon module de mon serveur de test, de fabriquer un zip de ce répertoire, dans le but de l'installer sur le serveur destination.
En faisant cette manipulation, comme je le disais, aucun fichier CSS n'était présent sur le serveur de destination. En cherchant un peu et en demandant de l'aide, je me suis rendu compte que pour faire cette manipulation, il était très important de notifier dans le fichier manifest de mon module, la présence de fichiers CSS. Bien qu'appelé dans les fichiers php, un bug ce produisit puisque le fichier était introuvable car non migré. En effet il n'était pas installé puisque absent du fichier manifest.
Si nous votions.... par QRCode
Je ne sais pas si je suis totalement déformé par les nouvelles technologies, mais cette semaine, en prenant mon bus, j'ai vu sur une affiche un QR code. Période électorale oblige, par association d'idées, je me suis dit : pourquoi ne serait-il pas intéressant de voter par QR Code ?

