我意识到,您可以通过在模块的etc/config.xml文件中在模块的eTC/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及向上,您不再需要使用MySQL4,因为添加了Multi-RDBMS支持。

要了解为什么不运行,您可以检查exception.log或system.log,也许Magento Coud找不到您的设置类。不过,创建安装脚本非常简单。

还要检查Alan Storm的指南: http://alanstorm.com/magento_setup_resources

其他提示

作为@erfan Saif,Magento自1.6以来获得了多RDBMS的支持。但是在现实世界中,我只知道MySQL后端。

重要的是要了解,Magento可以为不同的后端具有不同的安装/升级/数据脚本。如果您想要由MySQL支持但不受标准SQL支持的特殊索引类型,则可以实现mySQL4-install-1.0.0.0.php脚本。如果您的脚本是通用的,请使用install-1.0.0.php

如果您查看mage_core_model_resource_setup,我可以找到两个相互作用的东西:

  1. 您可以命名文件(%s-)%s-version。(PHP | SQL)
  2. 如果您有两个安装脚本(但是使用数据脚本,则它是相同的(App/Code/Core/Mage/Core/Model/resource/Setup.php:520))Magento更喜欢专用脚本,而不是通用脚本(作为一个会期望)

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),是时候进行调试了,我的两个标准错误是:

  1. 我忘记了将脚本添加到配置
  2. 我有目录中的目录 sql/ 忘记,例如 sql/install-1.0.0.php 代替 sql/my_module_setup/install-1.0.0.php

而且因为我认为它很合适,所以请小心您的变量名称: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

更新@Rouven-Rieker通过Twitter添加了数据和缺少mysql4-的添加在Magento 1.6中。如果您需要向后兼容,请小心!

如果您的脚本未运行,则还应检查模块版本是否匹配设置标记的版本。

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 

如果您的脚本不运行,请在core_resource和flush缓存中重置版本号。 Magento Caches版本提前看起来很不错,当启用所有缓存时,都会错过运行设置脚本。因为我们都可以使用缓存禁用,所以我们可能不会注意到这一点,但是如果启用缓存,则通过上传在实时网站上安装将无效。

许可以下: CC-BY-SA归因
scroll top