Aujourd'hui, je vous propose un tout petit plugin qui vous permet, au pied de votre article, d'afficher un ensemble de notes que vous avez défini au cœur de votre article. J'entends par note, ce que les traitements de texte appellent une note de bas de page.
Le besoin métier
Commençons par analyser comment fonctionne une note de bas de page dans un traitement de texte comme xxx office. Lorsque vous avez saisi un mot auquel vous souhaitez attacher une note de bas de page, vous sélectionnez ce mot, et vous affecter une note par le menu idoine du logiciel. Les numérotations des notes sont automatiques Dans notre cas, nous allons reproduire donc un fonctionnement similaire à ce type de système, à la seule différence que nous n'allons pas monter une note à la souris (comme sur un traitement de texte en sélectionnant un groupe de mots ou un mot et en y attachant une note de bas de page), mais au travers d'un short code.
Le fonctionnement
Durant la saisie de votre code dans le format html de votre article, vous allez donc avoir besoin à un moment donné de spécifier une note de bas de page. J'ai choisi la notation suivante :
{def "mot à définir"}Noter ici le libellé de votre mot à définir{/def}Le paramètre du plugin
Comme vous pouvez le voir dans le code précédent, la commande du shortcode utilisée pour définir un mot, c'est la commande def, à laquelle vous passez en paramètre entre double cotes le mot à définir. L'utilisation de double cotes est primordiale, cela permet au plugin de pouvoir prendre en compte une succession de mots séparés par des caractères "espace" comme dans l'exemple ci-dessus.
Le rôle du plugin
Ce plugin va comptabiliser le nombre de mots définis dans l'article, et pour chacun d'entre eux, affecter automatiquement un numéro de renvoi. Ainsi, au cœur de l'article, avec mes paramètres CSS par défaut que vous pouvez bien entendu modifier, vous aurez un numéro à côté du mot défini, encadré dans un petit rond rouge.

Cela signifie donc qu'en pied de page, une définition de ce mot sera affichée.
Dans le fichier CSS par défaut, au-delà de l'affichage de ce numéro, le mot ou le groupe de mots définis sera souligné en pointillé rouge. Libre à vous bien entendu de modifier ce style.
Le rendu
Le plugin affichera automatiquement au pied de votre article, l'ensemble des mots définis dans votre article en rappelant le numéro de renvoi, le mot défini ainsi que sa définition.
La numérotation des renvois se fait de manière automatique dans le pied de page de votre article.

Paramètre modifiable dans la console du menu
Dans la console du plugin, au-delà de la manière d'utiliser à syntaxe pour l'utilisation de ce plugin, vous trouverez un champ texte que vous pouvez modifier. Dans ce champ, vous pourrez afficher et modifier la légende à afficher avant le pied de page.

definition.php
<?php
defined('_JEXEC') or die('Access deny');
class plgContentDefinition extends JPlugin
{
function onContentPrepare($content, $article, $params, $limit){
$document = JFactory::getDocument();
$document->addStyleSheet('plugins/content/definition/style.css');
include('formater_definition.php');
include('rechercher_definition_tous_articles.php'); /*A finir*/
}
}
formater_definition.php
<?php
/*Je commence par virer tous les retour chariot */
$re = '/\r|\n/m';
$subst = "";
$article->text = preg_replace($re, $subst, $article->text);
$re = '/{def.*"(.*)"}(.*){\/def}/Us';
preg_match_all($re, $article->text , $matches, PREG_SET_ORDER, 0);
$i=1;
$ch_pied_page ='<div class="pied-page-notes"><fieldset><legend>Définitions de la page :</legend>';
foreach($matches as $ligne)
{
$ligne[2] = str_replace (array("\r\n", "\n", "\r", "<br>", "<br />","<br/>",chr(10),chr(13),chr(10).chr(13)), ' ',$ligne[2]);
$ch_pied_page = $ch_pied_page.'<div class="pied-page-une-ligne"><span class="nro">'.$i.'</span><span class="mot">'.$ligne[1].'</span><span class="separateur">:</span><span class="definition">'.$ligne[2].'</span></div>';
$document = JFactory::getDocument();
$document->addStyleSheet('plugins/content/definition/style.css');
$article->text = str_replace($ligne[0],'<span class="mot-defini">'.$ligne[1].'<span class="numero-de-definition">'.$i.'</span></span>',$article->text);
$i++;
}
$ch_pied_page .='</fieldset></div>';
$article->text = $article->text.$ch_pied_page;
//Le param n° est le type du module, le 2e param est l'ID du module
$module = JModuleHelper::getModule('mod_somemodule', 20);
?>
definition.xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="1.0" type="plugin" group="Content">
<name>Definition</name>
<author>Sebastien LHUILLIER</author>
<creationDate>Octobre 2023</creationDate>
<copyright>Sébastien LHUILLIER</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</authorEmail>
<authorUrl>www.sebastien-lhuillier.com</authorUrl>
<version>1.0</version>
<description>Ce plugin permet de gérer les définitions décrites dans les articles Joomla</description>
<files>
<filename plugin="definition">definition.php</filename>
<filename>definition.xml</filename>
<filename>style.css</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field name="note21" type="note" class="alert" label="Utilisation" description="Pour définir un mot, utiliser la syntaxe {def "Mot_a_définir"}ceci est le libellé de ma note{/def}" />
</fieldset>
</fields>
</config>
</extension>
formater_definition.php
<?php
defined('_JEXEC') or die('Access deny');
class plgContentDefinition extends JPlugin
{
function onContentPrepare($content, $article, $params, $limit){
include('formater_definition.php');
include('rechercher_definition_tous_articles.php');
}
}
style.css
.une-definition {
background-color: lightyellow;
margin-bottom: 1%;
border: 2px solid red;
padding: 0.5%;
}
.une-definition #separateur{
color:blue;
}
.une-definition .mot-defini{
color:green;
float:left;
}
.une-definition .definition{
float:left;
}
.une-definition .sep {
float: left;
}
.mot-defini{
text-decoration: none;
border-bottom: dashed 1px red;
}
.mot-defini::after{
/*content:"\269B";*/
font-variant-position: super;
color:red;
font-size:70%;
padding:5px;
}
.mot-defini .numero-de-definition {
color: white;
font-variant-position: super;
font-weight: bold;
background-color: red;
/* min-height: 10px;*/
border-radius: 15px;
/* border: 2px solid red;
padding: 1px;
padding-bottom: 1px;*/
width: 10px;
display: inline-grid;
text-align: center;
height: 10px;
/*padding-bottom: 6px;*/
padding-bottom: 2px;
margin-left: 0.5%;
}
.pied-page-une-ligne .mot{
font-weight: bold;
text-decoration: underline;
}
.pied-page-notes .pied-page-une-ligne .nro{
color: white;
font-variant-position: super;
font-weight: bold;
background-color: red;
min-height: 10px;
border-radius: 15px;
border: 2px solid red;
padding: 1px;
padding-bottom: 1px;
width: 10px;
display: inline-grid;
text-align: center;
height: 10px;
padding-bottom: 6px;
padding-bottom: 2px;
margin-left: 0.5%;
}
