2

我一直在关注本教程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 小部件的行为是否会更改核心数据库表,如果确实如此,哪些表会被更改。

谢谢

4

2 回答 2

1

core_resource 表包含所有模块的列表,因此添加新模块将导致创建新行。

如果您的模块的 sql 文件夹中有任何内容,则该代码将根据您的模块版本运行。

如果不确切知道运行和更改了哪些代码,就很难知道您的具体问题是什么。

http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-6-magento-setup-resources

于 2012-11-15T16:10:15.870 回答
0

因此,如果您按照链接到的教程进行操作,我认为它不会更改任何数据库设置。

您可以通过以下方法判断模块是否会添加表或修改表列。

假设模块名为 Foo_Bar 并且它安装在“社区”代码池中(而不是核心或本地)。

导航到应用程序/代码/社区/Foo/Bar。您至少通常会在那里看到 etc 和 Block 目录。如果您看到 sql 目录,则此模块会更改 db。您还需要了解一个模块是版本化的,并且可能最初会创建某个表,然后对其进行修改。

例如,您可以转到任何核心模块并查找相同的模块。例如,我正在运行 Enterprise 1.12 并转到:app/code/core/Mage/Sendfriend/sql/sendfriend_setup

我看到:mysql4-upgrade-1.5.9.9-1.6.0.0.php
mysql4-upgrade-0.7.3-0.7.4.php
mysql4-upgrade-0.7.2-0.7.3.php
mysql4-upgrade-0.7.1- 0.7.2.php
mysql4-install-0.7.0.php
install-1.6.0.0.php

注意升级 xy 命名法。这就是 core_resource 跟踪的内容。

如果您想知道新模块的设置保存在哪里,那实际上是在 core_config_data 中。尝试这个:

SELECT * FROM core_config_data where path like '%foo%';

假设您在名为“foo”的管理员中有一些设置。

现在回到你的问题。这是一个常见的 php 错误。您正在对无法迭代的东西运行 foreach。在那之前的代码可能不会返回数组或集合或其他任何东西。

理想情况下,您应该始终使用检查您正在迭代的项目是否为空的语句来包装 foreach。

您还可以使用 @ 语句关闭显示错误或抑制该错误,这是一种不好的做法......

于 2012-11-16T01:05:24.630 回答