アドオンの管理プロセス

この記事では、アドオンがインストール、アンインストール、有効化、無効化された際の挙動について詳しく説明します。

アドオンのリストを作成する

アドオンのリストは、CS-Cartの管理パネルのアドオンアドオン管理で利用できます。
以下はこのアドオンのリストの作成手順です。

  1. アドオンの予備リストが作成されます。この時点では、app/addonsのサブフォルダーはアドオンとみなされます。

  2. すべてのフォルダーから app/addons/[アドオンID]/addon.xmlをロードしようと試みます。
    addon.xmlをロードまたは解析できなかった場合、アドオンは無視されます。addon.xmlのXML解析エラーはエラー通知に表示されます。

  3. アドオンの名称が取得されます。addon.xmlのスキームversion3.0を使用している場合、アドオンの名前はvar/langs/ [言語コード]/addons/[アドオンID].poから取得されます。

  4. インストール済みのアドオンのデータは、データベースから取得されリストに追加されます。そのため、アドオンが既にインストールされている場合は、その名前と説明は変更されません。

アドオンのインストール時

  1. データベースの?:addonsテーブルは、アドオンの登録が無いことを確認するためにチェックされてます。

  2. アドオンのスキーマーはaddon.xmlからロードされます。

  3. アドオンがunmanagedとしてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみインストールすることが出来ます。

  4. アドオンのクラスの自動読み込みを有効にするには、アドオンのフォルダーをTygh::$app['class_loader']に追加します。

  5. アドオンの互換性がチェックされます。

📘

アドオンがサーバー環境またはCS-Cartのバージョンと互換性がない場合、エラーが表示され、インストールが中止されます。

  1. 他のアドオンへの依存関係がチェックされます。

📘

この時点では、競合するアドオンはチェックされず、アドオンの有効化の際にチェックが行われます。

  1. addon.xml<functions>セクションの関数for="before_installが実行されます。

📘

関数の実行の結果、データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。

  1. Registry::set('addons.' . $addon)にエントリが作成されます。disabledステータスとアドオンの優先順位は、そこに記録されています。

  2. addon.xml<queries>セクションのfor="installからクエリが実行されます。

📘

データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。

  1. addon.xml<settings>セクションで指定されたアドオンの設定がデータベースに作成されます。

📘

データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。

  1. ?:addonsおよび?:addon_descriptionsテーブルにエントリが作成されます。この時点ではアドオンのステータスは無効の状態です。

  2. POファイルから言語変数がインストールされます。

  3. テンプレートファイルが var/themes_repository から design/themes にコピーされます。

  4. アドオンの設定値はRegistry::set('addons.' . $addon)Registry::set('settings.' . $addon, $settings)に記録されます。

  5. 英語の言語変数は?:original_valuesテーブルに保存されます。

  6. 商品タブは[theme名] /templates/addons/[アドオンID]/blocks/product_tabs からインストールされます。

  7. addon.xml<functions>セクションのfor="installに記述された関数が実行されます。

📘

データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。

  1. addon.xml<status>セクションがactiveである場合、アドオンは直ちに有効化されます。

📘

アドオンのアクティベーションが中止されても、インストールは続行されます。ただし、その場合、アドオンはデフォルトで無効のままになります。

  1. app/addons/[アドオンID]/layouts.xmlからレイアウトがインポートされます。

  2. キャッシュが削除されます。

  3. デモデータがインストールされます。アドオンがCS-Cartのインストールと同時にインストールされ、[デモデータをインストール]のチェックボックスがオンになっている場合にのみ実行されます。

📘

このステップでデータベースエラーが発生すると、アドオンのインストールが中止され、アドオンがアンインストールされます。

アドオンのアンインストール時

  1. アドオンがunmanagedとしてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみアンインストールが可能です。

  2. アンインストールするアドオンの動作に必要な他のアドオンを見つけるためのチェックが実行されます。該当するアドオンが見つかった場合、アンインストール手順は中止され、メッセージが表示されます。

🚧

警告

次のアドオンがインストールされてないため、このアドオンをアンインストールできません:[対象のアドオン名]。

  1. addon.xml<functions>セクションに書かれているfor="uninstall"の関数が実行されます。

  2. ?:addonsテーブルと?:addon_descriptionsテーブルからアドオンのエントリー削除されます。

  3. アドオンの設定が削除されます。

  4. アドオンの言語変数が削除されます。

  5. addon.xml<queries>セクションのfor="uninstall"に書かれているクエリが実行されます。

  6. アドオンの製品タブが削除されます。

  7. アドオンのテンプレートが design/themes から削除されます。

  8. アドオンのレイアウトが元に戻ります。

  9. Registry::get('addons.' . $addon_name) は削除されます。

  10. アドオンが使用していたHookがRegistry::get('hooks')(登録済みのHookリスト)から削除されます。

  11. キャッシュが削除されます。

アドオンの有効化時

  1. アドオンのスキーマーはaddon.xmlからロードされます。

  2. アドオンがunmanagedとしてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみう有効化できます。

  3. 次のフックポイントの関数が実行されます。

<?php
fn_set_hook('update_addon_status_pre', $addon, $status, $show_notification, $on_install, $allow_unmanaged, $old_status, $scheme);
  1. すべての有効化されているアドオンがチェックされ、アドオンがそれらのいずれかの競合として定義されているかどうかが確認されます。

📘

競合するアドオンが見つかった場合、警告が表示され、アクティベーションは中止されます。

  1. 以下の関数が存在するか確認されます。
<?php
fn_settings_actions_addons_[アドオンID](){}

関数が存在する場合、次の引数で呼び出されます。
($new_status, $old_status, $on_install)

  1. このアドオンの競合として定義されているアドオンが、すべて無効になっているかどうか確認されます。

📘

競合するアドオンが有効化されている場合、警告が表示され、アクティベーションは中止されます。

  1. ?:addonsテーブルの当アドオンのstatusフィールドの値がAに変更されます。

  2. 以下の関数が存在するかどうかを確認するためにチェックが実行されます。

<?php
fn_settings_actions_addons_post_[アドオンID](){}

関数が存在する場合、次の引数でこの関数が呼び出されます:($new_status)

  1. 商品タブのステータスが更新されます:アドオンのproduct_tabsは有効のまま。

  2. このアドオンのステータスARegistry::set('addons.[アドオンID].status')に記録されます。

アドオンの無効時

  1. アドオンのスキーマーはaddon.xmlからロードされます。

  2. アドオンがunmanagedとしてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみ無効化できます。

  3. 次のフックポイントの関数が実行されます。

<?php
fn_set_hook('update_addon_status_pre', $addon, $status, $show_notification, $on_install, $allow_unmanaged, $old_status, $scheme);
  1. 以下の関数が存在するかどうかを確認するためにチェックが実行されます。
<?php
fn_settings_actions_addons_[アドオンID](){}

関数が存在する場合、次の引数で関数が呼び出されます。
($new_status, $old_status, $on_install)

  1. ?:addonsテーブル内の当アドオンのstatusフィールドの値がDに変更されます。

  2. 以下の関数が存在するかどうかを確認するためにチェックが実行されます。

<?php
  fn_settings_actions_addons_post_[アドオンID](){}

関数が存在する場合、次の引数で呼び出されます。($new_status)

  1. 商品タブのステータスが更新されます。アドオンのproduct_tabsが無効になります。

  2. Registry::set('addons.[アドオンID].status')にステータスDがセットされます。