web-dev-qa-db-ja.com

3.xフォーム配列?

データを投稿するときに配列に同じフィールドを含める方法はありますか?クエリの出力に応じて動的にコンポーネントのタブを生成する必要があるため、そのファイルに具体的に入力することはできません。

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に入れると言う方法はありますか?

1
Vic

同じ名前の複数のフィールド

multiple="true"は、1つのフィールドが複数の値を持つことができることを意味します。同じ名前の複数のフィールドを持つことはできません。

複数のテキストエリアを取得するか、同じ名前で選択するには、 カスタムフォームフィールド を作成する必要があります。

フィールド名の最後に[]を追加するだけなので、extendJFormFieldTextareaJFormFieldListを追加します。次に、既存の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のすべてのfieldsetjform[attribs]に含まれます。 <fields>属性namearrayキーになります。

最終的には、このようなものになります。

<fields name="grouped">
  <fieldset name="myset"
      <field name="language" type="mycustomlanguage" class="hidden" ...>
      <field name="sometext" type="mycustomtext" ...>
  />
</fields>
0
Rene Korss

追加 multiple="true"フィールドxml内

<field name="language" type="language" class="hidden" multiple="true" ...>

1
Gaurav