我试图在后端组件默认视图(default.php)中加载自定义字段:
JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields');
$productType = JFormHelper::loadFieldType('ProductType',false);
$productTypeOptions = $productType->getOptions();
但是我得到了一个致命的错误:
Fatal error: Call to a member function children() on a non-object in xxx\libraries\joomla\form\fields\list.php on line 89
当我将此自定义字段加载到表单中时,一切都很完美。
有什么想法吗?
答案 0 :(得分:1)
确保您正在添加字段的正确路径
答案 1 :(得分:0)
在$productType->getOptions()
函数中,
尝试删除:
$options = array_merge(parent::getOptions(), $options);
答案 2 :(得分:0)
好吧,我试图扩展我的同事以上的想法,但它似乎是一个不合适的编辑,我把它放在这里:
这对我有用。在你的getOptions中,如果你有类似于这里找到的getOptions(http://docs.joomla.org/How_to_add_custom_filters_to_component_admin),你就会有这一行:
$ options = array_merge(parent :: getOptions(),$ options);
这是造成错误的那个。为什么?好吧,我不确定。如果您看到相关文件,您会发现:
foreach($ this-> element-> children()as $ option)
所以问题是你在模型父上调用了children(),似乎没有初始化。为什么需要array_merge?这里讨论(http://forum.joomla.org/viewtopic.php?f=626&t=782877)
我的解释更像是一个肮脏的盲人补丁,但希望它有助于前进。