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


22

各#__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>

私は、フィールド名とアクションでこれを見て覚えていないでのparams、余分なフィールドを設定します。しかし、これは少し見苦しく、アップグレードのたびにメンテナンスが必要になります。私はこの種のものを機能させるのが好きですが、結果を得るために、代わりにユーザープロファイルプラグインアプローチを使用することを検討しましたか?
リッカルドゾル

私のデータは、チュートリアルでは、連絡先のためにある...、コンテンツのためのユーザーではありません
GDP

申し訳ありませんが、明確ではありませんでした。onContentAfterSaveイベントをフックして保存部分を処理するだけです
リッカルドゾル

本当にありがとうございました。私は一日の最高の部分のためにこれを整理しようとしています。私はJoomlaプラグインの開発を始めたばかりなので、サンプルを頼りに進めます。言語文字列ファイルについて確認することはできますか?これらはプラグインファイルまたは既存の言語フォルダーで使用できますか?またはそれは重要ではありませんか?

私は常に、Joomla拡張機能がファイルを置くのと同じ場所、つまりこの場合は/ languagesフォルダーにファイルを置きます。
GDP 14

回答:


19

AHA!moment-#__contentにはparams列がないため、プラグインattribsparams(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"

ここでこれについて質問できますか?または新しい質問を作成する必要がありますか?これに関連する?基本的に、記事の編集ビューに複数のタブを追加する方法を知る必要があります。forms / extra.xmlでは、1つのタブしか作成できないようです。xmlファイルをフィールドセットに分割するいくつかのバリエーションを試しましたが、うまくいきませんでした。1つのタブのみ。
ジョニーピクセル14年

これに関する新しい質問を作成し、関連する場合はこの質問/回答へのリンクを追加する必要があります。
Bogowoe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.