web-dev-qa-db-ja.com

コアコンポーネントにカスタムフィールドを保存する方法

各#__contentアイテムに単一の単純なフィールドを追加しようとしています。チュートリアルは コアコンポーネントへのカスタムフィールドの追加 で、「連絡先」を「コンテンツ」に置き換えて非常に慎重に実行しました。これで、管理コンテンツ項目の編集フォームにタブ/フィールドを正常に含めることができるインストール可能なプラグインができました。厄介な「保存」機能を除いて、見事に機能します。

Savingへの唯一の参照は(ここでも、連絡先ではなくコンテンツ)です。

追加のフィールドは、プラグインディレクトリのファイルforms/contact.xmlからロードされます。これらのフィールドは、nameプロパティが「params」に設定されたfields要素内にあることが重要です。このプロパティ名を設定しない場合、フィールドは管理サイトに表示されますが、値は保存されません。

この注意書きが存在するという事実は、Joomlaがフィールドが存在することを知っている必要があることを示唆しており、コアコードがそれを処理しますが、保存されないため、追加する必要がある別のイベントがあるかどうか疑問に思っています。

ここに私が必要とする単純なフィールドがあります-ユーザーには見えませんが、それでも重要であり、それを格納するためのCCKの必要性に近いものはありません。
カスタムフィールドが保存されない原因となっている何が問題/不足していますか?

更新:カスタムフィールドがデータベースに保存されたことを期待して、同じ名前の列を#__contentテーブルに追加して試してみましたが、うまくいきませんでした。

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>

レンダリングされたHTML(ラベルなし)

<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!モーメント-#__contentにparams列がなくなったため、attribsではなくparamsを使用してコンポーネント/テーブルを操作できるように、プラグインが次の調整を行う必要があります(これはv3.2の時点では#__contentのみのようです):

  1. fieldsの名前を「attribs」に変更します
  2. fieldsetの名前を一意の名前に変更します(私はプラグイン名を使用しました)
  3. コンテンツ編集ページのタブに言語文字列を追加します

/ 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