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


22

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 các 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 không cho 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>

Tôi nhớ đã thấy điều này trong hành động với tên trường KHÔNG được đặt thành params và trường thêm; nhưng đó là một chút xấu xí và sẽ cần một số bảo trì sau mỗi lần nâng cấp. Nhiều như tôi muốn làm cho loại công việc này hoạt động, để có được kết quả, bạn đã xem xét sử dụng cách tiếp cận plugin hồ sơ người dùng thay thế chưa?
Riccardo Zorn

Dữ liệu của tôi là dành cho nội dung, không phải người dùng ... chỉ có hướng dẫn dành cho người liên hệ
GDP

Xin lỗi tôi không rõ, chỉ cần móc sự kiện onContentAfterSave và xử lý phần tiết kiệm
Riccardo Zorn

Cám ơn bạn rất nhiều về điều này. Tôi đã cố gắng sắp xếp điều này cho phần tốt nhất của một ngày. Tôi còn khá mới đối với việc phát triển plugin Joomla vì vậy tôi dựa vào các ví dụ để đưa tôi đi. Tôi chỉ có thể xác nhận về các tệp chuỗi ngôn ngữ - chúng có đi cùng với các tệp plugin hoặc trong thư mục ngôn ngữ hiện tại không? hay nó không quan trọng?

Tôi luôn đặt các tệp ở cùng một nơi mà một phần mở rộng Joomla sẽ đặt chúng, tức là thư mục / ngôn ngữ trong trường hợp này.
GDP

Câu trả lời:


19

AHA! Khoảnh khắc - #__content không còn paramscột, 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 attribsthay vì params(chỉ xuất hiện là #__content kể từ v3.2):

  1. Thay đổi fieldstên thành "attribs"
  2. Thay đổi fieldsettên thành một cái gì đó độc đáo (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"

Tôi có thể hỏi một câu hỏi về điều này ở đây? hay tôi nên tạo một câu hỏi mới? Nó liên quan đến cái này? Về cơ bản tôi cần biết làm thế nào để thêm nhiều hơn một tab vào chế độ xem chỉnh sửa bài viết. Có vẻ như các biểu mẫu / tệp ngoại vi chỉ cho phép bạn tạo một tab. Tôi đã thử một vài biến thể của việc chia tệp xml thành các trường nhưng không gặp may. Chỉ có một tab.
Jonnypixel

Bạn nên tạo một câu hỏi mới về điều này và thêm một liên kết đến câu hỏi / câu trả lời này nếu có liên quan.
Bogowoe
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.