我一直在关注本教程http://www.magentocommerce.com/knowledge-base/entry/tutorial-creating-a-magento-widget-part-1,以创建一个Magento小部件作为我正在处理的扩展的一部分。
虽然小部件已成功创建并按我的意愿工作,但我更改了代码并开始出现以下错误
Warning: Invalid argument supplied for foreach() in app/code/core/Mage/Widget/Model/Widget/Instance.php on line 502
当我更改代码时,错误仍然存在。但是,当我将所有我的模块复制到新的Magento安装时,则不会出现错误。
虽然我的窗口小部件没有显式使用数据库,但是有人知道安装和卸载Magento窗口小部件的行为是否对核心数据库表进行了更改,如果是,则更改了哪些表。
由于
答案 0 :(得分:1)
core_resource表包含所有模块的列表,因此添加新模块将导致创建新行。
如果模块的sql文件夹中有任何内容,将根据模块的版本运行该代码。
如果不确切知道运行和更改了哪些代码,很难知道您的具体问题是什么。
http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-6-magento-setup-resources
答案 1 :(得分:0)
因此,如果你按照教程链接到我,我认为它没有改变任何数据库设置。
您可以通过以下方法判断模块是否会添加表或修改表列。
假设模块名为Foo_Bar,它安装在“社区”代码池中(而不是核心或本地)。
导航到app / code / community / Foo / Bar。您至少会在那里看到etc和Block目录。 如果您看到一个sql目录,那么此模块将进行db更改。您还需要了解模块的版本,最初可以创建某个表,然后对其进行修改。
举例来说,您可以访问任何核心模块并查找相同内容。例如,我正在运行Enterprise 1.12并转到: 应用程序/代码/核心/法师/ Sendfriend / SQL / sendfriend_setup
我明白了:
mysql4升级,1.5.9.9-1.6.0.0.php
mysql4升级,0.7.3-0.7.4.php
mysql4升级,0.7.2-0.7.3.php
mysql4升级,0.7.1-0.7.2.php
mysql4安装,0.7.0.php
install-1.6.0.0.php
请注意升级x-y命名法。这就是core_resource跟踪的内容。
如果您想知道新模块的设置保存在哪里,那实际上是在core_config_data中。试试这个:
SELECT * FROM core_config_data where path like '%foo%';
假设您在管理员中有一些名为“foo”的设置。
现在回到你的问题。这是一个常见的PHP错误。你正在运行一个无法迭代的东西。在此之前的代码可能不会返回数组或集合或其他任何东西。
理想情况下,您应始终使用一个语句来包装foreach,该语句检查您正在迭代的项目是否为空。
您也可以使用@语句关闭显示错误或抑制错误,这是一种不好的做法......