アドオンの管理プロセス
この記事では、アドオンがインストール、アンインストール、有効化、無効化された際の挙動について詳しく説明します。
アドオンのリストを作成する
アドオンのリストは、CS-Cartの管理パネルのアドオン→アドオン管理で利用できます。
以下はこのアドオンのリストの作成手順です。
-
アドオンの予備リストが作成されます。この時点では、app/addonsのサブフォルダーはアドオンとみなされます。
-
すべてのフォルダーから app/addons/[アドオンID]/addon.xmlをロードしようと試みます。
addon.xmlをロードまたは解析できなかった場合、アドオンは無視されます。addon.xmlのXML解析エラーはエラー通知に表示されます。 -
アドオンの名称が取得されます。addon.xmlのスキームversion3.0を使用している場合、アドオンの名前はvar/langs/ [言語コード]/addons/[アドオンID].poから取得されます。
-
インストール済みのアドオンのデータは、データベースから取得されリストに追加されます。そのため、アドオンが既にインストールされている場合は、その名前と説明は変更されません。
アドオンのインストール時
-
データベースの
?:addons
テーブルは、アドオンの登録が無いことを確認するためにチェックされてます。 -
アドオンのスキーマーはaddon.xmlからロードされます。
-
アドオンが
unmanaged
としてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみインストールすることが出来ます。 -
アドオンのクラスの自動読み込みを有効にするには、アドオンのフォルダーを
Tygh::$app['class_loader']
に追加します。 -
アドオンの互換性がチェックされます。
アドオンがサーバー環境またはCS-Cartのバージョンと互換性がない場合、エラーが表示され、インストールが中止されます。
- 他のアドオンへの依存関係がチェックされます。
この時点では、競合するアドオンはチェックされず、アドオンの有効化の際にチェックが行われます。
- addon.xmlの
<functions>
セクションの関数for="before_install
が実行されます。
関数の実行の結果、データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。
-
Registry::set('addons.' . $addon)
にエントリが作成されます。disabled
ステータスとアドオンの優先順位は、そこに記録されています。 -
addon.xmlの
<queries>
セクションのfor="install
からクエリが実行されます。
データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。
- addon.xmlの
<settings>
セクションで指定されたアドオンの設定がデータベースに作成されます。
データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。
-
?:addons
および?:addon_descriptions
テーブルにエントリが作成されます。この時点ではアドオンのステータスは無効の状態です。 -
POファイルから言語変数がインストールされます。
-
テンプレートファイルが var/themes_repository から design/themes にコピーされます。
-
アドオンの設定値は
Registry::set('addons.' . $addon)
とRegistry::set('settings.' . $addon, $settings)
に記録されます。 -
英語の言語変数は
?:original_values
テーブルに保存されます。 -
商品タブは[theme名] /templates/addons/[アドオンID]/blocks/product_tabs からインストールされます。
-
addon.xmlの
<functions>
セクションのfor="install
に記述された関数が実行されます。
データベースエラーが発生した場合、アドオンのインストールは中止され、アドオンはアンインストールされます。
- addon.xmlの
<status>
セクションがactiveである場合、アドオンは直ちに有効化されます。
アドオンのアクティベーションが中止されても、インストールは続行されます。ただし、その場合、アドオンはデフォルトで無効のままになります。
-
app/addons/[アドオンID]/layouts.xmlからレイアウトがインポートされます。
-
キャッシュが削除されます。
-
デモデータがインストールされます。アドオンがCS-Cartのインストールと同時にインストールされ、[デモデータをインストール]のチェックボックスがオンになっている場合にのみ実行されます。
このステップでデータベースエラーが発生すると、アドオンのインストールが中止され、アドオンがアンインストールされます。
アドオンのアンインストール時
-
アドオンが
unmanaged
としてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみアンインストールが可能です。 -
アンインストールするアドオンの動作に必要な他のアドオンを見つけるためのチェックが実行されます。該当するアドオンが見つかった場合、アンインストール手順は中止され、メッセージが表示されます。
警告
次のアドオンがインストールされてないため、このアドオンをアンインストールできません:[対象のアドオン名]。
-
addon.xmlの
<functions>
セクションに書かれているfor="uninstall"
の関数が実行されます。 -
?:addons
テーブルと?:addon_descriptions
テーブルからアドオンのエントリー削除されます。 -
アドオンの設定が削除されます。
-
アドオンの言語変数が削除されます。
-
addon.xmlの
<queries>
セクションのfor="uninstall"
に書かれているクエリが実行されます。 -
アドオンの製品タブが削除されます。
-
アドオンのテンプレートが
design/themes
から削除されます。 -
アドオンのレイアウトが元に戻ります。
-
Registry::get('addons.' . $addon_name)
は削除されます。 -
アドオンが使用していたHookが
Registry::get('hooks')
(登録済みのHookリスト)から削除されます。 -
キャッシュが削除されます。
アドオンの有効化時
-
アドオンのスキーマーはaddon.xmlからロードされます。
-
アドオンが
unmanaged
としてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみう有効化できます。 -
次のフックポイントの関数が実行されます。
<?php
fn_set_hook('update_addon_status_pre', $addon, $status, $show_notification, $on_install, $allow_unmanaged, $old_status, $scheme);
- すべての有効化されているアドオンがチェックされ、アドオンがそれらのいずれかの競合として定義されているかどうかが確認されます。
競合するアドオンが見つかった場合、警告が表示され、アクティベーションは中止されます。
- 以下の関数が存在するか確認されます。
<?php
fn_settings_actions_addons_[アドオンID](){}
関数が存在する場合、次の引数で呼び出されます。
($new_status, $old_status, $on_install)
- このアドオンの競合として定義されているアドオンが、すべて無効になっているかどうか確認されます。
競合するアドオンが有効化されている場合、警告が表示され、アクティベーションは中止されます。
-
?:addons
テーブルの当アドオンのstatusフィールドの値がAに変更されます。 -
以下の関数が存在するかどうかを確認するためにチェックが実行されます。
<?php
fn_settings_actions_addons_post_[アドオンID](){}
関数が存在する場合、次の引数でこの関数が呼び出されます:($new_status)
-
商品タブのステータスが更新されます:アドオンの
product_tabs
は有効のまま。 -
このアドオンのステータス
A
はRegistry::set('addons.[アドオンID].status')
に記録されます。
アドオンの無効時
-
アドオンのスキーマーはaddon.xmlからロードされます。
-
アドオンが
unmanaged
としてマークされている場合、管理パネルのアドオンリストには表示されません。コンソール経由でのみ無効化できます。 -
次のフックポイントの関数が実行されます。
<?php
fn_set_hook('update_addon_status_pre', $addon, $status, $show_notification, $on_install, $allow_unmanaged, $old_status, $scheme);
- 以下の関数が存在するかどうかを確認するためにチェックが実行されます。
<?php
fn_settings_actions_addons_[アドオンID](){}
関数が存在する場合、次の引数で関数が呼び出されます。
($new_status, $old_status, $on_install)
-
?:addons
テーブル内の当アドオンのstatusフィールドの値がD
に変更されます。 -
以下の関数が存在するかどうかを確認するためにチェックが実行されます。
<?php
fn_settings_actions_addons_post_[アドオンID](){}
関数が存在する場合、次の引数で呼び出されます。($new_status)
-
商品タブのステータスが更新されます。アドオンの
product_tabs
が無効になります。 -
Registry::set('addons.[アドオンID].status')
にステータスD
がセットされます。
Updated over 3 years ago