コントローラー
CS-Cartのコントローラーは、2つの主要な実行可能なPHPファイル(admin.phpまたはindex.php)最初に呼び出し、プログラム機能を実装したPHPファイルをさらに連続して実行します。
1. index.phpまたはadmin.php-> 2. init.php-> 3. [controller_name] .php
CS-Cartでは、3番目のファイルはコントローラーと呼ばれます。 プログラムでのデータ処理はこのファイルで行われます。—データベースなどから必要なデータを抽出し、表示用データを作成します。
コントローラーへのパスとその名称は、メインの実行ファイル(index.php等)へ渡されたdispatchパラメーター(URLのパラメーター)の値に基づいて自動的にプログラムで定義されます。
dispatch パラメーターは以下のようなフォーマットになります
[controller_name].[mode_name]
(コントローラー名.モード名)
[controller_name]はコントローラーの名前です。[mode_name]ではコントローラーに定義されたモードが動作します。呼び出されるファイル名は
[controller_name].phpとなります。
管理パネル(admin.php)用のコントローラーは全てapp/controllers/backendディレクトリにあります。
ショップフロント(index.php) 用のコントローラーは、app/controllers/frontendディレクトリにあります。
コントローラーがディレクトリにない場合は、CS-Cartはapp/controllers/commonから起動を試みます。
「common」は同じコントローラーがショップフロントと管理者パネルの両方にサービスを提供する際に使用されます。提供される機能は両エリアで同じとなります。
コントローラーの接続は/core/fn.control.phpのfn_dispatch()関数により実行され、任意のパラメーターを受け入れず、下記のアクションを実行します:
dispatchパラメーターの整合性のチェックコントローラーにおける現在のユーザーのアクセス許可をチェック
必要に応じて安全なプロトコル(HTTPS)に置き換える
正しい順序で連続接続するために
precontrollersとpostcontrollers(アドオンまたはコアから)の実行順のリストを準備表示するためのテンプレートを自動的に定義
例
http://cscart_dir/admin.php?dispatch=products.manage この場合、実行ファイルはadmin.phpとなり、dispatch パラメーターは、products.manageとなっています。
呼び出されるコントローラーは/controllers/backend/products.phpです。
modeパラメーターであるmanage は実行しなければならないアクションとしてコントローラーファイル内に記述されています。
この例では、productsコントローラーのmanageモードによって、データベースから商品リストを抽出し、管理者エリアに商品のリストを表示します。
❗️ 注意
コントローラーの名称はユニークなものにしなければなりません。あるコントローラーがアドオンで定義され、その名前がすでに標準(コア)のコントローラーの名前と同じである場合、呼び出し時にエラーが発生します。
コントローラーの構造
各コントローラーは下記のロジカルブロックを含んでいます:
POSTリクエストの処理GETリクエストの処理コントローラ内でのみ使用されるローカル機能の定義
dispatchパラメーターの[mode_name]の部分はGETリクエスト処理の動作モードを設定するために使用されます。
POSTリクエスト
POSTリクエストは常にGETリクエストより先に処理されます。
fn_dispatch()関数にコントローラーから返ってくるブロックの最後に文字列が存在しなければなりません。
<?php
return array(CONTROLLER_STATUS_OK, "$index_script?dispatch=controller_name$suffix");CONTROLLER_STATUS_OKというパラメーターは、コントローラーの処理結果の成功ステータスを持つ定数が含まれます。2番目のパラメーターは、POSTリクエストの処理後、置き換え用のURIを含む文字列です。
例
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($mode == 'add') {
// ここに商品が追加された際の処理(コード)を入力します
}
return array(CONTROLLER_STATUS_OK, "$index_script?dispatch=products$suffix");
}GETリクエスト
GETリクエストの処理は常にPOSTリクエストの後ろに記述します。
例1
if ($mode == 'manage') {
// ここに"http://cscart_dir/admin.php?dispatch = products.manage"が実行された際の処理を書く
}ここではパラメーターmode (dispatch=controller.mode )の値をチェックされ、パラメーターがmanageと等しい場合に条件付きオペレーター(if文)内のコードが実行されます。
このコードはGET リクエストで実行されます。
GETモードの処理が終了すると、コントローラーは通常、以下の終了処理を実行します:
テンプレーターへコントローラーを移動する
GETメソッドによるリダイレクション追加アクション:
exit;無しでのコントローラーの実行とプログラムの完了
この場合では、コントローラーの処理は自動的にfn_dispatch()関数に移されます。
それがはっきりと定義されてない場合は、以下の例2と例3を行う必要があります。
テンプレーターにデータを渡すには、以下のように記述します:
<?php
$view->assign('template_var_name', $php_var_name);ここでのtemplate_var_nameは、テンプレートで$php_var_nameという変数の名前で利用できます。
例2
<?php
if ($mode == 'manage') {
$product_name = 'Product 1';
$product_description = 'Product description';
$view->assign('tpl_product_name', $product_name);
$view->assign('tpl_product_description', $product_description);
}このコードがコントローラで実行された2つの変数(tpl_product_name、tpl_product_description)がtemplaterに渡され、テンプレートでは$tpl_product_name、$tpl_product_descriptionという変数で利用できるようになります。
Functions
コントローラーファイル内に書かれた関数は、一般的な関数(function)の規則に従って定義します。特定のコントローラーファイルに書かれた関数を別のコントローラーで呼び出す必要がある場合は、アドオンのfunc.phpに記述する必要があります。
利用可能なデータ
コントローラでデータを操作するには、次の標準配列を使用する必要があります。
$_REQUEST-GETとPOSTリクエストが含まれます。この配列のすべての変数は特別な方法で処理されます。HTMLタグは削除されます。PHPによって自動的に追加されるスラッシュ(対応する設定が有効になっている場合)は削除されます。$_SESSION-セッションデータを格納する標準のPHP配列。Registry- プログラムの任意の場所からアクセスする必要があるデータ保持用の特別な静的クラスリポジトリ。
たとえば、起動時に読み取られるプログラムの構成パラメータは、Registry classに格納されます。このクラスの特徴は、このクラスに格納されているデータをキャッシュできることです。これにより、たとえば、このRegistry classのキャッシュに情報を保存することにより、ほとんど更新されない情報をデータベースに繰り返し要求することを回避できます。
Templaterへのデータの転送
コントローラーが実行され、制御がに戻された後、コントローラーはfn_dispatch()関数、プログラムの制御と、処理および表示が必要なテンプレートへのパスをテンプレート作成プログラムに転送します。
デフォルトでは、このコントローラーのテンプレートのパスは次のように自動的に定義されます。
管理パネル:/backend/templates/views/[controller_name]/[mode_name].tpl
ショップフロント:/ themes / [テーマ名] /templates/views/ [controller_name] / [mode_name] .tpl
例
http://cscart_dir/admin.php?dispatch=products.manage
表示されるテンプレートのパス:/backend/templates/views/products/manage.tpl
コンソールでコントローラーを実行する
バックエンドコントローラー:
• php /path/to/cart/admin.php --dispatch=controller.modeフロントエンドコントローラー:
• php /path/to/cart/index.php --dispatch=controller.mode共通(common)コントローラー:上記のコマンドのいずれか(共通コントローラーはadmin.phpおよびindex.php)で動作します。
コントローラーのパラメーターは次のようになります。
php admin.php --dispatch=controller.mode --param1=value --param2=value --param3[]=value1 --param3[]=value2 --param4[param5]=valueこれらのパラメーターは、通常のリクエストパラメーターとしてコントローラーに渡され、$_REQUEST配列で使用できます。コントローラーのモードがPOST要求を処理する場合は、パラメーターを指定した後、スクリプトに--p引数を設定します。
コンソールでコントローラーのモードを実施すると、そのモードで処理されたものが実行されます。コマンドの実行後にコマンドラインに何も表示されない場合は、次のような場合が考えられます:
コントローラは、
fn_set_progress、fn_echo、fn_set_notificationの場合は値を返しません。コマンドに間違ったモードが指定されていた
モードに指定されたパラメーターが正しくない(もしくはパラメーターが指定されていない)
コントローラーは一部のスクリプトでは実行できません。たとえば、バックエンドコントローラーは
index.phpを使用して実行することはできません。
最終更新