Préambule
Alors j'ntends d'ici en core les commentaires du style "super pour le spam", "génial pour les robots aspiraturs" et je pourrais être d'accord avec vous... si l'application de ce projet ne s'appliiquait pas uniquement au coeur d'in intranet loins de toutes cette pollution de mail. le projet que je vous propose de découvrir ici est la génération d'un nouveau type de données, email, qui, une fois rajouté à Joomla, nous permettra enfin d'avoir un type de champs avec un lien web a href de type mailto: ! Encore un manquen je trouve, à joomla. Bon, je comprends que le fait de bosser sur de l'intra, onn'a pas forcément les même problème que sur de l'internet, c'est clair.
But et remerciements
Une fois de plus, je ne peux que remercier les membres du Joomla! Lorraine Groupe de Facebook, qui m'ont lancé et guidé vers des astuces pour mener à bien ce projet. Il me semble que ce tuto n'a plus lieu d'être dans Joomla 4 car un champs email va voir le jour (je dis bien "il me semble" car aucune certification sûre).
Le but de ce projet est donc de créer un nouveau type de champs, qui une fois utilisé, "transformera" l'adresse email que vous renseignerez dans le champs idoine (ex : Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.) dans un HTML propre <a href="mailto:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.">Contact</a>.
Je n'ai pas géré les autres paramètres que l'on peut trouvé dans un lien de type href mais il suffirait de les rajouter à partir de cet exemple.Vous retrouverez bien entendu la commande complère de la commande mailto: dans la section 2 de la RFC 6068.
Fonctionnement
Si comme moi vous débutez, il y a des chosses à savoir. Notamennt un point très interessant : le fait de faire ce plugin permettra de "décharger" à Joomla tous les tests possibles et inimaginables sur le mail.Je ne vais pas vous cacher que j'ai fait ce developpement il y a déjà quelques temps et ce n'est plus tout frais ds ma tête. Je vais tacher de commenter au mieux. Le plugin est dans un dossier placé dans le sous doffise [joomla]\plugins\fields\. Il porte le nom email (le dossier n'est pas mentionné dans ma copie d'écran).
Le plugin
Structure des fichiers
Ce dossier email est composé de la sorte :
Détails des fichiers
email.php
Ce fichier contient la déclaration du plugin au niveau développement, c'est à dire sa classe :
<?php
/**
* @package Joomla.Plugin
* @subpackage Fields.Text
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::import('components.com_fields.libraries.fieldsplugin', JPATH_ADMINISTRATOR);
/**
* Fields Text Plugin
*
* @since 3.7.0
*/
class PlgFieldsEmail extends FieldsPlugin
{
}
email.xml
Dans le fichier email.xml, c'est la déclaration du plugin en lui même, avec les champs en entrée, son nom, ses méta-données... Bref un XML de simple déclaration
<?xml version="1.0" encoding="utf-8" ?>
<extension type="plugin" version="3.7.0" group="fields" method="upgrade">
<name>Plugin pour afficher une adresse email</name>
<author>Sébastien LHUILLIER</author>
<creationDate>March 2021</creationDate>
<copyright>Copyright (C) 2005 - 2020 Open Source Matters. All rights reserved.</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.0</version>
<description>Plugin pour structurer la saisir d'une adresse email</description>
<files>
<filename plugin="email"></filename>
<folder>params</folder>
<folder>tmpl</folder>
</files>
<languages>
<language tag="en-GB">en-GB.plg_fields_text.ini</language>
<language tag="en-GB">en-GB.plg_fields_text.sys.ini</language>
</languages>
<config>
<fields name="params">
<fieldset name="basic">
<field
name="filter"
type="list"
label="PLG_FIELDS_TEXT_PARAMS_FILTER_LABEL"
description="PLG_FIELDS_TEXT_PARAMS_FILTER_DESC"
class="btn-group"
default="JComponentHelper::filterText"
validate="options"
>
<option value="0">JNO</option>
<option value="raw">JLIB_FILTER_PARAMS_RAW</option>
<option value="safehtml">JLIB_FILTER_PARAMS_SAFEHTML</option>
<option value="JComponentHelper::filterText">JLIB_FILTER_PARAMS_TEXT</option>
<option value="alnum">JLIB_FILTER_PARAMS_ALNUM</option>
<option value="integer">JLIB_FILTER_PARAMS_INTEGER</option>
<option value="float">JLIB_FILTER_PARAMS_FLOAT</option>
<option value="tel">JLIB_FILTER_PARAMS_TEL</option>
</field>
<field
name="maxlength"
type="number"
label="PLG_FIELDS_TEXT_PARAMS_MAXLENGTH_LABEL"
description="PLG_FIELDS_TEXT_PARAMS_MAXLENGTH_DESC"
filter="integer"
/>
</fieldset>
</fields>
</config>
</extension>
params/email.xml
<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="fieldparams">
<fieldset name="fieldparams">
<field
name="maxlength"
type="text"
label="PLG_FIELDS_TEXT_PARAMS_MAXLENGTH_LABEL"
description="PLG_FIELDS_TEXT_PARAMS_MAXLENGTH_DESC"
filter="integer"
/>
</fieldset>
</fields>
</form>
tmpl/email.xml
C'est dans ce fichier que je récupère la valeur et que j'y concatème autour l'adresse email. C'est aussi ici, si vous avez besoin des autres paramètres notifiés dans la RFC 6068, que vous générerez la bonne chaine calquée sur le modèle de la RFC citée.
<?php
defined('_JEXEC') or die;
$value = $field->value;
if ($value == '')
{
return;
}
if (is_array($value))
{
$value = implode(', ', $value);
}
echo '<a href="mailto:'.htmlentities($value).'">'.htmlentities($value)."</a>";