私はJoomla(3.x)コンポーネントを作成しようとしており、サブフォームの使用に苦労しています。たとえば、サブフォーム以外にも、サブフォームを使用するためのドキュメントはあまりないようです。 https://docs.joomla.org/Subform_form_field_typeJoomlaサブフォームのフォームデータを設定する方法は?
私のコンポーネントでは、子テーブルの親テーブルと関連するデータベース行が1つあります。
フォームは、JoomlaのフォームのXML構文を使用してその親テーブルの編集フォームを表示し、その編集フォームに複数のアイテム(子テーブルの関連する行)を含むサブフォームも表示することです。
私は親テーブルのフィールドを変更できますが、関連する子テーブルの行に移動することもできます(もちろん、親テーブルに関連付けられた各行を編集することはできますが、ひどいユーザーエクスペリエンス)。あるいは、私はこの事に間違った方法で近づいていますか?
私はサブフォームの実装方法と表示方法を知っており、親テーブルフィールドを表示し、それらのフィールドに適切なデータを設定する方法も知っています。しかし、親フォームを使用してサブフォームを作成または参照するにはどうすればよいですか?
私はこの機能をコンポーネントモデル(から継承)に入れました。
protected function loadFormData()
{
$data = JFactory::getApplication()->getUserState('com_mycomp.edit.parent.data', array());
if (empty($data))
{
$data = $this->getItem();
// how to refer to subform fields inside $data?
}
return $data;
}
フィールドがname
またはtitle
呼び出された場合、私はちょうど例えば、$this->getItem()
後$data
オブジェクトを変更することができます知っています$this->set('name', 'John Doe')
。
subform
のフィールドにはname
という属性があり、books
という文字が1つ以上挿入されていますが、どのように参照すればいいですか?私はさまざまな形式のドット構文を試しました。たとえば、$data->set('books.1.childfield')
または$data->set('books.pages1.childfield')
です。しかし、それは正しい形式を参照していないようです。
同じモデルファイルにはもちろんgetForm
の機能がありますが、サブフォームを含む親フォームとは独立してロードする必要はありませんか?
public function getForm($data = array(), $loadData = true)
{
$app = JFactory::getApplication();
$form = $this->loadForm('com_mycomp.parent', 'parent', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
EDIT: はすでに自分の質問に答えました。