{"__v":1,"_id":"5544d76bd8833c0d00582833","category":{"__v":1,"_id":"5544d76ad8833c0d00582802","pages":["5544d76bd8833c0d00582832","5544d76bd8833c0d00582833","5544d76bd8833c0d00582834","5544d76bd8833c0d00582835","5544d76bd8833c0d00582836","5544d76bd8833c0d00582837","5544d76bd8833c0d00582838","5544d76bd8833c0d00582839","5544d76bd8833c0d0058283a","5544d76bd8833c0d0058283b","5544d76bd8833c0d0058283c","5544d76bd8833c0d0058283d"],"project":"55227389b4a0de0d00de7e28","version":"5544d76ad8833c0d00582801","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-04-06T11:52:42.014Z","from_sync":false,"order":0,"slug":"_","title":"コア"},"project":"55227389b4a0de0d00de7e28","user":"551952063414b40d00e470cb","version":{"__v":1,"_id":"5544d76ad8833c0d00582801","forked_from":"55227389b4a0de0d00de7e2b","project":"55227389b4a0de0d00de7e28","createdAt":"2015-05-02T13:55:54.059Z","releaseDate":"2015-05-02T13:55:54.059Z","categories":["5544d76ad8833c0d00582802","5544d76ad8833c0d00582803","5544d76ad8833c0d00582804","5544d76ad8833c0d00582805","5544d76ad8833c0d00582806"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"4.0.0","version":"4.0"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-04-06T12:00:44.529Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"データ処理の流れ\"\n}\n[/block]\n**1. index.php or admin.php -> 2. init.php -> 3. [controller_name].php**\n\n3番目のCS-Cartのファイル`controller_name.php`はコントローラーと呼ばれます。\nプログラムでのデータ処理はこのファイルで行われます ー データベースやデータ処理、計算、換算などから必要なデータを引き出し、表示用データを作成します。\n\nコントローラーへのパスとその名称は、メインの実行ファイル(index.php等)へ渡されたdispatch パラメーター(URLのパラメーター)の値に基づいて自動的にプログラムで定義されます。\n\n**例**  \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"http://yourstore.com/index.php?dispatch=controller_name.mode_name\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\ndispatch パラメーターは以下のようなフォーマットになります:  \n`[controller_name].[mode_name]` \n(コントローラー名.モード名)\n\n- [controller_name] はcontrollerの名前です。  \n- [mode_name] ではコントローラーに定義されたモードが動作します。\n- 呼び出されるファイル名は`[controller_name].php`となります。\n\n---\n\n- 管理パネル(admin.php)用のコントローラーは全て***app/controllers/backend***ディレクトリにあります。\n\n- ショップフロント(index.php) 用のものは、***app/controllers/frontend***ディレクトリにあります。\n\n---\n\nコントローラーがディレクトリにない場合は、CS-Cartは***app/controllers/common***から起動を試みます。\n\nこれは同じコントローラーがショップフロントと管理者パネルの両方にサービスを提供する際に行われます。提供される機能は両エリアで同じとなります。\n\n---\n\nコントローラーの接続は***/core/fn.control.php***の***fn_dispatch()***関数により実行され、任意のパラメーターを受け入れず、下記のメインのアクションを実行します:\n\n- dispatch パラメーターを正確にチェック\n- コントローラーにおける現在のユーザーのアクセス許可をチェック\n- 必要に応じて安全なプロトコル(HTTPS)に置き換える\n- 正しい順序で連続接続するためにprecontrollers と postcontrollers(アドオンまたはコアから)の順序つきリストを準備\n- 表示するためのテンプレートを自動的に定義\n\n### 例  \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"http://cscart_dir/admin.php?dispatch=products.manage\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\nこの場合、実行ファイルはadmin.phpとなり、dispatch パラメーターは、***products.manage***となっています。\n\nコントローラーは*/controllers/backend/products.php*です。\n\nモードパラメーターである`manage` は実行しなければならないアクションとしてコントローラーファイル内に書かれています。\n\nこの例では、productsコントローラーの`manage`(モード) によって、データベースから商品リストを抽出し、管理者エリアに商品リストを表示します。\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"body\": \"コントローラーの名称はユニークなものにしなければなりません。\",\n  \"title\": \"注意\"\n}\n[/block]\n\nあるコントローラーがアドオンで定義され、その名前がすでに標準(コア)コントローラーの名前と一致している場合、呼び出し時にエラーが発生します。\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"コントローラーの構造\"\n}\n[/block]\n各コントローラーは下記のロジカルブロックを含んでいます:\n\n- `POST` リクエストの処理\n- `GET` リクエストの処理\n- コントローラー内でのみ使用されるローカル機能の定義\n\nパラメーター`dispatch` の`[mode_name]` の部分は`GET`リクエスト処理の動作モードを設定するために使用されます。\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"POST リクエスト\"\n}\n[/block]\n`POST` リクエストは常に`GET`リクエストより先に処理されます。\n関数`fn_dispatch()` にコントローラーから帰ってくるブロックの最後に文字列が存在しなければならない。\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\nreturn array(CONTROLLER_STATUS_OK, \\\"$index_script?dispatch=controller_name$suffix\\\");\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nパラメーター:`CONTROLLER_STATUS_OK`はコントローラーパフォーマンスの成功ステータスを持つ定数を含みます。\n\n###例:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n\\nif ($_SERVER['REQUEST_METHOD'] == 'POST') {\\n\\n    if ($mode == 'add') {\\n        // ここに商品が追加された際の処理を書く\\n    }\\n    return array(CONTROLLER_STATUS_OK, \\\"$index_script?dispatch=products$suffix\\\");\\n}\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"GET リクエスト\"\n}\n[/block]\n`GET`リクエストの処理セクションは常に`POST`リクエストの後にあります。\n\n###例1:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\nif ($mode == 'manage') {\\n     //ここにhttp://cscart_dir/admin.php?dispatch=products.manageが表示された際の処理を書く\\n}\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nここではパラメーター`mode` (*dispatch=controller.mode* )の値をチェックするコードの一部が与えられ、値が`manage` と等しい時、条件付きオペレーター内のコードが実行されます。\n\nこのコードは`GET` リクエストで実行されます。\n`GET`モードオペレーションが終了すると、コントローラーは通常、以下の終了アクションを行います:\n\n- ディスプレイサブシステムやテンプレーターへコントローラーの移動\n- `GET`メソッドによるリダイレクション\n- 追加アクション: `exit;` 無しでのコントローラーの実行とプログラムの完了\n\nこの場合では、コントローラーは自動的にファンクション `fn_dispatch()` に移されます。\nそれがはっきりと定義されてない場合は、下の例2と例3を行う必要があります。\n\nテンプレーターにデータを移すには、以下の構造が使用されます:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n$view->assign('template_var_name', $php_var_name);\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nここで、`template_var_name` はテンプレートで使用可能な変数の名前を示しており、`$php_var_name`は変数のコンテンツを示しています。\n\n###例2:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\nif ($mode == 'manage') {\\n    $product_name = 'Product 1';\\n    $product_description = 'Product description';\\n    $view->assign('tpl_product_name', $product_name);\\n    $view->assign('tpl_product_description', $product_description);\\n}\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nこのコードはコントローラーで実行された後、テンプレーターに移され、2つの変数が利用できるようになります:`$tpl_product_name` と`$tpl_product_description`\n\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Functions\"\n}\n[/block]\nコントローラー内の関数は一般的なファンクションフォーマッティングの規則に従って定義されています。コントローラーの関数が必要とされる場合、他のコントローラーが呼び出されます。\n\nこのような関数はプログラムのコアやアドオンに書かれている必要があります。\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"利用可能なデータ\"\n}\n[/block]\nコントローラー内のプログラムデータを動かすには、以下にある標準の配列を使用する必要があります:\n\n- `$_REQUEST` -`GET` リクエストと`POST` リクエストからの全ての変数を含むこの配列のすべての変数は特別な方法で処理されます:HTMLタグは削除され、(設定が有効になっている場合)PHPで自動的に追加されたスラッシュは削除されます。\n\n- `$_SESSION` -セッションデータを記憶している標準的なPHP配列\n\n- `Registry` -a special static class-プログラムの任意の場所からアクセス出来るデータのリポジトリ。\n\n例えば、起動時に読み込まれたプログラムの構成パラメーターは**Registry**クラスで保持されます。このクラスの特徴は、全てのデータがキャッシュされることです。\n\n例えば、`Registry`クラスのキャッシュに保持することにより、めったに更新されないデータのデータベースへの重複リクエストを避けることが出来ます。\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"コントローラーのデータをテンプレーターへ転送\"\n}\n[/block]\nコントローラーが実行された後、コントロールは`fn_dispatch()` に返されます。\nプログラムのコントロールと処理され表示されるべきテンプレートへのパスを転送します。\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"これはコントローラーで指定することができます。\\nテンプレーターにコントロールを転送する代わりに、スクリプトの実行を終了するか他のアドレスにリダイレクトする必要があります。\",\n  \"title\": \"ヒント\"\n}\n[/block]\n以下のようにデフォルトではこのテンプレートへのパスが自動的に定義されています\n\n- 管理パネル: */backend/templates/views/[controller_name]/[mode_name].tpl*\n- 顧客エリア: */themes/[theme name]/templates/views/[controller_name]/[mode_name].tpl*\n\n###例:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"http://cscart_dir/admin.php?dispatch=products.manage\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n上記の場合のテンプレートへのパス:*/backend/templates/views/products/manage.tpl*","excerpt":"","slug":"controllers","type":"basic","title":"コントローラー"}

コントローラー


[block:api-header] { "type": "basic", "title": "データ処理の流れ" } [/block] **1. index.php or admin.php -> 2. init.php -> 3. [controller_name].php** 3番目のCS-Cartのファイル`controller_name.php`はコントローラーと呼ばれます。 プログラムでのデータ処理はこのファイルで行われます ー データベースやデータ処理、計算、換算などから必要なデータを引き出し、表示用データを作成します。 コントローラーへのパスとその名称は、メインの実行ファイル(index.php等)へ渡されたdispatch パラメーター(URLのパラメーター)の値に基づいて自動的にプログラムで定義されます。 **例** [block:code] { "codes": [ { "code": "http://yourstore.com/index.php?dispatch=controller_name.mode_name", "language": "http" } ] } [/block] dispatch パラメーターは以下のようなフォーマットになります: `[controller_name].[mode_name]` (コントローラー名.モード名) - [controller_name] はcontrollerの名前です。 - [mode_name] ではコントローラーに定義されたモードが動作します。 - 呼び出されるファイル名は`[controller_name].php`となります。 --- - 管理パネル(admin.php)用のコントローラーは全て***app/controllers/backend***ディレクトリにあります。 - ショップフロント(index.php) 用のものは、***app/controllers/frontend***ディレクトリにあります。 --- コントローラーがディレクトリにない場合は、CS-Cartは***app/controllers/common***から起動を試みます。 これは同じコントローラーがショップフロントと管理者パネルの両方にサービスを提供する際に行われます。提供される機能は両エリアで同じとなります。 --- コントローラーの接続は***/core/fn.control.php***の***fn_dispatch()***関数により実行され、任意のパラメーターを受け入れず、下記のメインのアクションを実行します: - dispatch パラメーターを正確にチェック - コントローラーにおける現在のユーザーのアクセス許可をチェック - 必要に応じて安全なプロトコル(HTTPS)に置き換える - 正しい順序で連続接続するためにprecontrollers と postcontrollers(アドオンまたはコアから)の順序つきリストを準備 - 表示するためのテンプレートを自動的に定義 ### 例 [block:code] { "codes": [ { "code": "http://cscart_dir/admin.php?dispatch=products.manage", "language": "http" } ] } [/block] この場合、実行ファイルはadmin.phpとなり、dispatch パラメーターは、***products.manage***となっています。 コントローラーは*/controllers/backend/products.php*です。 モードパラメーターである`manage` は実行しなければならないアクションとしてコントローラーファイル内に書かれています。 この例では、productsコントローラーの`manage`(モード) によって、データベースから商品リストを抽出し、管理者エリアに商品リストを表示します。 [block:callout] { "type": "danger", "body": "コントローラーの名称はユニークなものにしなければなりません。", "title": "注意" } [/block] あるコントローラーがアドオンで定義され、その名前がすでに標準(コア)コントローラーの名前と一致している場合、呼び出し時にエラーが発生します。 [block:api-header] { "type": "basic", "title": "コントローラーの構造" } [/block] 各コントローラーは下記のロジカルブロックを含んでいます: - `POST` リクエストの処理 - `GET` リクエストの処理 - コントローラー内でのみ使用されるローカル機能の定義 パラメーター`dispatch` の`[mode_name]` の部分は`GET`リクエスト処理の動作モードを設定するために使用されます。 [block:api-header] { "type": "basic", "title": "POST リクエスト" } [/block] `POST` リクエストは常に`GET`リクエストより先に処理されます。 関数`fn_dispatch()` にコントローラーから帰ってくるブロックの最後に文字列が存在しなければならない。 [block:code] { "codes": [ { "code": "<?php\nreturn array(CONTROLLER_STATUS_OK, \"$index_script?dispatch=controller_name$suffix\");", "language": "php" } ] } [/block] パラメーター:`CONTROLLER_STATUS_OK`はコントローラーパフォーマンスの成功ステータスを持つ定数を含みます。 ###例: [block:code] { "codes": [ { "code": "<?php\n\nif ($_SERVER['REQUEST_METHOD'] == 'POST') {\n\n if ($mode == 'add') {\n // ここに商品が追加された際の処理を書く\n }\n return array(CONTROLLER_STATUS_OK, \"$index_script?dispatch=products$suffix\");\n}", "language": "php" } ] } [/block] [block:api-header] { "type": "basic", "title": "GET リクエスト" } [/block] `GET`リクエストの処理セクションは常に`POST`リクエストの後にあります。 ###例1: [block:code] { "codes": [ { "code": "<?php\nif ($mode == 'manage') {\n //ここにhttp://cscart_dir/admin.php?dispatch=products.manageが表示された際の処理を書く\n}", "language": "php" } ] } [/block] ここではパラメーター`mode` (*dispatch=controller.mode* )の値をチェックするコードの一部が与えられ、値が`manage` と等しい時、条件付きオペレーター内のコードが実行されます。 このコードは`GET` リクエストで実行されます。 `GET`モードオペレーションが終了すると、コントローラーは通常、以下の終了アクションを行います: - ディスプレイサブシステムやテンプレーターへコントローラーの移動 - `GET`メソッドによるリダイレクション - 追加アクション: `exit;` 無しでのコントローラーの実行とプログラムの完了 この場合では、コントローラーは自動的にファンクション `fn_dispatch()` に移されます。 それがはっきりと定義されてない場合は、下の例2と例3を行う必要があります。 テンプレーターにデータを移すには、以下の構造が使用されます: [block:code] { "codes": [ { "code": "<?php\n$view->assign('template_var_name', $php_var_name);", "language": "php" } ] } [/block] ここで、`template_var_name` はテンプレートで使用可能な変数の名前を示しており、`$php_var_name`は変数のコンテンツを示しています。 ###例2: [block:code] { "codes": [ { "code": "<?php\nif ($mode == 'manage') {\n $product_name = 'Product 1';\n $product_description = 'Product description';\n $view->assign('tpl_product_name', $product_name);\n $view->assign('tpl_product_description', $product_description);\n}", "language": "php" } ] } [/block] このコードはコントローラーで実行された後、テンプレーターに移され、2つの変数が利用できるようになります:`$tpl_product_name` と`$tpl_product_description` [block:api-header] { "type": "basic", "title": "Functions" } [/block] コントローラー内の関数は一般的なファンクションフォーマッティングの規則に従って定義されています。コントローラーの関数が必要とされる場合、他のコントローラーが呼び出されます。 このような関数はプログラムのコアやアドオンに書かれている必要があります。 [block:api-header] { "type": "basic", "title": "利用可能なデータ" } [/block] コントローラー内のプログラムデータを動かすには、以下にある標準の配列を使用する必要があります: - `$_REQUEST` -`GET` リクエストと`POST` リクエストからの全ての変数を含むこの配列のすべての変数は特別な方法で処理されます:HTMLタグは削除され、(設定が有効になっている場合)PHPで自動的に追加されたスラッシュは削除されます。 - `$_SESSION` -セッションデータを記憶している標準的なPHP配列 - `Registry` -a special static class-プログラムの任意の場所からアクセス出来るデータのリポジトリ。 例えば、起動時に読み込まれたプログラムの構成パラメーターは**Registry**クラスで保持されます。このクラスの特徴は、全てのデータがキャッシュされることです。 例えば、`Registry`クラスのキャッシュに保持することにより、めったに更新されないデータのデータベースへの重複リクエストを避けることが出来ます。 [block:api-header] { "type": "basic", "title": "コントローラーのデータをテンプレーターへ転送" } [/block] コントローラーが実行された後、コントロールは`fn_dispatch()` に返されます。 プログラムのコントロールと処理され表示されるべきテンプレートへのパスを転送します。 [block:callout] { "type": "info", "body": "これはコントローラーで指定することができます。\nテンプレーターにコントロールを転送する代わりに、スクリプトの実行を終了するか他のアドレスにリダイレクトする必要があります。", "title": "ヒント" } [/block] 以下のようにデフォルトではこのテンプレートへのパスが自動的に定義されています - 管理パネル: */backend/templates/views/[controller_name]/[mode_name].tpl* - 顧客エリア: */themes/[theme name]/templates/views/[controller_name]/[mode_name].tpl* ###例: [block:code] { "codes": [ { "code": "http://cscart_dir/admin.php?dispatch=products.manage", "language": "http" } ] } [/block] 上記の場合のテンプレートへのパス:*/backend/templates/views/products/manage.tpl*