it-swarm.dev

Il file di caricamento del plug-in di contenuto carica forma / dati CONDIZIONATI, ma non salva i dati - perché no?

Sono completamente sconcertato! Sto cercando di caricare i campi personalizzati in una categoria come ho fatto con successo in passato e spiegato in questo domanda/risposta . Funziona come previsto finché non provo a caricare un modulo diverso a seconda di alcuni criteri relativi alla categoria.

In entrambi i casi (condizionatamente e incondizionatamente),

  1. Il modulo viene caricato
  2. I dati esistenti vengono recuperati/caricati
  3. Durante il salvataggio, $ _POST contiene i dati personalizzati

Tuttavia, se un modulo viene caricato in modo condizionale, viene caricato come previsto, ma non lo salva. Non solo non salva, ma i dati caricati originariamente non sono più lì!

Il mio primo pensiero è stato che era richiesto un nome di modulo predefinito, ma era in grado di determinare il modulo corretto per caricare la pagina e analizzare i dati per pubblicare correttamente, quindi sono completamente fermo su ciò che potrebbe essere sbagliato.

$_POST Variabile durante il salvataggio: (in entrambi i casi)

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

Codice da onContentPrepareForm

Il test if(true) è semplicemente per passare facilmente tra i due blocchi di codice.

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

Come pubblicato, la domanda è sostanzialmente senza risposta perché era dovuta a un errore di codifica che non sembrava rilevante per la domanda. La mia prima propensione era eliminare la domanda, ma pensavo che il motivo dell'errore di codifica fosse abbastanza interessante per chiunque potesse riscontrare un problema simile.

In breve, il mio codice per determinare quale tipo di modulo che volevo caricare faceva riferimento a $data e stava ottenendo silenziosamente il seguente errore quando Joomla ha chiamato la funzione plugin durante il processo di salvataggio:

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

Presumibilmente, questo stava impedendo il caricamento del modulo da qualche parte a monte e Joomla semplicemente non sapeva cosa fare con i dati del modulo, quindi lo ha lasciato cadere.

Il motivo di questo errore che si verifica solo durante il salvataggio è che $data viene passato alla funzione onContentPrepareFormè vuoto quando viene chiamato durante il salvataggio. Questo non mi sembra "giusto", quindi la mia ipotesi che fosse lì, ma comunque, è per questo che è stato lanciato un avviso, che ha causato il fallimento della funzione e, alla fine, la perdita dei dati del modulo.

3
GDP