J'ai créé un plugin et ajouté quelques champs personnalisés à son backend. Pour cela, j'ai suivi les indications de la documentation Joomla . J'ai étendu par exemple JFormFieldList
pour obtenir une liste déroulante d'options.
Mes champs fonctionnent correctement si le plugin est activé. Mais lorsque le plugin est désactivé, la liste n'est pas rendue. Je reçois juste une zone de texte de base.
Même problème avec un autre champ personnalisé qui devrait afficher un bouton. Le bouton apparaît si le plug-in est activé mais s’il est désactivé, j’obtiens à la place la même zone de texte de base.
Je suppose donc que le problème est que le php des champs personnalisés n'est pas exécuté lorsque le plugin est désactivé. Y a-t-il un moyen de contourner cela?
EDIT: voici l’un de mes champs personnalisés
<?php
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');
jimport('joomla.form.formfield');
class JFormFieldZotcslLocales extends JFormFieldList
{
protected $type = 'ZotcslLocales';
public function getOptions() {
$path = JPATH_ROOT.'/media/plg_zotbib/locales/*.xml';
foreach(glob($path) as $file){
$name = basename($file, '.xml');
$name = str_replace('locales-', '', $name);
$locales[$name] = $name;
}
return $locales;
}
}
?>
Et voici comment cela est inclus dans le fichier manifeste
<field name="locale" type="zotcsllocales"
description="PLG_ZOTBIB_LOCALE_DESC"
label="PLG_ZOTBIB_LOCALE_LABEL"
required="true"
/>
Le problème a été résolu en ajoutant une propriété addfieldpath
à la balise <config>
Du manifeste xml:
<config addfieldpath="/plugins/content/zotbib/fields">
Sans cela, les champs personnalisés du backend n'étaient affichés que lorsque le plugin était publié. Lorsque non publié, le code correspondant n'a pas été réellement exécuté. Avec cette propriété, le code des champs personnalisés est toujours exécuté et ils sont affichés correctement même si le plug-in n'est pas publié.
Le code de mon plugin peut être vu ici: https://framagit.org/svictor/j3-zotbib
@Victor: Évidemment, cela n'apparaît pas car la définition du champ fait partie du plugin, une solution rapide et sale consisterait à créer un plugin ou à ne servir que de montrer le type du champ (un plugin vide contenant la définition du champ et comme il ne fait rien d’autre, vous pouvez le publier sans autre problème). La solution de contournement serait de créer un type de champ pour chaque type de contenu (module, composant ecc.) Avec un nom différent (car ils peuvent être activés/désactivés et un plugin/module/composant peut ne pas être disponible dans d'autres parties de le site où vous avez besoin du type de champ)