Joomla 2.5:自定义表单字段类型,用于呈现更多字段并支持表单会话

时间:2013-02-06 03:17:28

标签: joomla joomla2.5 joomla-extensions

在我的组件中,我想要一个具有自定义字段类型的管理表单。此自定义字段实际上加载另一个xml表单定义文件并呈现其中定义的这些字段。在自定义字段类中,如下所示:

<?php

class CustomField extends JFormField
{
    protected function getInput()
    {
        $form = JForm::getInstance("another_form", "path/to/xml");
        $field_names = array_keys($form->getFieldset());

        $html = "";
        foreach ($field_names as $name) {
            $field = $form->getField($name);
            $html .= "<li>" . $field->getLabel() . $field->getInput() . "</li>";
        }

        return $html;
    }

}

它渲染得很好,但是如何让这些额外的字段顺利地与管理表单集成,以便:

  • 提交后,额外的字段将自动填充最后的输入数据,如其他字段(会话集成)
  • 如果可能,额外字段将被视为管理表单的一部分,具有所有保存和加载功能(假设数据库表具有这些字段的相应列)

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,我建议完全避免使用外部文件并为您的配置定义标准元素。

如果您希望继续:

创建自定义元素时,使用name属性读取/写入值:即

protected function getInput() {
    return "<input type='hidden' name='$this->name' />";
}

因此,如果您希望Joomla处理值的存储,您需要添加一个像上面那样的输入(隐藏)来保存所有自定义输入值。您可以将两个脚本绑定到自定义元素:将自定义输入字段中的所有值打包为json字符串,并将隐藏字段的值设置为此json字符串(remove \ n!);另一个onload恢复值。确保在json中使用字段名称,这样,如果添加/更改xml结构,您的配置将继续存在。

但是这会产生一个丑陋的结果,因为组件的参数已经是json格式,你将在json中使用json进行组件配置。丑陋,但它不应该造成太多问题。