Как использовать сценарии настройки для вашего модуля?

magento.stackexchange https://magento.stackexchange.com/questions/178

Вопрос

Я понимаю, что вы можете использовать сценарии настройки для своего собственного модуля, объявив их в файле 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 из-за добавленной поддержки с несколькими RDBMS.

Чтобы узнать, почему он не работает, вы можете проверить Exception.log или System.log, возможно, Magento Coud не находит свой класс настройки. Создание сценария установки довольно просто.

Также проверьте гид Алана Шторма: http://alanstorm.com/magento_setup_resources

Другие советы

Как @erfan Saif, Magento получил поддержку с несколькими RDBMS с 1.6. Но в реальном мире я знаю только бэкэнды MySQL.

Важно понимать, что Magento может иметь разные сценарии установки/обновления/данных для разных бэкэндов. Если вам нужен специальный тип индекса, который поддерживается MySQL, но не стандартным SQL, вы можете реализовать скрипт MySQL4-Install-1.0.0.php. Если ваш скрипт общий, используйте stall-1.0.0.php

Если вы посмотрите на mage_core_model_resource_setup, я смогу найти две межсвенные вещи:

  1. Вы можете назвать свои файлы (%s-)%s-версия. (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» на экране, я знаю, сценарий работает.

Я нагрузки Magento (вместо 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 и Clush Cache. Версии Magento Caches Поскольку мы все работаем с отключенным кэшем, мы можем не заметить это, но установка на сайте Live через загрузку не будет работать, если кеш будет включен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top