ユーザーのアイテムリストに基づいてページ/フォームを生成する必要があります。現状のまま、ユーザーは、アイテムの説明がテキストであるアイテムのリスト、およびそれがtext
かlist
のフィールドタイプかを指定できます。 (チェックアウトできる機器のリストを想像してください。チェックするアイテムのリストは機器のタイプによって異なります。確かにいくつかの共有アイテムがありますが、それらは機器のタイプ、モデルによって異なりますなど)。そのため、models\forms\
フォルダーから既存のXMLファイルを単にロードして実行する代わりに、新しいフィールドセットと一連の新しいフィールドをその場で追加できます。
もしそうなら、
models\myform.php
$form = $this->loadForm('com_mycomponent.myform', 'myform', array('control' => 'jform', 'load_data' => $loadData));
controllers/myform.php
// Get the user data.
$data = JFactory::getApplication()->input->get('jform', array(), 'array');
// Validate the posted data.
$form = $model->getForm();
if (!$form) {
JError::raiseError(500, $model->getError());
return false;
}
...
// Validate the posted data.
$data = $model->validate($form, $data);
...
// Attempt to save the data.
$return = $model->save($data);
私はjForm
とメソッドsetField()
およびgetFieldset()
を使用してフィールドを設定および取得していましたが、Joomlaはエラーをスローしていました。 list
を追加しようとしたときに、JoomlaはXMLを解析できませんでしたuntilまで追加しましたoption_on="Yes"
およびoption_off="Yes"
。 (これらが何で/なぜ必要なのかわかりませんが、これらを使用すると、以下のコードが機能します)。
models\myform.php
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_mycomponent.mymodel', 'myform', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form)) {
return false;
}
$element = new SimpleXMLElement('<fieldset name="myFieldset">
<field name="myfield1" type="list"
label="My List"
default="2"
option_on="Yes"
option_off="Yes">
<option value="1">Low</option>
<option value="2">Normal</option>
<option value="3">High</option>
</field>
<field name="myfield2" type="text" label="My field 1" class="inputbox" size="30" />
<field name="myfield3" type="text" label="My field 2" class="inputbox" size="30" />
</fieldset>');
$form->setField($element);
return $form;
}
views/myview/tmpl/default.php
$this->form->getFieldset('myFieldset'), true)
// Loop through these results and display them accordingly
$myFieldset = $this->form->getFieldset('myFieldset');
if(count($myFieldset)){
foreach($myFieldset as $field) {
$field_name = $field->getAttribute('name');
echo $this->form->getLabel($field_name);
echo $this->form->getInput($field_name);
}
}
controllers/myview.php
// Get the user data.
$data = JFactory::getApplication()->input->get('jform', array(), 'array');
/* $data DOES contain my input fields*/
// The model/table doesn't contain columns for my custom fields, so the data to be saved has to be manipulated here to "go somewhere permanent".
// Validate the posted data.
$form = $model->getForm();
/* $form DOES contain my input fields*/