it-swarm-vi.com

Cách lưu trường tùy chỉnh trong các thành phần cốt lõi

Tôi đang cố gắng thêm một trường đơn giản vào mỗi mục #__content và tôi đã rất cẩn thận làm theo hướng dẫn tại Thêm trường tùy chỉnh vào thành phần cốt lõi , thay thế "nội dung" cho "liên hệ". Bây giờ tôi có một plugin có thể cài đặt bao gồm thành công tab/trường trên biểu mẫu chỉnh sửa Mục nội dung quản trị viên và hoạt động tuyệt vời, ngoại trừ tính năng "tiết kiệm" phiền phức đó.

Tham chiếu duy nhất để lưu là (một lần nữa, nội dung thay vì liên hệ):

Các trường bổ sung được tải từ tệp form/contact.xml trong thư mục plugin. Điều quan trọng là các trường này nằm trong thành phần trường có thuộc tính tên được đặt thành "params". Nếu bạn không đặt tên thuộc tính này, các trường sẽ xuất hiện trong trang quản trị nhưng các giá trị sẽ không được lưu.

Thực tế là lưu ý cảnh báo này tồn tại, gợi ý cho tôi rằng Joomla nên biết các trường ở đó và mã lõi xử lý nó, nhưng vì nó không lưu, tôi tự hỏi liệu có nên thêm một sự kiện nào nữa không.

Đây là lĩnh vực đơn giản tôi cần - vô hình với người dùng, nhưng dù sao cũng rất quan trọng và không nơi nào cần CCK để lưu trữ.
[.__.] Điều gì sai/thiếu đang ngăn trường tùy chỉnh được lưu?

Cập nhật: Hy vọng ngoài hy vọng rằng trường tùy chỉnh được lưu trữ trong cơ sở dữ liệu, tôi đã thêm một cột vào bảng #__content có cùng tên và đã thử - không gặp may.

gdp.php

class plgContentGdp extends JPlugin {
    protected $autoloadLanguage = true;
    function onContentPrepareForm($form, $data) {
        $app = JFactory::getApplication();
        $option = $app->input->get('option');
        switch($option) {
            case 'com_content':
                if ($app->isAdmin()) {
                    JForm::addFormPath(__DIR__ . '/forms');
                    $form->loadFile('content', false);
                }
                return true;
        }
        return true;
    }
}

/Forms/content.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="params" >
        <fieldset name="params" >
            <field
                name="content_myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

Kết xuất HTML (không có nhãn)

<div class="tab-pane active" id="attrib-params">
    <div class="control-group ">
        <div class="controls">
            <input
                type="text"
                value=""
                id="jform_params_content_myfield"
                name="jform[params][content_myfield]"
                class=""
                aria-invalid="false"
                >
        </div>
    </div>
</div>
22
GDP

AHA! Khoảnh khắc - #__content không còn có cột params, do đó, các điều chỉnh sau phải được thực hiện để plugin hoạt động với các thành phần/bảng có attribs thay vì params (mà chỉ xuất hiện ở #__content kể từ phiên bản 3.2):

  1. Thay đổi tên fields thành "attribs"
  2. Thay đổi tên fieldset thành tên duy nhất (Tôi đã sử dụng tên plugin)
  3. Thêm một chuỗi ngôn ngữ cho tab trên trang chỉnh sửa nội dung

/ Forms/content.xml

<form>
    <fields name="attribs" >
        <fieldset name="gdp" >
            <field
                name="myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

en-GB.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"
19
GDP