如何为Joomla子表单设置表单数据?

时间:2017-09-16 14:02:18

标签: joomla joomla3.0 subform

我正在尝试创建一个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;
}

我知道如果某个字段被调用nametitle我可以在$data之后更改$this->getItem()字段,例如$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;
}

修改 已经回答了我自己的问题。

1 个答案:

答案 0 :(得分:1)

没关系。休息了一段时间后我再次尝试了(再次检查表格输入并深呼吸)。

这是使用的格式:

$ sudo apt-get install clang-3.6
[sudo] password for xristina: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package clang-3.6
E: Couldn't find any package by regex 'clang-3.6'

这似乎有效!我现在正在$data->set('nameofsubformfield', [ 'nameofsubformfield0' => [ 'fieldwithinsubform' => 'value-of-field-within-subform' ] ]); 函数中使用它。只需在getItem之后循环并放置循环计数器代替零。有关某些上下文,请参阅下面的代码(函数位于父模型中)。

nameofsubformfield