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


7

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-cm / /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.


Tôi sẽ đoán, có lẽ là thứ tự tải. Nếu protostar tải thứ hai, nó thay thế chỉ số 0 của xml chính. Vì vậy, đảo ngược thứ tự dựa trên những gì nên ghi đè những gì có thể giúp đỡ. Mặc dù tôi có một số khó khăn để hiểu câu hỏi, bất kỳ cơ hội để làm rõ?
Jordan Ramstad

@JordanRamstad, rõ ràng thứ tự params ở đây có cái gì đó để làm gì và ai được hiển thị / ghi đè, $ form-> loadFile ('xmlfile', false, false, true); , do đó tôi hỏi làm thế nào để thiết lập nó đúng cách.
Dan

Câu trả lời:


2

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 node: 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 thấp hơn để thao tác XML. Tôi không khuyên rằng 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ế

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.