Aujourd'hui, nous allons voir comment développer un module un peu plus complexe que le premier que j'ai déjà présenté, module qui pourra faire appel à des paramètres. À partir d'une chaîne de caractère, de la forme suivante, nous allons récupérer l'ensemble des paramètres.

{nom_plugin param1="valeur1" param2="valeur2"}contenu{/nom_plugin}

Comme nous pouvons le voir, il n'y a rien d'extraordinaire.

Dans cette chaîne de caractères, nous pouvons voir 3 grandes informations intéressantes :

  • Le nom du plugin
  • Les paramètres éventuels du plugin
  • Un contenu sous la forme d'une chaîne de caractères, encadré par un début et une fin de plugin

Dans un premier temps nous allons extraire avec une expression régulière virgule l'ensemble des paramètres.

<?php
$re = '/{nom-plugin (.*)}(.*){\/nom-plugin}/';
$str = '{nom-plugin param1="valeur1"  param2="valeur2" param3="valeur3"  param4="valeur4"}CONTENU{/nom-plugin}';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Affiche l'entiereté des valeurs pour débogage
//var_dump($matches);
$ligne = $matches[0][1];
?>

Comme on peut le voir en rouge, on extrait via des expressions régulières, deux blocs de valeurs.

Ensuite, nous allons supprimer l'ensemble des espaces inutiles dans la ligne. En effet, l'utilisateur du plugin peut, dans la première chaîne de paramètres, espacer ces derniers par autant d'espaces qu'il le souhaite. Ce code suivant remplace les multiples espaces par un espace simple.

<?php
$re = '/{nom-plugin (.*)}(.*){\/nom-plugin}/';
$str = '{nom-plugin param1="valeur1"  param2="valeur2" param3="valeur3"  param4="valeur4"}CONTENU{/nom-plugin}';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Affiche l'entiereté des valeurs pour débogage
//var_dump($matches);
$ligne = $matches[0][1];

$t = preg_replace('/\s+/', ' ', $ligne);
echo "<pre>";
print($t);
echo "</pre>";
?>

Maintenant, nous avons récupéré les informations comprises entre la balise de début et à balise de fin du plugin. D'une manière concrète, nous avons récupéré ce qu'il se trouve entre } et {. Cela correspondau "groupe n°2 des résultats de la regex : 

$re = '/{nom-plugin (.*)}(.*){\/nom-plugin}/';
$str = '{nom-plugin param1="valeur1"  param2="valeur2" param3="valeur3"  param4="valeur4"}CONTENU{/nom-plugin}';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
echo "<pre>"; print_r($matches);
echo "</pre>";

Nous avons maintenant les trois étapes pour extraire les données du plugin. Ces valeurs sont stockées dans le tableau $matches. Il suffit désormais de continuer le traitement comme vous semble, en suivant la partie métier du plugin, c'est-à-dire ce qu'il doit faire.

Une application possible serait de passer un fichier css en paramètre d'un plugin de contenu pour affecter un style ou un autre au contenu retourné par le plugin, ou bien entendu passer en entrée en paramètre du contenu au plugin


Mise à jour : je me rends compte que je n'ai pas joints a cet article le lien regex101 qui m'a permis d'aboutir à ce but

Mon Github

slhuilli1's GitHub repositories