ti-enxame.com

Como configurar o método $ form-> loadFile corretamente?

No meu plugin do sistema, estou usando o seguinte para carregar o arquivo xml de opções padrão para modelos

function onContentPrepareForm($form, $data) {

    if (!($form instanceof JForm)){

    $this->_subject->setError('JERROR_NOT_A_FORM');
    }


    // Template defaults
    if ($form->getName() == 'com_templates.style') {
        JForm::addFormPath('pathtofolder');
        $form->loadFile('xmlfile', false, false , true);
    }
}

funciona bem

agora em templateDetails.xml por padrão, terei o grupo de campos params vazio

...
    <config>
        <fields name="params">

        </fields>
    </config>
...

também funciona bem e exibe os parâmetros padrão do meu arquivo xml.

Agora, quero oferecer aos usuários a opção de substituir o parâmetro padrão existente simplesmente adicionando-o ao templateDetails.xml.

exemplo protostar padrão eu mudei o valor templateBackgroundColor de F4F6F7 para FF6600

<config>
    <fields name="params">
        <fieldset name="advanced">
        <field name="templateBackgroundColor" class="" type="color" default="#FF6600"
                label="TPL_PROTOSTAR_BACKGROUND_COLOR_LABEL"
                description="TPL_PROTOSTAR_BACKGROUND_COLOR_DESC" />
        </fieldset>
    </fields>
</config>

isso também funciona, mas o campo está na posição incorreta agora, está localizado como o primeiro campo no topo e foi o segundo.

De acordo com o método loadFile () e load (), ele deve substituir o campo em seu local exato.

https://github.com/joomla/joomla-cms/blob/staging/libraries/joomla/form/form.php#L851https://github.com/joomla/ joomla-cms/blob/staging/libraries/joomla/form/form.php # L727

O que estou perdendo aqui? A carga foi acionada logo antes do modelo xml?

Qualquer ajuda é apreciada.

7
Dan

Não, ele não substitui o campo no lugar, substitui o nó no local.

No seu caso, você está mesclando node: fieldset-> name: advanced node: field-> name: templateBackgroundColor ...

no nó: fieldset-> nome: nó avançado: campo-> nome: templateColor ... nó: campo-> nome: templateBackgroundColor ... ....

A ordem do nó do conjunto de campos é: templateBackgroundColor A ordem do nó original do conjunto de campos é: templateColor, templateBackgroundColor

Confuso porque, pela redação dos documentos do Joomla, isso implica que ele está mesclando os campos "no local", mas está mesclando o xml "no local"

A melhor maneira de manter o pedido é adicionar ao seu arquivo

Como alternativa, você pode usar muitas APIs de formulário de nível inferior para manipular o XML. Não recomendo isso, porque a API do formulário muda de tempos em tempos para corrigir problemas de funcionalidade documentada versus funcionalidade real

2
garyamort