【发布时间】:2018-02-25 12:58:20
【问题描述】:
我正在尝试创建一个 Joomla (3.x) 组件并努力使用子表单。除了例如,似乎没有太多关于使用子表单的文档。 https://docs.joomla.org/Subform_form_field_type
对于我的组件,我有一个父表和来自子表的一些关联数据库行。
这个想法是使用 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;
}
编辑: 已经回答了我自己的问题。
【问题讨论】: