it-swarm-es.tech

¿Cómo configurar el método $ form-> loadFile correctamente?

En mi complemento del sistema, estoy usando el siguiente para cargar el archivo xml de opciones predeterminadas para plantillas

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 bien

ahora en templateDetails.xml por defecto tendré el grupo de campos de parámetros vacío

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

        </fields>
    </config>
...

también funciona bien y muestra los parámetros predeterminados de mi archivo xml.

Ahora quiero dar a los usuarios una opción para anular el parámetro predeterminado existente simplemente agregándolo dentro de templateDetails.xml.

ejemplo protostar predeterminado Cambié el valor de templateBackgroundColor de F4F6F7 a 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>

esto también funciona, pero el campo está en una posición incorrecta ahora está ubicado como el primer campo en la parte superior y fue el segundo.

De acuerdo con el método loadFile () y load (), debe anular el campo en su lugar exacto.

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

¿Que me estoy perdiendo aqui? ¿Se activó la carga poco antes de la plantilla xml?

Cualquier ayuda es apreciada.

7
Dan

No, no anula el campo en su lugar, anula el nodo en su lugar.

En su caso, está fusionando node: fieldset-> name: advanced node: field-> name: templateBackgroundColor ...

into node: fieldset-> name: advanced node: field-> name: templateColor ... node: field-> name: templateBackgroundColor ... ....

El orden de su nodo de conjunto de campos es: templateBackgroundColor El orden del nodo de conjunto de campos original es: templateColor, templateBackgroundColor

Confuso porque, según la redacción de los documentos de Joomla, implica que está fusionando los campos "en su lugar", pero está fusionando el xml "en su lugar"

La mejor manera de mantener el pedido es agregar a su archivo

Alternativamente, puede utilizar una gran cantidad de la API de formulario de nivel inferior para manipular el XML. No lo recomiendo porque la API del formulario cambia de vez en cuando para solucionar problemas en la funcionalidad documentada frente a la funcionalidad real

2
garyamort