我試圖創建一個Joomla(3.x)組件,並努力使用子窗體。除了例如使用子表單之外,似乎沒有太多的文檔。 https://docs.joomla.org/Subform_form_field_type如何爲Joomla子表單設置表單數據?
對於我的組件我有一個父表和子表的一些相關的數據庫行。
的想法是,以顯示使用Joomla的XML語法形式,並在編輯表單還顯示有多個項目子窗體(從子表中的相關行)是父表的編輯表單。
我想能夠修改父表字段,但也可以在關聯的子錶行(一個可以編輯每個與父表單獨關聯的行,但我猜這將是一個糟糕的用戶體驗)。還是我以錯誤的方式接近這件事?
現在,我知道如何實現/顯示子窗體,也知道如何顯示父表的字段和填充用正確的數據這些領域。但是,如何使用父窗體填充或引用子窗體?
我有我的組件模型,這裏面的功能(從JModelAdmin
繼承)。
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
,我想插入一行或多行,我將如何引用它?我試過各種形式的點語法,例如:$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;
}
編輯: 已經回答了我的問題。