it-swarm-vi.com

Làm cách nào để thiết lập phương thức $ form-> loadFile đúng cách?

Trong plugin hệ thống của tôi, tôi đang sử dụng sau để tải tệp xml tùy chọn mặc định cho các mẫu

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

hoạt động tốt

bây giờ trong templateDetails.xml theo mặc định tôi sẽ có nhóm trường params trống

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

        </fields>
    </config>
...

cũng hoạt động tốt và nó hiển thị các thông số mặc định từ tệp xml của tôi.

Bây giờ tôi muốn cung cấp cho người dùng một tùy chọn để ghi đè tham số mặc định hiện có bằng cách thêm nó vào trong templateDetails.xml.

ví dụ mặc định protostar Tôi đã thay đổi giá trị templateBackgroundColor từ F4F6F7 thành 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>

điều này cũng hoạt động, nhưng trường ở vị trí sai bây giờ nó được đặt là trường đầu tiên trên đầu và nó là thứ hai.

Theo phương thức loadFile () và load (), nó sẽ ghi đè trường ở vị trí chính xác của nó.

https://github.com/j Joomla/j Joomla-cms/blob/staging/lologists/j Joomla/form/form.php # L851https://github.com/j Joomla/j Joomla-cms/blob/staging/lologists/j Joomla/form/form.php # L727

Tôi đang thiếu gì ở đây? Đã tải lửa để sớm trước mẫu xml?

Bất kỳ trợ giúp được đánh giá cao.

7
Dan

Không, nó không ghi đè trường tại chỗ, nó ghi đè nút tại chỗ.

Trong trường hợp của bạn, bạn đang hợp nhất nút: fieldset-> name: advanced advanced: field-> name: templateBackgroundColor ...

vào nút: fieldset-> name: advanced advanced: field-> name: templateColor ... node: field-> name: templateBackgroundColor ... ....

Thứ tự của nút fieldset của bạn là: templateBackgroundColor Thứ tự của nút fieldset gốc là: templateColor, templateBackgroundColor

Nhầm lẫn bởi vì từ ngữ của các tài liệu Joomla, nó ngụ ý rằng nó đang hợp nhất các trường "tại chỗ", nhưng nó đang hợp nhất xml "tại chỗ"

Cách tốt nhất để duy trì trật tự là thêm vào tệp của bạn

Ngoài ra, bạn có thể sử dụng rất nhiều api dạng cấp thấp hơn để thao tác XML. Tôi không khuyên bạn vì API biểu mẫu thay đổi theo thời gian để khắc phục sự cố trong chức năng được ghi lại so với chức năng thực tế

2
garyamort