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 と呼ばれ、「コミュニティ」コード プール (コアまたはローカルではなく) にインストールされているとします。

app/code/community/Foo/Bar に移動します。通常、少なくとも etc および Block ディレクトリが表示されます。sql ディレクトリが表示された場合、このモジュールはデータベースを変更します。また、モジュールがバージョン管理されており、最初に特定のテーブルを作成してから変更する可能性があることも理解する必要があります。

例として、コアモジュールに移動して同じものを探すことができます。たとえば、Enterprise 1.12 を実行していて、app/code/core/Mage/Sendfriend/sql/sendfriend_setup に移動しました。

私が参照し て
ください : 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 に答える