web-dev-qa-db-ja.com

JForm :: setField / s-フィールドセットにフィールドを追加

ですから、JForm::setFieldを使用して、その場でフィールドを作成することに頭を悩ませています。しかし、いつものように、このメソッドの使用方法を説明するドキュメントはなく、最小限のAPI記述のみです。

オンザフライでフォームのフィールドセットにいくつかのフィールドを追加したい。 $groupはフィールドセット名ではないので、何をすべきかわかりません...?

以下を使用してフィールドを正常に追加しました:

$element = new SimpleXMLElement('<field name="onfly"
                                        type="text"
                                        label="onfly"
                                        description="onfly desc"
                                        class="inputbox"
                                        size="30"
                                        required="true" />');
$form->setField($element);

ただし、必要なフィールドセットに追加することはできません。 <fieldset>タグを$elementに追加できますが、そのフィールドセット内の既存のフィールドはすべて削除されます。

また、ループを使用して複数のフィールドを追加するので、代わりにJForm::setFieldsを使用する必要がありますか?その場合、私はその方法の使い方の手がかりがありません!

何か助けていただければ幸いです!ありがとう

4
doovers

わかりませんが、loadメソッドを試すことができます。

$element = '
            <field name="onfly"
            type="text"
            label="onfly"
            description="onfly desc"
            class="inputbox"
            size="30"
            required="true" />
            ';
// Define your fieldset here
$xpath = '//fieldset[@name="yourfieldset"]';

JForm->load($element, false, $xpath);
2
Dmitry Rekun

ここで使用した解決策は、フィールドを既存のフィールドセットに追加して、代わりに複数のフィールドをグループに追加することを忘れることでした。

$newfields = array(1, 2, 3, 4, 5)
$elements = array();
foreach ($newfields as $field) {
    $elements[] = new SimpleXMLElement('<field name="onfly_'.$field.'"
                                                type="text"
                                                label="onfly_'.$field.'"
                                                description="onfly desc"
                                                class="inputbox"
                                                size="30"
                                                required="true" />');
}
$form->setFields($elements, 'newGroup');

これにより、グループ内の各フィールドをループしてすべてをレンダリングできました

foreach ($this->form->getGroup('newGroup') as $field) { 
    echo $field->renderField($options);
}
1
doovers

既存のフィールドセットに新しいフィールドを追加できないようです。次の形式で新しいフィールドセットを作成する必要があります

$element = new SimpleXMLElement('<fieldset name="any_name">
                                    <field name="onfly"
                                          type="text"
                                          label="onfly"
                                          description="onfly desc"
                                          class="inputbox"
                                          size="30"
                                          required="true" />
                                  </fieldset>');
$form->setField($element);

同じfieldタグ内で複数のfieldsetタグを使用できます。

別の方法としては(確信はありません):xmlファイルを読み取り、フィールドセットを見つけて、それに子を追加できます。その後、新しいxml文字列を同じ$ formインスタンスにロードできます。

0
Gaurav