UPDATE : après avoir découvert un oubli, une mise à jour du plugin a été faite le lendemain de la publication de cet article
Je vous présente aujourd'hui un petit plugin que je viens tout juste de finaliser, qui va me permettre, dans le cadre de mon travail, d'afficher ou non un contenu, un texte, voire du code HTML, contenu à l'intérieur des deux balises utilisées pour ce plugin,
{pub date....} et {/pubdate}.
- une chaîne de caractère qui va vous permettre de spécifier une date de début
- une chaîne de caractère qui va vous permettre de spécifier une date de fin.
Ces deux dates saisies sous la forme américaine (2020-02-08) vont permettre de spécifier au sein d'un article ou d'un module, qui utilise ce plugin, les dates butoirs du contenu à afficher, ce contenu etant ce qu'il se trouve entre les balises. L'utilisation du format américain ^permettant dans le code du plugin de ne pas refaire des mamailles de conversion (j'utilise le contenu directement dans les fonctions natives de php)
L'utilisation
Nous allons spécifier une date de début, une date de fin. Si la date courante c'est-à-dire la date du jour n'est pas dans l'intervalle spécifié dans ce plugin, le contenu sera tout simplement ignorer. Comme vous puvez le voir, le contenu peut prendre en compte du HTML. Les tags à utiliser sont pubdate (en minuscules).
{pubdate:start=2020-02-01:stop=2025-02-02}
<div style="color:red">contenu dans lesdates</div>
{/pubdate}
Regex101
Pour préparer mon plugin, j'utilise l'excellent site Regex101 que lequel vous pouvez retrouver mon travail de recherche de regex (je suis une bille en regex, j'apprends...)

Les paramètres
Une suite ?
pubdate.php
<?php
defined('_JEXEC') or die('Access deny');
class plgContentPubdate extends JPlugin
{
function onContentPrepare($content, $article, $params, $limit){
$monTab = array();
/***************************************************
* Pour fonctionner, le plugin s'utilise ainsi :
* {pubdate:start=2020-02-01:stop=2025-02-02}<div style="color:red">contenu dans lesdates</div> {/pubdate}
*
* NOTE : Après discussion sur un forum américain, stackoverflow, un développeur m'a orienté vers une
* utilisation du plugin sous ma forme
*
* {pubdate:start=2020-02-01:stop=2025-02-02}<div style="color:red">contenu dans lesdates</div> {/pubdate}
*
* plutot que
* {pubdate start="20/05/2020" stop="25/05/2026"} UNE CHAINE {/pubdate}
*
* Liens test regex : https://regex101.com/r/eR6xKB/1
* https://regex101.com/r/Hkf7s9/1
***************************************************/
//Je récupére ce le contenu d'entre les deux balises du plugin
$re = '/{pubdate:start=(.*):stop=(.*)}\r?\n?(.*)\r?\n?{\/pubdate}/m';
preg_match_all($re, $article->text, $matches, PREG_SET_ORDER, 0);
$i=0;
$T = array();
foreach($matches as $maligne)
{
$debut = strtotime($maligne[1]);
$fin = strtotime($maligne[2]);
$T[$i]["debut"] = $debut;
$T[$i]["fin"] = $fin;
$T[$i]["contenu"] = $maligne[3];
$monTab[$i][0] = $matches[$i][0];
$monTab[$i][1] = $maligne[$i][0];
$monTab[$i][2] = $T[$i]["debut"];
$monTab[$i][3] = $T[$i]["fin"];
$monTab[$i][4] = $T[$i]["contenu"];
if ((intval($monTab[$i][2])<time()) && (intval($monTab[$i][3])>time()))
{
$monTab[$i][5] = "CRS";
}
else
{
$monTab[$i][5] = "OFF";
}
$i++;
}
$i=0;
foreach($monTab as $maligne)
{
//ici je teste que la date courante soit dans l'interval *strict* en allant lire la valeur de la 5e "case" du array
if ($maligne[5]=="CRS")
{
echo "<pre>";
print_r($maligne);
echo "</pre>";
$remplacement = $maligne[4];
}
else
{
/* Comme je fais quoi qu"il en soit, un remplacement dans l'article, il faut que ce remplacement à vide existe pour que
le plugin joue son rôle d'afficher OU PAS (et c'est le OU PAS qui est important) le contenu.
Ce "OU PAS" se caractérise par un remplacement de chaine (avec shortcode) à vide dans l'article.
Pour les "codeurs", c'est ici que l'on peut placer une autre chaine, eventuellement récupérée de l'admin du plugin
*/
$remplacement= "";
}
$article->text = str_replace($maligne[0], $remplacement, $article->text);
}
}
}
pubdate.xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="Content">
<name>pubdate</name>
<author>Sebastien LHUILLIER</author>
<creationDate>Janvier 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>Afficher un contenu dont les dates de début et fin sont spécifiées</description>
<files>
<filename plugin="pubdate">pubdate.php</filename>
<filename>pubdate.xml</filename>
</files>
</extension>
