Je suis complètement dérouté! J'essaie de charger des champs personnalisés dans une catégorie, comme je l'ai fait avec succès par le passé et expliqué dans cette question/réponse . Cela fonctionne comme prévu jusqu'à ce que j'essaye de charger un formulaire différent en fonction de certains critères de la catégorie.
Dans les deux cas (conditionnellement et inconditionnellement),
Cependant, si un formulaire est chargé conditionnellement, il se charge comme prévu, mais ne l'enregistre pas. Non seulement cela ne sauvegarde pas, mais les données qui ont été chargées à l'origine ne sont plus là!
Ma première pensée a été qu'un nom de formulaire par défaut était requis, mais il a été en mesure de déterminer le bon formulaire pour charger la page et analyser les données afin de le publier correctement.
Variable $_POST
Lors de l'enregistrement: (dans les deux cas)
Array
(
[category_layout] =>
[image] =>
[my_pse] => P
[my_extra1] => 1
[my_extra2] => 22
[my_extra3] => 333
)
Code de onContentPrepareForm
Le test if(true)
consiste simplement à basculer facilement entre les deux blocs de code.
if(true) {
// Unconditional loading does everything as expected:
// It Saves/Retrieves to/from #__categories.params
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('customfields2', false);
return true;
}else{
// Conditional loading does everything as expected EXCEPT:
// It does not save it #__categories.params
if($pse=='P') {
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('customfields1', false);
return true;
}elseif($pse=='S'){
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('customfields2', false);
return true;
}elseif($pse=='E') {
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('customfields3', false);
return true;
}else{
return true;
}
}
Comme indiqué, la question est fondamentalement sans réponse parce qu'elle était due à une erreur de codage qui ne semblait pas pertinente pour la question. Mon premier désir était de supprimer la question, mais j’ai pensé que la raison de l’erreur de codage était suffisamment intéressante pour quiconque pourrait rencontrer un problème similaire.
En bref, mon code pour déterminer le type de formulaire que je voulais charger faisait référence à $data
et obtenait discrètement l'erreur suivante lorsque Joomla a appelé la fonction de plug-in pendant le processus de sauvegarde:
Notice: Trying to get property of non-object in myplugin\myplugin.php on line 12
Vraisemblablement, cela empêchait le formulaire de se charger quelque part en amont, et Joomla ne savait simplement pas quoi faire avec les données du formulaire, il l'a donc abandonnée.
La raison de cette erreur ne survenant que pendant la sauvegarde est que $data
en cours de transmission à la fonction onContentPrepareForm
est vide lors de l'appel de la sauvegarde. Cela ne me semble pas "correct", d’où mon hypothèse de l’être, mais c’est néanmoins pour cette raison qu’un avis d’avertissement a été déclenché, ce qui a entraîné l’échec de la fonction et finalement la perte des données du formulaire.