desenv-web-rp.com

O plug-in de conteúdo loadfile carrega dados / formulário CONDICIONAIS, mas não salva os dados - por que não?

Estou completamente perplexo! Estou tentando carregar campos personalizados em uma categoria, como fiz com sucesso no passado, e expliquei isso pergunta/resposta . Funciona como esperado até eu tentar carregar um formulário diferente, dependendo de alguns critérios sobre a categoria.

Nos dois casos (condicional e incondicionalmente),

  1. O formulário é carregado
  2. Os dados existentes são recuperados/carregados
  3. Ao salvar, $ _POST contém os dados personalizados

No entanto, se um formulário for carregado condicionalmente, ele será carregado conforme o esperado, mas não será salvo. Além de não salvar, os dados que foram originalmente carregados não estão mais lá!

Meu primeiro pensamento foi que era necessário um nome de formulário padrão, mas ele foi capaz de determinar o formulário correto para carregar a página e analisar os dados para postar corretamente.

$_POST Variável ao salvar: (nos dois casos)

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

Código de onContentPrepareForm

O teste if(true) é simplesmente alternar facilmente entre os dois blocos 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

Conforme publicado, a pergunta é basicamente irrespondível, porque ocorreu devido a um erro de codificação que não parecia relevante para a pergunta. Minha primeira inclinação foi excluir a pergunta, mas achei que o motivo do erro de codificação era interessante o suficiente para qualquer pessoa que pudesse encontrar um problema semelhante.

Em resumo, meu código para determinar qual tipo de formulário que eu queria carregar estava fazendo referência a $data, e estava recebendo o seguinte erro quando o Joomla chamou a função de plug-in durante o processo de salvamento:

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

Presumivelmente, isso estava impedindo que o formulário fosse carregado em algum lugar a montante, e o Joomla simplesmente não sabia o que fazer com os dados do formulário, então descartou-o.

O motivo desse erro ocorrer apenas durante o salvamento é que $data sendo passado para a função onContentPrepareFormfica vazio quando chamado durante o salvamento. Isso não parece "certo" para mim, portanto, minha suposição de que estava lá, mas, mesmo assim, é por isso que houve um aviso de aviso disparado, que causou a falha da função e, finalmente, a perda dos dados do formulário.

3
GDP