it-swarm-es.tech

Content Plugin loadfile carga formularios / datos CONDICIONALES, pero no guarda los datos, ¿por qué no?

Estoy completamente desconcertado! Estoy tratando de cargar campos personalizados en una categoría como lo hice con éxito en el pasado, y lo expliqué en este pregunta/respuesta . Funciona como se esperaba hasta que trato de cargar un formulario diferente dependiendo de algunos criterios sobre la categoría.

En ambos casos (condicional e incondicional),

  1. La forma se carga
  2. Los datos existentes se recuperan/cargan
  3. Al guardar, $ _POST contiene los datos personalizados

Sin embargo, si se carga un formulario ¡condicionalmente, se carga como se esperaba, pero no lo guarda. ¡No solo no se guarda, sino que los datos que se cargaron originalmente ya no están allí!

Mi primer pensamiento fue que se requería un nombre de formulario predeterminado, pero fue capaz de determinar el formulario correcto para cargar la página y analizar los datos para publicarlos correctamente, por lo que estoy totalmente estancado en lo que podría estar mal.

$_POST Variable al guardar: (en ambos casos)

Array
(
    [category_layout] => 
    [image] => 
    [my_pse] => P
    [my_extra1] => 1
    [my_extra2] => 22
    [my_extra3] => 333
)

Código de onContentPrepareForm

La prueba if(true) es simplemente alternar fácilmente entre los dos bloques de código.

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

Según lo publicado, la pregunta es básicamente incontestable porque se debió a un error de codificación que no parecía relevante para la pregunta. Mi primera inclinación fue eliminar la pregunta, pero pensé que la razón del error de codificación era lo suficientemente interesante para cualquiera que pudiera encontrar un problema similar.

En resumen, mi código para determinar qué tipo de formulario quería cargar hacía referencia a $data, y silenciosamente recibí el siguiente error cuando Joomla llamó a la función del complemento durante el proceso de guardar:

Notice: Trying to get property of non-object in myplugin\myplugin.php on line 12

Presumiblemente, esto impedía que el formulario se cargara en algún lugar aguas arriba, y Joomla simplemente no sabía qué hacer con los datos del formulario, por lo que lo descartó.

La razón de este error que ocurre solo durante el guardado es que $data se pasa a la función onContentPrepareFormestá vacía cuando se llama durante el guardado. Esto no me parece "correcto", por lo tanto, supongo que estaba allí, pero no obstante, es por eso que se activó un aviso de advertencia, lo que provocó que la función fallara y, en última instancia, se perdieron los datos del formulario.

3
GDP