ですから、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
を使用する必要がありますか?その場合、私はその方法の使い方の手がかりがありません!
何か助けていただければ幸いです!ありがとう
わかりませんが、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);
ここで使用した解決策は、フィールドを既存のフィールドセットに追加して、代わりに複数のフィールドをグループに追加することを忘れることでした。
$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);
}
既存のフィールドセットに新しいフィールドを追加できないようです。次の形式で新しいフィールドセットを作成する必要があります
$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インスタンスにロードできます。