web-dev-qa-db-ja.com

保存されていないサブフォームの複数のデータ

Joomlaサブフォームフィールドを、multiple = "true"をオンにして使用しようとしています(古いモーダルの繰り返し可能なメソッドを使用する代わりに)。

私の問題は、データがデータベースに保存されないことです。複数の例を読みましたが、何が悪いのかわかりません。

Multiple = "true"をオフにすると、サブフォームはデータをJSON文字列としてデータベースに正常に保存します。再びオンにすると、何を試しても保存されません。

私の問題は基本的にこれですが、解決策がなく、単純にコメントするだけの評判がありません: なぜ私のサブフォームフィールドデータが保存されないのですか?

私のコンポーネントXML:

<field name="list_links_url" 
        type="subform"
        label="Subform Field" 
        description="Subform Field Description"
        layout="joomla.form.field.subform.repeatable-table"
        multiple="true"
        formsource="/administrator/components/com_products/model/form/subforms/subform_list_links.xml" 
    />

サブフォームXML:

<?xml version="1.0" encoding="UTF-8"?>
<form>
        <field name="link"
            label="Link"
            type="text"
            description="Enter a URL" 
        />
</form>

FYI-Joomla 3.6.5とPHP 7.0.10の新しいインストール

どんな助けでも大歓迎です。

3
sigil

テーブルのバインド関数に、これを追加します。

if ( ( !empty( $array[ 'list_links_url' ] ) && ( is_array( $array[ 'list_links_url' ] ) ) ) ) {
            $this->_jsonEncode[] = "list_links_url";
        }
3
Stuart Steedman

私はこれが古い問題であることを知っていますが、私自身の研究に関するこの投稿に出くわしたので、私の解決策を共有したいと思います。残念ながら、この可能性が実装されたJoomlaのバージョンをたどることはできません。

対応するテーブルクラスの先頭に次の行を追加するだけです。この情報により、Joomlaコアテーブルクラスのbindメソッドは、指定されたフィールドをそれ自体で変換します。

protected $_jsonEncode = array('fieldname');

最終的にはスチュアートスティードマンの投稿と同じですが、コアバインドメソッドをオーバーライドする必要はありません。

2
Mark