it-swarm-id.com

Bagaimana cara mensetup $ form-> loadFile dengan benar?

Dalam plugin sistem saya, saya menggunakan berikut ini untuk memuat opsi xml file default untuk template

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);
    }
}

bekerja dengan baik

sekarang di templateDetails.xml secara default saya akan memiliki grup bidang params kosong

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

        </fields>
    </config>
...

juga berfungsi dengan baik dan menampilkan params default dari file xml saya.

Sekarang saya ingin memberi pengguna opsi untuk mengganti param default yang ada dengan hanya menambahkannya di dalam templateDetails.xml.

contoh standar protostar saya mengubah nilai templateBackgroundColor dari F4F6F7 ke 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>

ini juga berfungsi, tetapi lapangan berada di posisi yang salah sekarang terletak di bidang pertama di atas dan kedua.

Menurut metode loadFile () dan load () harus menimpa bidang di tempat yang tepat.

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

Apa yang kulewatkan di sini? Apakah memuat api segera sebelum templat xml?

Bantuan apa pun dihargai.

7
Dan

Tidak, itu tidak mengesampingkan bidang di tempat, itu mengesampingkan simpul di tempatnya.

Dalam kasus Anda, Anda menggabungkan simpul: fieldset-> nama: simpul maju: bidang-> nama: templatBackgroundColor ...

menjadi simpul: fieldset-> nama: simpul maju: bidang-> nama: templateColor ... simpul: bidang-> nama: templateBackgroundColor ... ....

Urutan node fieldset Anda adalah: templateBackgroundColor Urutan node fieldset asli adalah: templateColor, templateBackgroundColor

Membingungkan karena dari kata-kata dokumen Joomla, ini menyiratkan bahwa ia menggabungkan bidang "di tempat", tetapi menggabungkan xml "di tempat"

Cara terbaik untuk mempertahankan pemesanan adalah dengan menambahkan ke file Anda

Atau, Anda bisa menggunakan banyak api bentuk tingkat bawah untuk memanipulasi XML. Saya tidak menyarankan itu karena API formulir berubah dari waktu ke waktu untuk memperbaiki masalah dalam fungsionalitas yang didokumentasikan vs fungsionalitas yang sebenarnya

2
garyamort