web-dev-qa-db-fra.com

Content Plugin loadfile charge le formulaire / les données CONDITIONNELLES, mais n'enregistre pas les données - pourquoi pas?

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),

  1. Le formulaire se charge
  2. Les données existantes sont récupérées/chargées
  3. Lors de la sauvegarde, $ _POST contient les données personnalisées

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;
    }
}
2
GDP

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 onContentPrepareFormest 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.

3
GDP