我试图在我的后端组件默认视图(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
当我将此自定义字段加载到表单中时,一切正常。
有什么想法吗?
确保您在字段中添加正确的路径
在您的
$productType->getOptions()
函数中,
尝试删除:$options = array_merge(parent::getOptions(), $options);
好吧,我试图扩展我的同事的上述想法,但它似乎是一个不合适的编辑,然后我把它放在这里:
这对我有用。在您的 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)
我的解释更像是一个肮脏的盲区,但希望它有助于前进。