0

Magento (1.7.0.2 コミュニティ) ショップの展開の自動化に取り組んでいます。そのために、インストールされているすべてのモジュールを含む完全なコードベースを含む Git リポジトリを用意しています。

install.php空のデータベースに対して、展開時にコマンドライン ベースのインストーラー ( ) を実行します。しかし、モジュールの SQL 更新スクリプトは、インストーラーが完全に完了する前に実行されているようで、問題が発生します。

新しい (adminhtml) ユーザー ロールを作成する (カスタム) スクリプトがあり、このロールは Magento 自身のAdministratorsロールの前に作成されているようです。それは悪くありませんが、最初の管理者ユーザーは、管理者ではなく、カスタムロールの一部として作成されます。(インストーラーはparent_id = 1、ユーザーを作成するときに、1通常は管理者グループであるようなものを単に使用していると思われますが、この場合はカスタム グループです。)

そこで、私の質問は次のとおりです。インストーラーの実行中にアップグレード スクリプトが実行されないようにするにはどうすればよいですか (代わりに、最初のページの読み込み時に実行するようにします)、またはインストーラーにこのアップグレード スクリプト最初のユーザーとロールのセットアップは完了しましたか? それとも、まったく異なる解決策を見ますか?

役に立つ場合: これは、アップグレード スクリプトが基本的に行うことです。

<?php
$roleData = array(
        'role_name'   => 'My_Shiny_Role',
        'role_type'   => 'G',
);
$role = Mage::getModel('admin/role')->setData($roleData)->save();

$resources[0] = '__root__';
Mage::getModel("admin/rules")
    ->setRoleId($role->getId())
    ->setResources($resources)
    ->saveRel();

(クラスにカプセル化されているわけではなく、単純な PHP です。)

4

1 に答える 1

0

データベース更新機能の実行を無効にする「Magento Way」がおそらくありますが、次の方法でSQLで実行できます。

UPDATE
core_resource
SET 
version = CONCAT('9.', version),
data_version = CONCAT('9.', data_version);

次に、次のコマンドで再度有効にします。

UPDATE
core_resource
SET 
version = SUBSTR(version, 3),
data_version = SUBSTR(data_version, 3);
于 2013-03-26T20:10:55.890 に答える