Notes diverses pour configuration ou codages Joomla

Je vous propose aujourd'hui un petit réglage sur le composant de recherche en AJAX, RokAjaxSearch de RocketTheme.

Cet outil ayant la particularité d'être gratuit, nous utilisons dans notre cadre professionnel. Cependant, je me suis heurté à une problématique relativement simple, je souhaitais que certains résultats apparaissent dans les résultats de recherche de cet outil, alors que d'autres restent masqués. Et lorsque je parle de résultats, je parle bien d'articles Joomla Content.

Propriétés de l'outil

 En lisant la documentation de cet outil (oui oui vous avez bien lu, je lis la doc !), j'ai vu que nous pouvons rejeter certains articles dans les résultats de recherche, en spécifiant dans les article le mode de rejet au moyen de <span id="UnId"> . Pour cela, j'ai simplement spécifier dans chacun de mes articles un span avec un id, qui va refouler le résultat dans sa zone de recherche. En effet, si je définis un ID "masque-fiche", avec le nom de la catégorie dans le span, et que je spécifie dans la configuration de cet outil de rejeter le contenu sur les noms de catégorie, en d'autres termes rejeter le contenu sur les ID "masque-fiche", les résultats n'apparaîtront plus.
 
Pour aller encore plus loin, j'ai même écrit un minuscule qui va fabriquer l'ensemble du span spécifique, simplement au moyen d'un shortcode. Cet outil est facultatif car vous n'avez qu'un span à écrire, dans la mesure où ce dernier doit contenir une chaîne de caractère rejeté. J'ai tenté de faire la même chose avec Re-remplacer car je pensais trouver un champs de Joomla Content (les fields que l'ont retrouve dans JCE par exemple) "catégorie" mais je nl'ai aps trouvé...
Dans mon cas, je souhaite rejeter les résultats sur les catégories des articles. J'ai donc écrit un petit plugin qui va rechercher pour un article spécifique, le nom de la catégorie à l'accueil est rattaché point de ce fait, sur l'ensemble du site, chaque article va contenir au minimum une catégorie, say I accueil mon article est associer. De ce fait, toutes les catégories vont apparaître dans mes spams. Ainsi, dans l'outil de recherche rok, nous ne retrouverons plus jamais une ou l'autre catégorie. Le plugin va jouer le rôle de remplacement

Le Plugin

 
Add a comment
Attention à la casse

Une petite note qui tombe sous le sens mais je voulais quand même revenir dessus pour avoir passé plusieurs heures à trouver le problème.

Dans le cadre de mes activités, je développe à la maison mes modules sous Joomla sous Fenêtre 10  afin de les réimplanter dans mon activité professionnelle sur mon serveur de travail ainsi que mon serveur de développement professionnel Debian. Je me suis heurté à une toute petite problématique que je souhaitais ici mettre en avant. Bien que je sache d'où cela vient, j'ai quand même passé plusieurs heures à comprendre...

Mon environnement de développement personnel se compose d'une machine sous le système d'exploitation Windows.
Mon système professionnel se compose lui aussi d'une machine mais qui tourne bien entendu sous Linux (oui j'ai dit "professionnel" :- ) pour faire tourner le serveur Apache et tout ce qui va bien. On a même une petite base de données sous MySQL, SGBD au combien peu fiable par rapport à certains ténors du marché. Je pense notamment à Oracle.
Vous l'aurez compris, entre un environnement Windows et un environnement Linux, il y a grosse différence se situe dans les noms. Sous Windows, bien malheureusement, ce système d'exploitation ne sait pas faire la différence entre une majuscule et une minuscule dans les noms de fichiers, bien que ce soit deux codes ASCII totalement différent !
 
Me voyez-vous venir ?
 
Et bien oui. Chez moi, sous Windows, j'avais créé le nom du répertoire contenant mon module avec une majuscule. Dans les fichiers qui composent ce module, notamment dans le fichier XML, je n'avais pas mis en majuscule. Sous Windows, dans mon environnement de développement, aucun problème le module était reconnu lors du mode découverte de Joomla. En revanche, sous Windows, impossible de découvrir le module. C'est en vérifiant dans le fichier XML, dans le fichier manifest, que je me suis rendu compte de ma gourde.
Effectivement il se posait un problème de différenciation entre un non minuscule et majuscule. Autant dire que j'ai cherché plusieurs minutes avant de comprendre d'où venait le problème, mais en corrigeant ceci, tout est revenu dans l'ordre.
 
Faites attention la casse de vos fichiers !
Add a comment

Le besoin

Je ne sais pas pour vous mais lorsque le programme la publication de mes articles depuis la console de Joomla, j'ai bien la liste de mes articles, leurs dans de création mais dans cette liste me manquait la date réelle de publication de l'article. Cette date est bien pratique car en un coup d'oeil, on voit l'ensemble synthétique des dates, comme mentionnée sur la copie d'écran suivante. Notez que je me ficeh royalement de faire un tri sur cette date, la colonne n'est pas triable, mais elle pourrait le devenir

firefox ozh33Lweq5

La solution

Pour parvenir à cette solution, j'ai commencé par dériver/hériter le fichier administrator/com_content/articles/default.php en le copiant (a la main ou par le processus intégré de Joomla) dans le dossier administrator/templates/isis/html/com_content/articles/default.php

Ensuite, après édition de ce fichier, j'ai vu que cetet vue était basée sur un tableau HTML. J'ai donc commencé par rajouter une cellule titre  (je ne m'embarasse pas des chaines de langues puisque je suis dans un fichier dérivé) mais je n'ai pas intégré la fonction de tri de cette colonne. Ainsi, après la ligne 125, j'ai rajouté le titre de la colonne en dur :

<th width="1%" class="nowrap center hidden-phone">
   Date de publication
</th>

Puis dans le "contenu" du tableau, ligne 324 chez moi, j'ai rajouté le champs affichant la valeur que je souhaite faire afficher :

<td> 
   <?php echo $item->publish_up; ?> 
</td>
Add a comment

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.

Ne reproduisez donc pas l'erreur que j'ai faite, lorsque vous développez en local votre module, n'oubliez pas de bien renseigner le fichier manifest avec l'ensemble des fichiers qui constitue votre module.
 
Je viens donc de découvrir que le fichier manifest, en quelque sorte, sert pour l'installation sur un serveur externe de mon module. Je souligne bien le fait que j'installe tous mes modules en mode développeur, m'abstenant ainsi de développer les procédures d'installation, par simple manque de temps
Add a comment
Je ne sais pas pour vous, mais j'utilise dans mes articles Joomla, pas mal de divers composant et donc toutes sortes de shortcode dans tous les sens, avec, pour prime, pas mal de spécifications souvent graphiques.
Or, je me suis rendu compte, une configuration wiziwig  de l'outil Joomla JCE, cet outil a la brillante idée, dans sa configuration de base, de formater ou nettoyer le code que je génère lors des switch mode code/mode WYSIWYG. Lorsque je parle de nettoyage, c'est bien lorsque je saisis le code dans l'outil, que je retourne en WYSIWYG et que je reviens en mode saisie de code
Ce nettoyage m'a donc posé de gros problèmes, car notamment l'autoformatage par défaut ne me convenait pas du tout.

Ma question ?

Comment faire en sorte que l'outil wisiwig JCE ne m'auto formate pas mon code ?

La solution que j'ai trouvé

Cette solution, je l'ai trouvé en fouillant très longuement des réponses dans Google. J'ai cherché longuement car la dénomination de cette option dans la configuration de Joomla n'est pas très claire à mon avis d'où la publication de cette note.
En effet, il faut se rendre dans le menu composant -> JCE Editor -> Editor profile-> Editor parameters-> dans l'onglet de gauche "Cleanup and Output" -> Validate HTML.
firefox 0QJ9STAmTr
Puis, dans la liste déroulante, choisir NON. JCE ne lance ainsi plus son autocorrection de code
Add a comment

Pour certaines données d'un module, il peut être nécessaire de savoir si l'utilisateur courant est administrateur ou non.

Pour cela, inutile de tester l'appartenance au groupe admin de l'utilisateur, la factury user donne la réponse !

$user = JFactory::getUser();
if ($user->guest == 0)
{
   echo "Vous êtes administrateur";
}
else
{
   echo "Vous êtes simple utilisateur";
}
Add a comment

Dans le cadre de mes fonctions, je suis amené à utiliser un champ personnalisé de joomla content pour y stocker une valeur sous la forme très particulière, puisque c'est une chaîne de caractère formé de chiffres groués. Chacun de ces nombre sont répartis en groupe de la manière suivante : xxxx-xx-xxx-xxxx (un peu comme les SLRN des fans de SM).

Afin de pouvoir "valider" en quelque sorte, la bonne saisie du formalisme de ce champ, j'ai dû appliquer un masque de saisie sur un champ personnalisé de type input text. Vous le savez sûrement, même HTML5 ne propose pas ce type de champ masque de saisie. Il faut appliquer un script Javascript, utiliser par exemple avec la bibliothèque jQuery, pour forcer le formalisme de saisie de ce champ dans un input type texte classique.

Bibliothèque utilisée

Après quelques recherches sur le net, j'ai trouvé une bibliothèque qui répond à ce besoin, en Javascript, que vous pouvez retrouver à l'adresse http://imask.js.org. Vous remarquerez d'ailleurs sur la page d'accueil de cette bibliothèque, tout un ensemble de codes et d'exemples répondant à différents types de besoins, que ce soit de la saisie de date, de la saisie de nombres entre deux bornes, ou encore permettre en Javascript de vérifier qu'une chaîne de caractère correspond bien à une expression régulière spécifique. (désolé mais l'auteur ne parle pas de SLRN :)  C'est la raison pour laquelle je suis parti sur cette librairie, l'utilisation des expressions rationnelles étant très répandue. D'ailleurs, c'est de cette manière que j'ai implémenté mon masque de saisie.

Intégration du masque de saisie dans la console d'administration sur un champ personnalisé.

Copie du fichier de gestion de masque

Nous en arrivons ici au cœur du problème : comment implémenter un masque de saisie sur un champ personnalisé ?

J'avais plusieurs moyens de faire, rien d'entre eux était de recréer un type de chant au format maskedit. Ceci eût été très intéressant, mais peut-être relativement long à mettre en place. Cela nécessitait pas mal de développement sur des techno que je ne maîtrise pas (encore :) ).

Afin de mettre en place cette fonctionnalité, nous avons, car mon cher cousin m'a donné un petit coup de main, mis en place dans un premier temps toute la bibliothèque JS, dans le dossier de ma template d'administration. J'ai alord copié mon fichier imask.js dans le répertoire administrator/templates/isis/js de manière à ce que ce fichier JavaScript soit bien rangé au bon endroit. Je ne l'ai pas rappelé, mais l'acronyme JS que l'on vois dans le chemin d'accès signifie bien JavaScript.

Implémentation et appel de ce fichier dans ma template

Maintenant que ce fichier est prêt à être utilisé dans Joomla, il faut lui dire de l'appeler. Pour ce faire, nous allons intégrer et appeller ce fichier directement dans notre modèle aussi appelé template Joomla. Cette intégration doit se passer en deux parties :

  1. Dans joomla, nous avons fait un appel à ce fichier JavaScript de manière à ce que ce fichier soit chargé lorsque la page est appelée
  2. Puis nous allons dire à jumia de charger le code propre à ce plugin de masque au moment du chargement de la page.

En effet, c'est dans ce code javascript que nous avons spécifié le format du masque. Nous allons détailler ces deux points

Appel au fichier, Javascript

Dans la section html du fichier de ma template ISIS, j'ai intégré l'accès, le chargement au "moteur" de gestion des masque de cette manière (oui je sais, on aurait pu l'intégrer autrement avec les API Joomla) :

integrationJS

Notez que j'utilise bien l'option defer de la balise script pour que ce chargement s'éxécute non pas au moment où le navigateur rencontre cette ligne de script, mais bien lorsque la page est entièrement chargée. (exit donc les technnologies JQuery and co qui étaient spécifiques à ce chargement, c'est intégré désormais dans javascript Vanillia). Désormais que nous avons l'appel à cette bibliothèque de gestion des masques, il faut dire au système à quel champs html appliquer ce masque.

Après avoir créé mon champs personnalisé Joomla, j'ai donc simulé la création d'en enregistrement dans l'adminsitrator de manière à avoir sous les yeux mon champ.

firefox mQolE0RUAX

En inspectant le code source, j'ai retrouvé ses deux indentifiants : son nom et son id. L'exemple de maskedit proposant de travailler avec l'ID du champs, j'ai appliqué le script via la commande Javascript getElementById pour associer le formalisme du masque au champs souhaité.

Et voila, le masque est appliqué au champs. Parmi ma "mamaille", j'ai retroengeeneeré le code pour retrouver l'ID du champs de saisie. Peut être y-a-t-il dans les règles de l'art Joomla des méthodes de faire, des logiques de nommages qui m'écchappent, je n'en doute pas, mais le système fonctionnne.

Add a comment

Si vous utilisez un Joomla sur un serveur Web portable de type Uwamp, lorsque vous déplacez le serveur d'une machine à une autre, afin de pouvoir continuer à installer des composants, il ne faut pas oublier de corriger sur la ligne 61 du fichier configuration.php situé dans le dossier Joomla, la valeur de la variable $tmp_path sans quoi les installations des modules ou composants que vous alliez télécharger sur la GED notamment seront ininstallables puisque Joomla recherchera le répertoire par son chemin absolu qui, s'il n'est pas placé a même endroit, sera introuvable.

Add a comment

Si comme moi vous préférez avoir un éditeur "texte" non wysiwyg lors de l'édition de vos articles (ce qui est drôlement + simple lorsque vous avez des articles mélant des composants complexes comme des tabs, des fenêtre modales et autre joyeusetés...), il faut le spécifier à Joomla de la manièré suivante : 

  1. Aller dans le menu de vote console d'administration : composant → JCE Editor → Editor Profils → et choisir défault
    AVGBrowser jjljCblbGT
  2. Sélectionnez vort profil par défaut si vous souhaitez que ce mode soit toujours celui par défaut
  3. Dans le deuxieme onglet Barre d'outils (ou Features & layout) et rechercher Onglet Actif (ou Active tab)
  4. Sélectionnez "Editeur de code" (Code) dans la liste
    Editeur de  code
  5. Validez vorte choix en cliquant sur Valider et fermer
Add a comment

Pour accèder à un article Joomla content, il faut utiliser une URL codé de la sorte :

index.php?option=com_content&view=article&id=id_article

La composition de l'URL est donc :

  • index.php : le fichier "pivot" de tout site (le contrôleur en quelque sorte)
  • option : nom du composant vers lequel Joomla "redirige" (ou plutot nom du composant que Joomla va charger. Ici : Joomla content, donc com_content)
  • id_article : le numéro de l'article

S'il existe plusieurs templates, ou que des soucis d'assignations de modules subsistent, il est possible d'ajouter l'itemid du menu à l'URL

index.php?option=com_content&view=article&id=id_article&Itemid=item_id_du_menu

Add a comment

Mon Github

slhuilli1's GitHub repositories