データを投稿するときに配列に同じフィールドを含める方法はありますか?クエリの出力に応じて動的にコンポーネントのタブを生成する必要があるため、そのファイルに具体的に入力することはできません。
models/forms/myform.xml
<fieldset name="myset"
<field name="language" type="language" class="hidden" ...>
<field name="sometext" type="text" ...>
/>
view/myview/tmpl/default.php
foreach ($langs as $lang)
{
/* html */
$this->form->setFieldAttribute('language', 'default', $lang['name']);
echo $this->form->renderFieldSet('myset');
/* html */
}
結果は次のようになります:
|英語|ドイツ語|フランス語|
各タブに言語とテキストフィールドがあります。ここでの問題は、投稿するときに最後の状態を投稿するだけで、それが「フランス語」の内容になることです。それで、これを修正してjoomlaに配列またはこの問題のより良い解決策を送信させる方法はありますか?
さらに、そのフィールドセット内の何かが関連しているため、JoomlaがそのデータをstdObjectに入れると言う方法はありますか?
同じ名前の複数のフィールド
multiple="true"
は、1つのフィールドが複数の値を持つことができることを意味します。同じ名前の複数のフィールドを持つことはできません。
複数のテキストエリアを取得するか、同じ名前で選択するには、 カスタムフォームフィールド を作成する必要があります。
フィールド名の最後に[]
を追加するだけなので、extend
JFormFieldTextarea
とJFormFieldList
を追加します。次に、既存のgetInput
関数をコピーして貼り付け、[]
の後に$this->name
を追加するだけです。
これらのクラスはlibraries/joomla/form/fields
、ファイルlist.php
およびtextarea.php
にあります。
グループ化
関連データをグループ化できる唯一の方法は、<fieldset></fieldset>
を<fields></fields>
に追加することです
Joomla!の例コアcom_content
article.xml:
<fields name="attribs" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
<fieldset name="basic" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
<field
name="show_title"
type="list"
class="chzn-color"
label="JGLOBAL_SHOW_TITLE_LABEL"
description="JGLOBAL_SHOW_TITLE_DESC">
<option value="">JGLOBAL_USE_GLOBAL</option>
<option value="1">JSHOW</option>
<option value="0">JHIDE</option>
</field>
</fields>
これで、出力は次のようになります。
<select id="jform_attribs_show_title" name="jform[attribs][show_title]" class="chzn-color chzn-done" style="display: none;">
<option value="" selected="selected">Use Global</option>
<option value="1">Show</option>
<option value="0">Hide</option>
</select>
このfields
のすべてのfieldset
はjform[attribs]
に含まれます。 <fields>
属性name
はarray
キーになります。
最終的には、このようなものになります。
<fields name="grouped">
<fieldset name="myset"
<field name="language" type="mycustomlanguage" class="hidden" ...>
<field name="sometext" type="mycustomtext" ...>
/>
</fields>
追加 multiple="true"
フィールドxml内
<field name="language" type="language" class="hidden" multiple="true" ...>