Joomla 自定义组件 - 加载表单文件时出错
Joomla Custom Component - Error loading form file
目前,我一直在尝试熟悉 Joomla 3.4.8 的自定义组件编程。因此我在我的 Raspberry Pi 2 上安装了一个新的 joomla 网站用于测试。一切正常。
然后我开始做'Developing an MVC Component' Tutorial provided by Joomla itself. Everything worked fine until the point 7 'Using the database'。
虽然这一点讨论的是数据库,但问题是让字段类型起作用。 IE。当我想添加一个新的菜单项(在管理员部分),并且我 select 自定义菜单项类型时,我收到一条错误消息,指出 "Error loading form file".
几天来我一直试图找出错误,但没有成功。到目前为止,我什至跟踪了引发此错误的 joomla 框架内的代码行。代码行在 /libraries/legacy/model/form.php
内(第 192 行)。在这一行你可以看到 $this->preprocessForm($form, $data);
。但是不知何故代码甚至没有进入这个方法,它只是抛出一个异常。
我将 $form
和 $data
变量与普通 运行 中的变量进行了比较,方法是在第 192 行之前添加以下语句(发现 here):
echo "<pre>"; print_r($arr); echo "</pre>";
与$form
变量没有任何区别。然而,$data
变量略有不同。不幸的是,我对这些概念还很陌生,所以我真的不知道哪里出了问题或在哪里寻找问题。
希望你们中有人能帮助我...
这里是 $data
变量触发错误时的输出:
Array
(
[parent_id] => 1
[level] =>
[lft] =>
[rgt] =>
[alias] =>
[id] =>
[menutype] => mainmenu
[title] =>
[note] =>
[path] =>
[link] => index.php?option=com_helloworld&view=helloworld
[type] => component
[published] =>
[component_id] => 10000
[checked_out] =>
[checked_out_time] =>
[browserNav] => 0
[access] =>
[img] =>
[template_style_id] => 0
[params] => Array
(
[menu-anchor_title] =>
[menu-anchor_css] =>
[menu_image] =>
[menu_text] => 1
[page_title] =>
[show_page_heading] =>
[page_heading] =>
[pageclass_sfx] =>
[menu-meta_description] =>
[menu-meta_keywords] =>
[robots] =>
[secure] => 0
)
[home] => 0
[language] =>
[client_id] =>
[request] => Array
(
[option] => com_helloworld
[view] => helloworld
)
[menuordering] => 0
[toggle_modules] => 1
)
好的!我终于解决了这个问题。不幸的是这是一个非常愚蠢的错误...
首先我注意到方法 preprocessForm($form, $data)
已经被子类覆盖了。因此我的 echo
语句不会被执行。这把我带到了 <joomla-root>/components/com_helloworld/views/helloworld/tmpl/default.xml
的 xml 文件被加载的地步。
不幸的是,它没有用。这是由于 xml 文件中的一个小错误。错误很简单也很愚蠢:
<fieldset name="request">
<field
name="id"
type="helloworld"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
/>
</field>
</fieldset>
我只是关闭了 field
标签两次,其中第二个关闭标签用于本教程的上一步。
非常愚蠢的错误,花了我好几个小时。至少我对 joomla 代码有了一些了解。希望这 post 可以避免其他人为这样一个小错误搜索无数小时。
目前,我一直在尝试熟悉 Joomla 3.4.8 的自定义组件编程。因此我在我的 Raspberry Pi 2 上安装了一个新的 joomla 网站用于测试。一切正常。
然后我开始做'Developing an MVC Component' Tutorial provided by Joomla itself. Everything worked fine until the point 7 'Using the database'。
虽然这一点讨论的是数据库,但问题是让字段类型起作用。 IE。当我想添加一个新的菜单项(在管理员部分),并且我 select 自定义菜单项类型时,我收到一条错误消息,指出 "Error loading form file".
几天来我一直试图找出错误,但没有成功。到目前为止,我什至跟踪了引发此错误的 joomla 框架内的代码行。代码行在 /libraries/legacy/model/form.php
内(第 192 行)。在这一行你可以看到 $this->preprocessForm($form, $data);
。但是不知何故代码甚至没有进入这个方法,它只是抛出一个异常。
我将 $form
和 $data
变量与普通 运行 中的变量进行了比较,方法是在第 192 行之前添加以下语句(发现 here):
echo "<pre>"; print_r($arr); echo "</pre>";
与$form
变量没有任何区别。然而,$data
变量略有不同。不幸的是,我对这些概念还很陌生,所以我真的不知道哪里出了问题或在哪里寻找问题。
希望你们中有人能帮助我...
这里是 $data
变量触发错误时的输出:
Array
(
[parent_id] => 1
[level] =>
[lft] =>
[rgt] =>
[alias] =>
[id] =>
[menutype] => mainmenu
[title] =>
[note] =>
[path] =>
[link] => index.php?option=com_helloworld&view=helloworld
[type] => component
[published] =>
[component_id] => 10000
[checked_out] =>
[checked_out_time] =>
[browserNav] => 0
[access] =>
[img] =>
[template_style_id] => 0
[params] => Array
(
[menu-anchor_title] =>
[menu-anchor_css] =>
[menu_image] =>
[menu_text] => 1
[page_title] =>
[show_page_heading] =>
[page_heading] =>
[pageclass_sfx] =>
[menu-meta_description] =>
[menu-meta_keywords] =>
[robots] =>
[secure] => 0
)
[home] => 0
[language] =>
[client_id] =>
[request] => Array
(
[option] => com_helloworld
[view] => helloworld
)
[menuordering] => 0
[toggle_modules] => 1
)
好的!我终于解决了这个问题。不幸的是这是一个非常愚蠢的错误...
首先我注意到方法 preprocessForm($form, $data)
已经被子类覆盖了。因此我的 echo
语句不会被执行。这把我带到了 <joomla-root>/components/com_helloworld/views/helloworld/tmpl/default.xml
的 xml 文件被加载的地步。
不幸的是,它没有用。这是由于 xml 文件中的一个小错误。错误很简单也很愚蠢:
<fieldset name="request">
<field
name="id"
type="helloworld"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
/>
</field>
</fieldset>
我只是关闭了 field
标签两次,其中第二个关闭标签用于本教程的上一步。
非常愚蠢的错误,花了我好几个小时。至少我对 joomla 代码有了一些了解。希望这 post 可以避免其他人为这样一个小错误搜索无数小时。