モジュールにセットアップスクリプトを使用する方法は?
-
16-10-2019 - |
質問
私は、あなたのモジュールのett/config.xmlファイルでそれらを宣言することにより、あなた自身のモジュールのセットアップスクリプトを使用できることを理解しています <global>
このようなスペース:
<resources>
<catalog_setup>
<setup>
<module>Mage_Catalog</module>
<class>Mage_Catalog_Model_Resource_Setup</class>
</setup>
</catalog_setup>
</resources>
一部のモジュールはファイルを使用します mysql4-install-0.0.1.php
一方、他の人は使用します install-0.0.1.php
. 。では、ファイル名の前でMySQL4をいつ使用し、いつ使用しませんか?
また、セットアップスクリプトが実行されていないときに何ができますか?
解決
Magento 1.6以降から、Multi-RDBMSサポートが追加されているため、MySQL4を使用する必要はもうありません。
それが実行されていない理由を確認するには、例外を確認できます。logまたはsystem.log、Magento Coudはセットアップクラスを見つけられないかもしれません。ただし、インストールスクリプトを作成するのは非常に簡単です。
また、Alan Stormのガイドを確認してください。 http://alanstorm.com/magento_setup_resources
他のヒント
@erfan saifとして、Magentoは1.6以降Multi-RDBMSサポートを受けました。しかし、現実の世界では、MySQLバックエンドのみを知っています。
Magentoが異なるバックエンドに対して異なるインストール/アップグレード/データスクリプトを持つことができることを理解することが重要です。 MySQLによってサポートされているが標準-SQLによってサポートされている特別なインデックスタイプが必要な場合は、MySQL4-Install-1.0.0.0.phpスクリプトを実装できます。スクリプトの場合は、install-1.0.0.phpを使用してください
mage_core_model_resource_setupをご覧ください。
- ファイル(%s - )%s-version(php | sql)に名前を付けることができます
- 2つのインストールスクリプトがある場合(ただし、データスクリプトがある場合、それは同じです(App/Code/Core/Mage/Core/Model/Resource/Setup.php:520))、Magentoは一般的なスクリプトよりも特殊なスクリプトを好みます(1つとして好みます期待するだろう)
app/code/core/mage/core/model/resource/setup.php:488
$regExpDb = sprintf('#^%s-(.*)\.(php|sql)$#i', $actionType);
$regExpType = sprintf('#^%s-%s-(.*)\.(php|sql)$#i', $resModel, $actionType);
while (false !== ($file = $handlerDir->read())) {
$matches = array();
if (preg_match($regExpDb, $file, $matches)) {
$dbFiles[$matches[1]] = $filesDir . DS . $file;
} else if (preg_match($regExpType, $file, $matches)) {
$typeFiles[$matches[1]] = $filesDir . DS . $file;
}
}
[...]
foreach ($typeFiles as $version => $file) {
$dbFiles[$version] = $file;
}
スクリプトに名前を付ける場合は、注意してください .sql
データベースに直接呼び出されます。
// app/code/core/Mage/Core/Model/Resource/Setup.php:621
switch ($fileType) {
case 'php':
$conn = $this->getConnection();
$result = include $fileName;
break;
case 'sql':
$sql = file_get_contents($fileName);
if (!empty($sql)) {
$result = $this->run($sql);
また、セットアップスクリプトが実行されていないときに何ができますか?
インストール/アップグレードファイルの先頭にダイ( 'SADF')を好むので、呼び出された場合に複数回実行できるので、設定したすべての変数が正しい場合、何かが変更される前に確認できます。データベース。画面に「SADF」が表示されている場合、スクリプトが実行されていることを知っています。
私は(SADFの代わりに)ロードします。デバッグの時です。2つの標準エラーは次のとおりです。
- スクリプトを構成に追加することを忘れました
- ディレクトリがあります
sql/
忘れられた、例えばsql/install-1.0.0.php
それ以外のsql/my_module_setup/install-1.0.0.php
そして、私はそれがここに収まると思うので、あなたの変数名に注意してください: http://blog.fabian-brechschmidt.de/articles/file-kills-setup-script.html
アップデート@Rouven-Riekerは、Magento 1.6にデータと欠落しているMySQL4が追加されたことをTwitter経由で追加しました。後方互換性が必要な場合は、注意してください!
スクリプトが実行されていない場合は、モジュールバージョンがセットアップスクリプトのバージョンと一致するかどうかを確認する必要があります。
<modules>
<Your_Module>
<version>0.0.1</version>
</Your_Module>
</modules>
スクリプトが実行されていない場合は、core_resourceでバージョン番号をリセットし、キャッシュをフラッシュします。 Magento Cachesバージョン事前に、すべてのキャッシュが有効になっているときにセットアップスクリプトを実行するのを見逃しているようです。私たちは皆、キャッシュが無効になっているため、これに気付かないかもしれませんが、キャッシュが有効になっていれば、アップロード経由でライブサイトにインストールすることは機能しません。