Modules

PJ1: mod_definitions.zip
🖮 URL SourceForge ou Github: https://github.com/slhuilli1/definition
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Intro

Aujopurd'hui je vous partage un petit module que j'ai dû écrire dans le cadre de mon travail, afin de pouvoir d'une part prendre en compte les définitions contenues dans un article, mais surtout de pouvoir les recenser à un unique et même endroit. Pour effectuer l'affichage de cette synthèse, dans mon cas, je dédie un artyicle complete spéficique à cette fonctionnalité. Voyons en détail ce fonctionnement...

Philosophie et concept du module

Travaillant dans un cadre technique, mes utilisateurs (tout comme moi d'ailleurs) ne connaissent pas forcément les acronymes techniques, les termes (mots du dictionnaires) employés dans mes articles dans un cadre technique (et oui, le contexte joue beaucoup dans la langue française) et j'ai vite vu la nécéssité de pouvoir synthétiser tout ca dans un article.

Mais vous me connaissez désormaius, j'ai toujours de vieux reflexes merisiens : :une donnée ne doit être définie qu'à un seule endroit. le cas contraire pourrait viter, très vite même (à une virgule près par exemple) engendrer des incohérences des données (vive les CIF ! - Contraintes d'intégrités fonctionnelles).

Applisué à notre cas, je ne voudrais pas avoir un mot à définir dans un article, et avoir un deuxieme article en texte pur où je reprenne le mot et lui donne une definition !

Utilisation et fonctionnement de ce module

Le fonctionnement de ce miodule est super simple sur le principe : après avoir recherché tous les articles publiés (ce qui peut se discuter selon le contexte fonctionnel) de Joomla (personnellement, je n'utilise pas les classes de Joomla mais bien une requete SQL, ce qui me permet de limiter les résultats en fonction de la condition de restriction WHERE), je parcours le curseur retourné. Ma requete SQL prenant en compte la présence du tag de mon plugin dans le champs INTROTEXT, à l'issue de l'execution de ma requele SQL, je suis sûr et certain que mon curseur renferme des articles où des definitions ont été rédigées. (pouyr rappel, un curseur en base de données est un ensemble d'enregistrements)

Le curseur retourné, il ne me suffit plus qu'a le parcourir, élément par éléments, afin, au moyen d'une éxpression rationnelle (regex), d'extraire les informations qui m'interesse.

NOTE : je n'ai abolument rien fait au hasard et me suis appuyé sur deux balises html (version 5) qui donnent un tout petit peut de sémantique à HTML : <dfn> et sa "sous-balise"  <abbr>

Reste à votre charge de modifier mon style CSS pour l'adapter à votre code

 

Add a comment
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Aujourd'hui je vais vous parler d'une possibilité d'exporter vos informations Joomla, quels que soient les composants que vous utilisez, que ce soit du Joomla content, Jevents ou encore K2 ou que sais-je encore,

Mon petit module s'adapte à tous et à tous ces composants possibles et inimaginables sur votre CMS favoris, puisqu'il s'éxécute "directement" sur la base de données.. La seule et unique condition pour que l'export fonctionne, c'est que le contenu de vos composants ou de vos modules soit stocké en base de données. En effet, ce petit module que j'ai installé côté administrateur, ne prend pas en compte les sauvegardes de données dans des fichiers texte, XML ou autre. Il vous sort un fichier texte.

Le principe utilisé est un principe basé sur le système de gestion de base de données MySQL, il faudra peut-être donc adapter si vous travaillez avec un autre SGBD. En effet, on sort complètement du SQL ANSI92 (de mémoire ?) puisque l'outil travaille avec une spécifité MySQL que nous allons évoquer ci-dessous.

Principe de base

Dans ce module j'ai donc installé sur mon interface d'administration de Joomla, je vais simplement lancer une requête SQL. Le gros intérêt de ce fonctionnement c'est que nous pouvons mettre dans notre requête, exactement ce que l'on souhaite récupérer de la base de données. Inutile donc de faire un export total de votre base de données, vous n'avez simplement qu'à écrire votre requête SQL comme bon vous semble pour exporter les parties de vos tables qui vous interesse. Mon outil va simplement rajouter à votre propre requête SQL, le code (MySQL) qui va bien pour exporter vos informations dans un format de fichier texte.
 Il eût été possible, et plus long, de faire un outil plus universel, mais qui utilise un autre SGBD de la suite WAMP/LAMP, donc MySQL ? Mais n'hésitez pas à repomper et adapter le code (en me disant où faire un lien si vous travaillez à partir de ce module)

Mise en œuvre 

Comme vous pouvez le voir dans la copie d'écran ci-dessous, je propose d'aller rajouter à la requête, l'ensemble de paramètres qui peuvent vous servir pour votre export. Dans ces paramètres, la requête fixe la ligne SELECT et propose à l'utilisateur de rajouter les clauses WHERE, GROUP BY, ORDER BY et à HAVING.
 export1
Vous pouvez donc ainsi, à partir de votre propre Joomla, exporter ce que vous souhaitez. C'est l'avantage de mon système, nous ne sommes pas cantonnés à un export de l'ensemble de la base de données.
Je n'ai pas mis en place dans ce module un "bouton" de lancement (un bouton d'action), de manière à ce que ce module se lance automatiquement au chargement de la page sur l'accueil de la page d'administration. C'sdt discutable, je sais. Ce module est installé et configuré pour être lancé à chaque chargement de la page où il se trouve. Je ne peux que vous conseiller ainsi de y intégrer à une page qui possède un statut d'accès uniquement à l'administrateur de site web. Ce module virgule au cours de ce développement, a été installé du côté administrateur de jumia. Vous pouvez donc bien entendu, installer ce plugin du côté public. Les fichiers fonctionnent exactement de la même manière il suffit simplement dans le fichier XML de corriger sur la ligne 2 et de placer le répertoire dans la partie publique du site (pas dans le sous répertoire administrator en clair). Mais je doute l'intérêt de y installer du côté public sauf a spécifier des droits particuliers avec authentification.
Installer sur un Joomla de base, vous verrez apparaître au moment du chargement de votre interface administrateur, un nouveau module qui s'intitule export Joomla. Remarquez que la ligne de la commande SQL reste affichée. Ceci étant dans un premier temps pour un simple but de débogage, je ne l'ai pas supprimée car je pense qu'elle peut servir. Vous pouvez d'ailleurs remarquer que le chemin d'accès sur un client Windows s'écrit non pas avec des anti slash mais bien avec des /. J'insiste vraiment sur ce point si vous souhaitez déplacer le fichier ailleurs car j'ai cherché très longtemps. Notez aussi que ces signes "barres" sont toutes doublées. Sans ce doublement, la création du fichier ne fonctionne pas. Du moins sous Windows.
Je n'ai pas testé ce module sur un autre serveur que Windows car je n'en ai pas l'utilité ailleurs, mais je vous mets en garde peut-être faudrait-il corriger certaines lignes de code comme se séparateur de répertoire pour bien spécifier le chemin dans lequel vous souhaitez enregistrer le fichier. Remarquez aussi que dans ma copie d'écran, j'ai bien mis un chemin absolu à partir du "root" c:.
Ce module, je souhaite véritablement qu'il soit automatique. C'est la raison pour laquelle il se charge au moment du chargement de la page d'accueil du panneau d'administration de Joomla. Peut-être faudrait-il, pour votre part, modifier ceci et éventuellement créer un chemin dans le menu composant. Mais ne sachant encore pas le faire, je ne me suis pas attelé à cette tâche....
Add a comment
PJ1: mod_libandcss.zip
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Il y a quelques jours, j'avais écrit un plugin qui permettait de charger des bibliothèques externes, ainsi que des feuilles de style, dans notre Joomla. 

Lorsque d'aucuns ont vu cette fonctionnalité fort sympathique, ils m'ont demandé s'il était possible, dans le code, de pouvoir spécifier à quel endroit, sur quelle page, nous pourrions sélectionner le choix des chargements de ses bibliothèques externes.
Comme un plugin et toujours chargé sur l'ensemble du site jumia, il aurait fallu dans mon code que je code des conditions particulières pour sélectionner les endroits où où ces bibliothèques seront chargées. Après mûre réflexion avec le principal demandeur de cet outil, nous avons conclu que, même si ce n'est pas le rôle principal d'un module utilisation de ce dernier pourrait véritablement convenir à l'utilisation qu'il souhaitait en faire point en effet, lorsque vous créez un module dans jumia, dans la console d'administration, vous avez la possibilité de charger ce module sur des tonnes de conditions inimaginables. Et pour peu que vous utilisiez des outils comme advanced module manager,  vous aurez la possibilité de charger mon propre module selon vos propres conditions bien définies. Alors, bien qu'un module est un rôle essentiel d'affichage de données, le mien n'affichera rien. Il sert juste à pouvoir être appliqué selon les conditions définies dans joomla.
 
Quels sont les types de fichiers que nous pourrons charger ?
J'ai prévu la possibilité de charger, de manière conditionnelle, à la fois des fichiers de type feuille de style en CSS, mais aussi des fichiers de script au format JavaScript, avec l'extension de fichiers JS.
 
Combien de modules ?
Même si il y a réflexion que je vais vous exposer ci-dessous paraît d'une logique implacable, je tiens à revenir dessus. Vous aurez besoin de spécifier autant de modules que de conditions sur lesquelles vous souhaitez charger vos fichiers CSS et JavaScript. Vous pouvez bien entendu dans un module, charger un CSS sans fichier JavaScript, ou un JavaScript avec un fichier CSS ou encore chargé un fichier JavaScript sans fichier CSS. Mon module regarde si vous avez rempli le chemin des fichiers ou non.
 
Les chemins des fichiers 
Mon code ne prend pas en compte l'utilisation des constantes de jumia pour récupérer les chemins par défaut des racines de vos sites internet point j'utilise les chemins relatifs pour accéder au fichier. Ainsi, je vous conseille de charger les fichiers et de les tester dans votre code html sélectionner. Pour rappel,. correspond au chemin courant.
Mais, et je tiens à le souligner, dans le nom des chemins que vous pouvez renseigner dans les champs URL, vous pouvez saisir une URL complète d'une bibliothèque qui va par exemple être stocké sur un CDN. Ainsi, une fois ce champ renseigné, vous n'aurez plus à y toucher tant que le CDN ne change pas. Que ce soit pour des chemins CSS ou pour des chemins vers des bibliothèques JavaScript.
 
Le nom des librairies
À chacune des librairie que vous allez renseigner dans les champs de type URL de mon module, vous pouvez rajouter un nom de librairie. Ce nom est présent uniquement pour que vous puissiez vous rappeler à quoi fait référence l'URL. Cette information n'est stockée nulle part dans le code, pour le moment, hormis en mode debug, ce qui vous permet de voir si votre bibliothèque est chargée ou non
 
Le mode debug
Pour chacune des librairies que vous souhaitez charger, vous avez une case à cocher debugJS ou debugCSS. Un cochon une ou l'autre de ces cases de vos bibliothèques, vous verrez sur la page web confirmer ou non que votre bibliothèque a bien été chargée sur la page. Cette case à cocher et donc fait pour être décoché en mode exploitation de votre site web. Si vous y accrochez, c'est simplement pour confirmer que le chargement est bien fait point bien entendu, même décocher, il vous suffit d'inspecter le code source de la page pour voir que vos fichiers ont bien été chargés.
 
Position
Ce module est en invisible, il y a position de ce dernier est complètement facultative. Vous pouvez renseigner n'importe quelle position, mais il faut que l'une d'entre elles soit bien sélectionnée dans la liste déroulante de la console d'administration de Joomla.
 
Utilisation de l'outil advanced module manager
Cet outil a véritablement été pensé pour fonctionner avec l'outil advanced module manager qui a été développé par regular lab. En effet, en couplant mon outil est celui de regular lab, même en version gratuite, vous pourrez charger mon module selon vos propres conditions que vous aurez sélectionné au travers de advanced module manager. Effectivement, sans cet outil, le mien perd de son intérêt.
 
Remerciements
Je remercie particulièrement Monsieur Serge et Monsieur Jean-Charles qui m'ont suggéré cette idée de développement de module.
Add a comment
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Aujourd'hui je vous présente dans cet article une mamaille, autrement dit en français normal, une bidouille que j'ai réalisé pour le CMS Joomla concernant  Joomla content, qui vous permet de créer un petit formulaire web avec un champ texte et un simple bouton, vous permettant de saisir à l'intérieur la référence de votre article Joomla (son ID) couplée à un bouton Valider qui, lorsque vous aurez cliqué, sur ce bouton, vous transportera directement sur la fiche portant le numéro que vous avez saisi.

Avant toute chose, je tiens à préciser que pour que cela fonctionne, vous devez avoir configuré votre fichier .htaccess avec les bonnes règles de reroutage, ces dernières règles se trouvent notamment dans le fichier .htaccess de la dernière version 3.9 de Joomla que vous pouvez télécharger. En effet, après avoir découvert fortuitement cette manière de fonctionner, j'ai demandé à mon administrateur système si lui-même avait configuré ler .htaccess du serveur dédié à mon Joomla pour faire fonctionner ce fonctionnement, il m'a répondu que non il avait tout simplement installé la derniere 3.9, avec à son intérieur le fichier .htaccess pré-configuré ainsi.
 
Le principe est très simple, si vous saisissez l'adresse de votre fichier de la page d'accueil, à savoir index.php, auquel vous concaténez un / puis le numéro de la fiche que vous souhaitez obtenir, vous arrivez directement sur la fiche envisagée. Si je saisis et adresse par exemple domaine.tld/index.php/3951, je tombe directement sur l'article 3951 que j'ai saisi dans l'URL.
 
Partant de ce principe, j'ai simplement créé un tout petit code HTML, dans lequel j'intègre le formulaire et un petit JavaScript de redirection, permettant ainsi de me rendre directement sur la fiche que j'ai saisi.
Partant de partant de ce principe, j'ai écrit un petit module personnalisé que vous pouvez ainsi réutiliser ou bon vous semble, qui contient le code suivant.
<form>
<input type="text" name="nro_art" value="2" />
<button onClick="url = 'index.php/' + document.getElementsByName('nro_art')[0].value;document.write('Vous allez être redirigé');window.location.replace(url); ">Go2</button>
 </form>
 
 formJoomla
Add a comment
PJ1: mod_entjca.zip
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Vous aimez suivre l'activité de la vie économique de votre région  ? Vous allez aimer alors mon module !

Mais je vous mets tout de suite en garde, vous allez haïr la présentation de ce module. N'hésitez pas à corriger et à me renvoyer éventuellement vos modifications de la feuille de style présentant les informations de ce module, je els joindrai  à cet article
Je sais que certaines personnes ont comme besoin de suivre l'activités économique de sa région. Cela peut être très intéressant si vous êtes dans la gestion d'un annuaire local d'entreprises.
Ce petit module s'appuie sur les données en Open Data du site internet infogreffe.fr, données qui vous informent sur l'état des créations, des transferts, des suppressions des entreprises de votre région. Ou plutôt devrais-je dire de votre département. En effet, les API du site vous permettent de récupérer une dernière création des entreprises de votre département. J'ai configuré l'API de cette manière.
Partant de ce principe, ce module va donc afficher les dernières créations de votre département, lequel doit être configuré au préalable dans la console d'administration du module. Vous devez simplement saisir le code de votre département. Pour la Meurthe-et-Moselle, vous devez saisir 54. Pour tout le reste, ce module se comporte comme un module de base.
Avis aux infographistes : si vous êtes amené à modifier le fichier CSS fourni avec ce module, ce sera une fois de plus avec grand plaisir que je l'ajouterai à cet article. :)
 
Add a comment
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Je ne sais pas vous, ou si c'est du faiit que je sois issu d'un monde parfait en terme d'ergonomie (euh, mac OS parfait ? oui ! et j'assume) mais j'aime reproduire des fonctionnalités dans mes application qui restent utiles. Je ne pense même pas simplement lancer une requete SQL sur PHPMyadmin sur mon serveur juste pour lister les articles Joomla non taggés. Bon je dois aussi dire que je n'ai pas accès à phpmyadmin sur mon environnement pro. Du coup, j'écris mes modules qui me lancent mes requetes désirées.

Icic, la requête (écrite non sans mal) permet de lister les articles non taggés. Elle ressemble à ca (j'ai mis les explications dans des phylactères) : 

 
select DISTINCT (doc_content.id), doc_content.title
FROM doc_content
left join doc_contentitem_tag_map on doc_contentitem_tag_map.core_content_id=doc_content.id
where doc_contentitem_tag_map.core_content_id is null  J'ai trouvé en faisant une rétro analyse du contenu de la base de données, j'aurais du mal a expliquer, mais un message est intéressant ici : https://forum.joomla.org/viewtopic.php?t=866399
order by doc_content.id desc";
 
Je crois bien qu'en fait j'ai expliqué le plus gros, tout le reste est de l'affichage de résultats issus de la requete. Remarquez toutefois, je m'améliore, je n'affiche pas les résultats dans le contrôleur masi dans la vue (comme quoi des fois...) !
 
 
Add a comment
PJ1: mod_javascript.zip
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

A la demande générale d'un seul et unique développeur et utilisateur de Joomla, qui m'a beaucoup dépanné dans mes projets, cet utilisateur avancé m'a demandé s'il était possible de lui développer un outil permettant de sélectionner au travers de l'interface d'administration, l'ensemble des bibliothèques JavaScript qu'il souhaite intégrer dans ses projets. De mon côté, j'ai déjà eu un besoin similaire de cette fonctionnalité mais plutôt pour mes fichiers CSS. Ainsi, ce module va intégrer CSS et JavaScript externes à vos différentes pages selon les conditions de Joomla. Voyons son fonctionnement.

Philosophie 

Je m'appuie sur le cœur même d'une fonctionnalité de Joomla, à savoir la possibilité pour un module, d'être affiché ou non sur une page en fonction de certaines conditions. Dans notre cas, ce module n'affichera aucun retour à l'écran, sauf si vous cochez la case à cocher débogages, mais dans sa fonctionnalité, cela ne sert strictement à rien. Cette case à cocher vous permet lors de la mise en place de votre module, de voir s'il est simplement bien pris en compte dans votre page. En effet, si vous cochez cette case, vous verrez un message blanc sur fond rouge ou sera notifié vous avez activé le mode débogage du module mod_javaScript.
 
firefox i95o6baiK7
 
Petite parenthèse 
Je fais tout de suite une petite parenthèse sur le nom de ce module ainsi que sur sa fonctionnalité. En effet, je l'ai appelé mod_javaScript car au point de départ, je ne comptais pas intégrer l'activation ou non de feuille de style CSS. J'ai rajouté cette fonctionnalité après coup, sans renommer le nom de ce module.

Utilisation et fonctionnement de ce module.

Si vous maîtrisez Joomla, vous aurez compris que ce module est utilisé afin de contourner et mamailler l'outil. En effet, un module en général affiche un contenu. Dans ce cas, hormis en mode debug aucun contenu n'est affiché, mais les définition des fichier CSS et JS dans la console d'admin sont bien chargés.
J'utilise un module pour pouvoir utiliser les fonctionnalités de joomla intitulées addstylesheet et addscript. La première méthode permet d'intégrer dans votre module, une feuille de style, et la deuxième méthode permet d'inclure dans votre module, un script Javascript (beurk:-) .
Or, comme nous intégrons des fichiers externes, ceux-ci sont intégrés dans le head de votre page html. Cela signifie donc que le style ainsi que les scripts ne sont pas associés à ce module précisément mais à la page complète. Ainsi, l'ensemble des scripts déclarés ainsi que les feuilles de style déclarées dans ce module seront appliqués à l'ensemble des pages dont vous allez spécifier, dans l'administration de ce module, les caractéristiques. Pour spécifier ses caractéristiques, je me base sur l'administration classique de Joomla, c'est-à-dire dans l'administration, dans l'onglet affectation, vous pouvez définir ou ce module va être activé.
firefox JzJAR5cDCL
 
Et comme j'utilise l'API de Joomla pour charger les feuilles de style et les fichiers de (java)scripts, nous allons avoir exactement sur les pages que l'on souhaite, à savoir l'ensemble des scripts déclarés dans le module. Ainsi, vous pourrez définir autant de modules que de choix de feuilles de style et de script Javascript que vous souhaitez afficher dans votre page, et ce, selon les pages que vous souhaitez. Reste à vous de définir soit le couple JavaScript ↔ feuille de style, soit uniquement un script dans le module ou encor uniquement une feuille de style dans ce module. Bien que ce module soit invisible, je vous retourne donc à la gestion classique d'un module dans Joomla.
 firefox kOv7l6oaJI

Affectation et conditions

Je reviens rapidement sur la notion d'affectation du module, le deuxième onglet dans votre console d'administration de votre module. C'est bien ici que vous devez définir les conditions précises ainsi que les "lieux" où vous souhaitez attribuer ce module invisible. C'est d'ailleurs pour cette raion précise que c'est un module et non un plugin !

Débogage 

Comme ce module est un module invisible, j'ai défini une case à cocher "débogage" dans la console d'administration de l'outil. Une fois activé, cette case à cocher vous permet simplement d'avoir un message qui vous spécifie que le module est bien mis en place. Son utilisation réside dans le fait que, comme module est invisible, il se peut, (et ça c'est à m'arrive très souvent), d'oublier d'affecter à mon module soit une position, soit une condition d'affectation. Dans ce cas le module n'est pas activé. Et comme ce module est invisible, vous ne pouvez pas savoir s'il est actif ou non. En cochant cette case, vous visualisez le fait que le moodule est bien pris en compte. Une fois vu, il ne vous reste plus qu'un décocher cette case.
 
Add a comment
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Encore une fois, je ne vais pas vous pouvoir vous montrer d'exemple puisque je n'utilise pas sur mon site l'ensemble Joomla Content, au profit de K2.

Mais dans mon cadre professionnel où je privilmégie les choses simples, donc natives, je ne fais que du Joomla content.

C'est la raison pour laquelle j'ai écrit ce petit module qui vous permet de lister les articles d'un site Joomla, classé par ordre alphabétique, mais surtout avec une rupture sur la première lettre du titre de article. Pour ceux qui l'ignoreraient, une rupture et le moment où, dans une liste issue généralement d'une base de données, une et une seule information d'un enregistrement change.

Dans notre cas, le changement, c'est-à-dire la rupture, se fait sur la première lettre du titre de l'article. En d'autres termes, vous allez avoir classé, avec une organisation par première lettre, l'ensemble de tous vos articles Joomla content, avec en en-tête pour chacun des groupes affichés, la première lettre ou plutôt le premier caractère du titre de l'article (le titre de l'article pouvant commencé par un chiffre, un caractères UTF-8 type icones,.... ou autre. Le module recherchant toutes ces informations automatiquement, si la première lettre de l'alphabet commence par un caractère comme une double cote, vous allez avoir dans votre liste, un groupe d'articles dont en tête sera une double cote. Bien que fonctionnel, ce module nécessite toutefois une bonne manipulation des données et notamment des titres des articles pour que le rendu soit logique et cohérent.

Encore une fois, l'excellentissime site internet sur lequel vous vous trouvez n'étant pas basé sur du Joomla content mais du K2, je ne peux que vous mettre des copies d'écran car je n'ai aucune donnée permettant d'afficher un exemple.
 
premierelettres
Add a comment
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

Aujourd'hui je vous présente un outil que j'ai développé pour notre CMS favoris Joomla qui vous permet, grâce au navigateur web chrome uniquement, de transformer chacun de vos articles Joomla Content en un fichier PDF ! Je pensais que c'étati impossible, alors je l'ai fait !

Alors je sais, existe des outils gratuits (je reste toujours dans l'univers du gratuit car je n'ai aucun budget à mon boulot pou acheter quoi que ce soit, et ca reviens beaucoup moins cher de passer quelque semaines à rechercher et à coder)  qui vous permettent de faire ce genre de choses comme PhocaPDF. Il existe des composants pour faire ceci mais je ne veux pas que cela reste un composant utilisable manuellement, pour chacun des articles, je veux véritablement sortir tous les articles de mon site Joomla (Content) en un fichier PDF. Il y a intérêt, dans mon cadre professionne, de pouvoir fournir un et un seul fichier qui va contenir l'ensemble de mon Joomla. En effet, tout le monde n'a pas forcément et à chance d'avoir un accès web lorsque les personnes ne sont plus au bureau. Elles ont certes un ordinateur mais pas forcément d'accès au réseau. Et je parle même pas de la sécurisation des données si jamais on passe par Internet !

CHROME

Alors j'entends déjà ici les mauvaises langues dire, à juste titre, "oui ton outil n'est pas compatible avec les normes du web, il se retrouve associé à 1 et 1 seul navigateur Web : Chrom". Oui je sais. Je plussois. Et alors ? Quand on se penche sur ce genre de concept, on accepte aussi de tirer les outils par les cheveux pour pouvoir aboutir à ses fins, lorsque ces dernières sont assez complexes. Mais je suis d'accord avec vous.
Une deuxième remarque, c'est aussi la justification de l'utilisation de l'outil navigateur web de Google Chrome. Pourquoi utiliser ce navigateur en particulier ?  Ce site est-il en partenariat avec le plus gros moteur de recherche du moment ?
 
Hélas non, je ne suis en partenariat avec personne ici. Le choix de Chrome se justifie simplement car il possède un mode CLI assez intéressant que je n'ai pas retrouvé sur les autres navigateurs. Je souligne au passage que tout ce que j'ai fait jusqu'à présent, je l'ai fabriqué sur une plate-forme Windows sans avoir détesté sur les autres systèmes d'exploitation. D'ailleurs retrouvez toutes les commandes chrome sur le site de Perter BEVERLOO.
En effet, parmi les paramètres du mode commande de Google Chrome, il existe des paramètres qui vous permettent de pouvoir afficher une page web dans un fichier PDF, sans afficher le contenu, le tout en ligne de commande, ce qui nous permet de fabriquer des scripts de modification et de génération de fichier PDF, au travers d'un fichier de commande .bat.
 

La commande .bat générique 

La commande de base, commentée par les infobulles, est la suivante  :
  
chrome.exe --headless --disable-gpu --print-to-pdf=c:\Users\seb\temp\fichier.pdf
 
Je pense que pour les plus pertinents d'entre vous, vous aurez désormais compris ce que je comptais faire. Plus précisément dans Joomla content, je liste l'ensemble des articles qui sont présents dans la base de données, et grâce à Chrome, je lui demande de les afficher, mais dans une méthode très particulière car il ne les affiche pas à l'écran, mais il utilise un paramètre qui permet de fabriquer un affichage particulier dans un fichier PDF.
L'intérêt de cet outil est de pouvoir utiliser l'outil navigateur web, avec toutes les propriétés qui lui sont conférées, notamment en terme de marges, d'en-têtes et de pieds de page, et tutti quanti. Notez que lorsque vous utilisez cette méthode, la première des choses à faire et d'aller dans Chrome lui-même pour lui paramétrer vos préférences en termes d'en-tête et de pied de page. Peut-être ne voulez-vous pas qu'ils s'affichent. Je n'ai pas regardé en détail mais peut etre existe-t-il aussi des options pour paramétrer en mmode CLI des entêtes, pieds de pages, marges ...
 

JOOMLA 

 
Au niveau de Joomla, j'ai donc fabriqué un petit module qui permet de lister l'ensemble des articles de votre site Joomla, articles générés dans Joomla content uniquement.. A adaprer si vous utilisez K2. Mon outil ne prend pas en compte les autres systèmes de gestion de contenu comme k2 ou d'autres que j'ignore, je reste fidèle pour des raisons de simplicité à mon Joomla "de base" et son Joomla content. Une fois le module installé, voici comment il fonctionne.
 

Fonctionnement

 Le principe est on ne peut plus simple. J'ai lancé, après avoir défini un set_time_limit à 0 afin de ne pas être embêté par le timeout du serveur (local, je précise), une simple requête Joomla me liste l'ensemble des articles dont l'état est égal à 1, en d'autres termes l'ensemble des articles qui sont publiés. Une fois ma requête écrite et lancée, je récupère tous ces articles dans un objet que je parcours. Lorsque je parcours à cet objets, je définis une URL dans laquelle je passe le numéro de l'article en paramètre, via une concaténation, et cet URL je vais la passer dans une chaîne de caractère représentant la ligne de commande de chrome à lancer. Cette ligne, pour des raisons pratiques, je l'affiche à l'utilisateur. Il peut alors ainsi faire un copier-coller uniquement de l'article qui intéresse à transformer dans un fichier PDF. Toutefois, car l'objet est bien un outil de scriptage, je génère un fichier texte, plus particulièrement un fichier texte avec une extension bat, afin de pouvoir créer un fichier bat à lancer sur ma ligne de commande Windows. Ce fichier, comme par hasard, je le nomme script.bat.
Une fois l'ensemble du fichier BAT écrit sur ma machine, ce fichier est remplacé dans le répertoire du module du module, il ne me reste plus qu'à récupérer ce fichier afin de lancer sur la ligne de commande.
 

CONFIGURATION DU MODULE 

 Lorsque vous aurez installé ce module sur votre machine, vous devrez absolument faire une configuration essentielle afin d'adapter mon outil à votre machine locale.
Nous sommes bien d'accord que cet outil travaille sur un serveur pour générer votre script, mais ce dernier doit absolument être lancé sur votre machine en local qui contient le logiciel de Google Chrome. (j'avais prévenu que c'étatit mamaille and co)  Et la configuration de cet outil consiste, dans la configuration Joomla du module, de spécifier dans les paramètres deux informations :
  • dans un premier temps vous allez spécifier le chemin dans lequel votre Fichier de script généré doit être enregistré,
  • dans un deuxième temps vous spécifierez, et cela est essentiel, le chemin d'accès à votre logiciel chrome.

Je n'ai fait des tests que sous Windows, peut-être faudrait-il faire des recherches pour les autres systèmes d'exploitation en terme de chemin d'accès à Chrome. Une fois ces informations configurées, vous n'aurez plus qu'à créer un module dans un article accessible uniquement aux administrateurs par exemple, et une fois ce module positionné sur votre article, vous devrez simplement lancer l'article sur lequel votre mois de déposé. Vous obtiendrez ainsi un script généré sur votre machine, avec le chemin d'accès Chrome que vous avez spécifié dans la console d' administration de l'outil, mais aussi vous aurez sous vos yeux le script qui a été généré.

Faites toutefois attention si vous avez des dizaines de millions d'articles sur votre Joomla, au time out. Dans le cas où le Time Out est trop court, j'ai préconfiguré 4 du fichier helper.php un time out à 0. Ce n'est pas très propre, mais dans la mesure où mon outil ne travaille que sur un serveur local, je n'ai que faire des considérations purement web.

En conclusion, même si cet outil est particulièrement bancal dans la mesure où il ne fonctionne qu'avec un type de navigateur, que le Time Out c'est pas top, que (il faut bien le dire) rien n'est très très propre, et surtout que je suis très conscient des limites de l'outil, je ne m'attends à aucune remarque de la part de mes chers lecteurs que j'adore. Juste partager une trouvaille.
Comme vous le savez ici j'ai ma mamailler et bidouiller un peu tous les codes afin de tirer les extrêmes de chacun des outils que je regarde, et je reste toutefois à l'écoute de vous aider et vos besoins, même si mon cahier commence à se remplir de prochains projets...
Add a comment
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives

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.

 

Add a comment

Mon GitHub

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