web-dev-qa-db-fra.com

Type de champ de formulaire personnalisé disponible pour toutes les extensions?

Je crée mes types de champs de formulaire personnalisés et j'aimerais les rendre disponibles globalement pour tous les formulaires, partout dans Joomla.

Existe-t-il un emplacement spécifique pouvant être utilisé à cette fin, autre que libraries/joomla/form/fields, car il est généralement considéré comme une mauvaise pratique d’ajouter des fichiers personnalisés à cet emplacement?

Je suppose que je pourrais ajouter manuellement le chemin dans chaque code XML pour mon champ personnalisé, mais encore une fois, cela me semble très pratique si je pouvais simplement ajouter les champs dans une "portée globale" comme décrit ci-dessus.

2
FFrewin

Vous pouvez créer un plugin et utiliser onContentPrepareForm () pour ajouter un nouveau champ à chaque formulaire possible:

public function onContentPrepareForm($form, $data)
{
    // You can add some filtering here and add fields only to selected components
    if ($form->getName() != 'com_content.article')
    {
        return true;
    }

    // Ensure you're dealing with Form
    if (!($form instanceof JForm))
    {
        $this->_subject->setError('JERROR_NOT_A_FORM');

        return false;
    }

    // If everything is ok - load form file
    JForm::addFormPath(dirname(__FILE__) . '/myform');
    $form->loadFile('myform', false);

    return true;
}

Les données des champs ajoutés de cette manière sont stockées dans la colonne "attribs". La seule faille est que le composant doit prendre en charge l'événement onContentPrepareForm. Vous pouvez également ajouter des données personnalisées à l'aide des fonctions onContentDeforeSave () et onContentAfterSave ().

1
Krossfire