Je reçois
TypeError: le formulaire est nul
dans la console du navigateur lorsque je sélectionne un bouton personnalisé ajouté à un formulaire à l'aide de JToolbarHelper.
Je peux insérer le bouton dans n'importe quel autre composant tel quel et il se soumettra donc je soupçonne qu'il y a quelque chose dans la façon dont j'ai créé mon formulaire, mais après près de 4 heures, je n'ai pas pu le comprendre.
J'ai essayé de créer une forme minimale pour un composant (default.php)
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
$form = JForm::getInstance('query', JPATH_COMPONENT . '/models/forms/query.xml');
?>
<form
action="<?php echo JRoute::_('index.php?option=com_accentis&view=query'); ?>"
method="post" enctype="multipart/form-data" name="adminForm" id="query-form" >
<?php echo $form->renderFieldset('query'); ?>
<input type="hidden" name="task" value=""/>
<input type="hidden" name="view" value="query" />
<?php echo JHtml::_('form.token'); ?>
</form>
Ma ligne pour ajouter le bouton personnalisé est (view.html.php)
JToolbarHelper::custom('query.loadData', "" , "" , 'Load Data', false);
Dans la console, je reçois ce message:
TypeError: form is null 2 core-uncompressed.js:66:4 submitform http://maralinga.test/media/system/js/core-uncompressed.js?0586eb80516116b3723cefdbfa5e045f:66 submitbutton http://maralinga.test/media/system/js/core-uncompressed.js?0586eb80516116b3723cefdbfa5e045f:99 onclick http://maralinga.test/administrator/index.php?option=com_accentis&view=query:1
Et autour de la ligne 66 du script, je tombe en panne et je brûle.
* Generic submit form
*
* @param {String} task The given task
* @param {node} form The form element
* @param {bool} validate The form element
*
* @returns {void}
*/
Joomla.submitform = function(task, form, validate) {
if (!form) {
form = document.getElementById('adminForm');
}
if (task) {
form.task.value = task; <===Line 66
}
Je pense que la variable de formulaire n'est pas définie correctement et lorsqu'elle arrive à la ligne 66, elle ne peut pas faire ce qu'elle veut.
Je soupçonne que c'est quelque chose avec la façon dont je crée une instance de mon formulaire avec la $form = JForm::getInstance('query', JPATH_COMPONENT . '/models/forms/query.xml');
ou dans mes paramètres de définition de formulaire.
Et je ne sais pas si c'est important, mais c'est l'objet de formulaire.
Joomla\CMS\Form\Form Object
(
[data:protected] => Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
)
[initialized:protected] =>
[separator] => .
)
[errors:protected] => Array
(
)
[name:protected] => query
[options:protected] => Array
(
[control] =>
)
[xml:protected] => SimpleXMLElement Object
(
[fieldset] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => query
[label] => COM_ACCENTIS_FIELDSET_QUERY
)
[field] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => searchId
[type] => text
[label] => COM_ACCENTIS_FIELD_SEARCHID_LABEL
[description] => COM_ACCENTIS_FIELD_SEARCHID_DESC
[labelclass] => control-label
)
[0] =>
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => feature
[type] => list
[label] => COM_ACCENTIS_FIELD_FEATURE_LABEL
[description] => COM_ACCENTIS_FIELD_FEATURE_DESC
[labelclass] => control-label
)
[option] => Array
(
[0] => Inventory
[1] => Sales Report
)
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => params
[type] => text
[multiple] => true
[formsource] => administrator/components/com_accentis/models/forms/queryparams.xml
[label] => COM_ACCENTIS_FIELD_PARAMS_LABEL
[description] => COM_ACCENTIS_FIELD_PARAMS_DESC
[labelclass] => control-label
)
[0] =>
)
)
)
)
[repeat] =>
)
"C'est l'attribut de nom qui était adminform. L'ID est un formulaire de requête. Vous devez soit passer le formulaire à Joomla.submitform (), soit changer l'ID en adminForm." ... @ Sharky