Joomla QR

Joomla QR (9)

Vous vous posez des questions pratiques sur Joomla ? je vous apporte des réponses pratiques, quelque soit le "niveau" joomla (coding, utilisation...) selon mes compétences bien entendu

Une question posée aujourd'hui sur un forum anglo-saxon, d'une personne qui demande comment déclarer et utiliser une fonction dans un module Joomla.

Dans la mesure où la fonction est directement liée à l' instanciation d'un objet, la question est loin d'être inintéressante.

La réponse est pourtant relativement simple, il suffit dans la classe de déclarer une fonction publique. Une fois cette fonction déclarée, vous pouvez au sein de cette classe, utilisé dans votre instance.

Au lieu de faire de grands discours voici le code que j'ai écris et qui fonctionne à merveille
 
class MaClasss{
  puclic static function mafonction($id){
     return $id;
   }
 
public static function getHello($params)
   {
     return mafonction("123456");
   }
}

Vous voyez surement dans le coin bas gauche de ce site, un "copyright", même si pour mon petit site personnel, il n'y a pas de véritable droit d'auteur/copyright puisque vous pouvez quasiment tout repomper. Mais comment fait on pour changer ce copyright dans Joomla ? Je vous propose donc une manipulation pour le faire.

Capture décran 2022 04 13 à 20.00.04

Vous allez devoir éditer un fichier sur le serveur. Pour ce faire, je ne peux que vous conseiller l'excellentissime Phoca Commander, d'un super développeur tchèque. Ainsi, naviguez jusque dans le répertoire de module et éditez le fichier suivant suivant : [dossier joomla]/modules/mod_footer/mod_footer.php

Vous trouverez alors un code de ce type :

if (is_int(StringHelper::strpos(JText :: _('MOD_FOOTER_LINE1'), '%date%'))){
$line1 = str_replace('%date%', $cur_year, JText :: _('MOD_FOOTER_LINE1'));
}
else
{
$line1 = JText :: _('MOD_FOOTER_LINE1');
}

if (is_int(StringHelper::strpos($line1, '%sitename%')))
{
$lineone = str_replace('%sitename%', $csite_name, $line1);
}
else
{
$lineone = $line1;
}

Comme  vous l'aurez compris, il s'agit de constantes (MOD_FOOTER_LINE1) puisque ces constantes sont en majuscules. Mais où sont ette stockées ces constantes ? et bien dans le fichier de langue situé à cet endroit (pour les sites en français) : [dossier joomla]/language/fr-FR/fr-FR.mod_footer.ini

 

ET oui c'est (presque) possible de déclarer des variables Super globales dans Joomla... en détournant l'utilisation de l'excellent Re Rempalcer de Regular Lab.

Qu'est ce que j'appelle une variable super globale ?

La dénomination n'est peut être pas la plus  judicieuse mais je ne vois pas comment appeler ceci autrement. Alors j'explique ce que je cherchais à faire. Dans le cadre de mes fonctions, je travaille à un endroit qui change réguklièrement de nom, mais la structure est la même. Aussi, lorsque je publie des informations au nom de mon organisme, il se peut que plusieurs années plus tard, je sois obligé de reprendre tous les articles juste pour changer le nom où l'acronyme. Pas glop..

Comment je fais ?

Nous allons partir du fait que le nom de l'organisme est Structure des EXpériences Exceptionnelles. Toutefois, quelques années plus tard, la structure prend le nom de COncertations Urbaines InterprofessionneLLES. Alors comment changer tout ca en un clic ? Enfin presque. La réponse réponse, dans Joomla, en l'utilisation de l'exceptionnelle outil de Regular Lab : Re Remplacer. Comment faire pour tout rempalcer d'un cous ?

En fait, il suffit de déclarer danqs ReReplacer une "variable" (en fait ce n'est pas du tout une variable mais une simple de chaine de caractères) affûblée de caractères spéciaux afin qu'elle soit vraiment totalement indépendante du texte. Dans mon cas, j'utiliser une chaines de caractères avec des triples crochets : [[[MA-CHAINE]]] . Les crocher faisant partie intégrante du nom de la "variables". Il peut y avoir d'autres notations possibles, à  vous de trouver le codage qui deviendra votre "variables. Aller pour le fun, je vous souffle quelques exemple : $$mavariable$$, [[monautrevariable]], {{maTroisiemeVariable}}.

Ce que je définis dans Re Replacer ?

Comme le montre la copie d'écran ci-dssous, je définis une chaine de remplacement par une autre.

re remplacerSi je reprends les exemple définis ci dessus, je définis :

  1. Ce que je recherche
  • $$mavariable$$,
  • [[monautrevariable]],
  • {{maTroisiemeVariable}}
  1.  Par quoi je remplace :
  • toto
  • titit
  • tutu

Et voila, la définition de simili constante est gérées par Re replacer.

 

 

Je ne sais pas si vous avez déjà été confrontés à cette problématique mais Joomla, et sa template Protostar par défaut, m'ont posé un sacré problème que je n'ai jamais réussi à comprendre : les hyperliens du fil d'Ariane me retournaient des pages totalement inconnues, y compris par moi-même, administrateur du site. Je ne remets pas du tout en cause Joomla mais juste une ignoorance que je n'arrive pas à analyser !

Je suppose que j'ai dû zappé une configuration quelconque mais comme cette problématique à été découverte à la fin de emon projet, et que (dans mon cas) je ne vois pas d'utilité de mettre des liens hypertexte sur mes fils d'ariane, qui eux-mêmes ne retournent pas des bonnes réponses, j'ai cherché pour simplement supprimer les liens hypertextes.

Dans un premier temps, il faut faire un héritage du module mod_breadcrumb, soit par la console d'administration, soit en copiant le répertoire [joomla]/modules/mob_bredcrumbs vers le dossier [joomla]\templates\[votre_template]\html\mod_breadcrumbs. (je l'avoue, je ne connaissais pas l'héritage à l'époque et ai directement fait les modif dans le premier dossier cité. L'erreur, c'est qu'aux mises à jour à venir, mes modification seront écrasées. Mais comme je bosse sur un intranet non connecté, les mise à jours seront ... peut être un jour faites mais pas sûr)

Dans le dossier copié dans celui de la template, éditer le fichier tmpl/default.php, vous y retrouverez le code de la sorte (attention, j'ai déjà opéré des modifications, y'aura peut être des petites différences) vers la ligne 50 :

<?php if (!empty($item->link)) : ?>
<a itemprop="item" href="/<?php echo $item->link; ?>" class="pathway"><span itemprop="name">
<?php echo $item->name; ?></span></a>
<?php else : ?>
<span itemprop="name">
	<?php echo $item->name; ?>
</span>
<?php endif; ?>

Sur la ligne que je vous ai surligné en jaune, vous avez la création du lien a href. Il suffit de supprimer les éléments surlignés afin de ne plus avoir les hyperliens. Enregistrez et c'est fait

 

Je souhaitais vous faire partager ici une problématique que j'ai rencontré cette semaine, et pour laquelle j'ai passé pas loin de 2h pour trouver la solution.
En effet, si vous développez des modules pour Joomla, vous pouvez être tenté d'écrire nom des classes en CamelCase, c'est-à-dire en commençant le nom de la classe par une minuscule, puis en démarrant chacun des mots accolés les uns au autres par une majuscule.
Lors de mon développement de mon projet de module sur mon environnement Windows, je n'ai en aucun cas de problème sur le nom de ses classes écrites de cette manière. En revanche, lorsque j'ai migré sur un environnement d'exploitation (la prod) sous Linux, je me suis heurté à des noms d'objets introuvables par Joomla. En effet, le nom de ma classe était inscrite en CamelCase !
Afin que vous ne perdiez pas votre temps à chercher pourquoi vous n'arrivez pas c'est vous qui a écrit ainsi, je ne peux que vous recommander de tout écrire en minuscules (lowercase). Lorsque j'ai compris le problème, mon module à refonctionné

Dans cet article, nous allons voir comment  il est possible de supprimer un composant, un module déjà installé dans votre environnement Joomla. 

C'est au bout de plusieurs mois d'utilisation de l'outil que j'ai eu à effectuer cette manipulation, et j'ai cherché un peu partout sans trouver de réponse en français. D'où publication de ce nouvel article.

Pour effectuer cette manipulation il suffit de vous rendre sur votre serveur, dans le répertoire de votre module  que vous venez de développer. Vous allez alors supprimer le répertoire concernant le/les composants/module/plugin que vous venez d'installer ou de créer.  A cet instant, votre complément est supprimé de votre Joomla Et n'apparaîtra plus dans la liste de vos compléments.

Toutefois cette manipulation n'est pas très propre. En effet, tout comme il existe de base de registre dans Windows, le système de management de contenu possède dans sa base de données interne, l'ensemble des composants et sait ceux  qui ont été installés.

La manipulation que nous venons de faire supprime bien l'accès à la fonctionnalité de nous souhaitons, sans pour autant rendre propre votre Joomla.  Pour donner un coup de balai définitif, vous devez désormais  vous rendre dans la base de données au travers de phpMyAdmin par exemple,  et dans cet outil, effectuer une recherche de la ou des table(s) qui correspondent au composant que vous avez installé. Il est difficile dans cet article de vous donner leur nom, à vous de rechercher à partir de script d'installation sql du module que vous avez installé.

La dernière opération à mener maintenant que vous avez localisé la/les table(s) à supprimer, et de sélectionner l'ensemble des éléments dont vous souhaitez vous séparer, et de procéder alors suppression définitive par un clic que le bouton de supression de PHPMyAdmin. 

Et voila, c'est fait

Cette semaine, j'ai dû travailler sur le développement d'un projet de module et j'ai du me pencher sur les données de ma base, ou plutôt la structure. Sans MCD ni dictionnaire de données, j'ai réussi à monter mes requêtes par rétro-analyse de la base. Toutefois, un champs m'a interloqué et j'ai eu du mal à comprendre son rôle, il s'agit du champs fulltext de la table #_content

Je ne comprenais pas son rôle, et pour cause, je ne m'en servais pas. Après interrogation auprès de personnes plus expérimentées que moi sur Joomla, j'ai eu la réponse à laquelle je n'avais pas pensé puisque je ne me sers pas de cette fonctionnalité.

En effet, dans un article Joomla, il est possible d'utiliser une fonctionnalité readmore, ou en français Lire la suite. L'idée est de présenter un début d'article, mais pas tout l'article complet. Pour accèder à l'entièreté de l'article, il faut cliquer sur ce dit lien.

Si nous "transposons" cette fonctionnalité en réflexion "Base de données", Joomla utilise deux champs dans sa base de données :

  • Le champs Introtext
  • Le champs fulltext

Jomla affiche le début de l'article, (ou l'introduction de l'article), c'est à dire le contenu du champ Introtext. En cliquant sur Lire la suite, on charge le contenu de fulltext.

Attention toutefois, lorsque le texte est mis dans l'aarticle, le texte est entièrement stocké dans le champ Introtext. En revanche, si le texte de l'article est spécifié avec un lien ou bouton "Lire la suite", le texte AVANT "lire la suite estr dans introtext et le reste est stocké dans le champs fulltext.

L'idée est de créer un élément d'un menu qui affiche tous les articles d'une catégorie, mais aussi ses sous éléments de cette "sous-catégorie". Pour afficher ces éléments, il faut appliquer sur le menu, une restriction particulière. En effet, au moment de la création du menu, il faut choisir un menu de type "blog de catégorie".

blog de actegorie

Ensuite, sélectionner la catégorie sur laquelle appliquer ce menu

Une fois cette sélection effectuée, il faut appliquer les options dans l'onglet catégorie

blog de actegorie2

Le contenu des articles est affiché, (je n'ai pas trouvé comment le masquer) mais un ptit coup de CSS là dessus permet de masquer le contenu de l'article

Vous venez d'installer l'outil de sauvegarde Akeeba backup et vous êtes très fier d'avoir lancé et exécuté votre première sauvegarde avec cet outil. Cependant, vous vous posez la question : mais où est donc sauvegarder mon fichier de sauvegarde ?

Comme dans la majorité des cas, vous ne faites pas forcément attention à la configuration de cet outil (je dis ça mais je suis exactement pareil), vous ne mémorisez pas l'endroit où le fichier de sauvegarde est stocké. Toutefois, lorsque vous lancez la configuration d'Akeeba Backup dans votre administration, vous remarquerez que vous avez cette configuration, laissée par défaut lors de la pré configuration de votre profil de sauvegarde.
1. Rendez-vous dans le menu composants Akeeba backup,
akeeba1
 
2. Sélectionnez l'icône configuration, dans le deuxième cadre dénommé Basic configuration,
akeeba2
3. Vous trouverez sur la première ligne output Directory. Répertoire de destination de votre sauvegarde :
akeeba3

Intro Joomla QR

 

JoomlaQRVous avez des questions Joomla ? - J'ai vos réponses pratiques dans Joomla QR... mais n'hésitez pas à me soumettre vos questions sur Joomla.