{"_id":"5544d76bd8833c0d00582825","version":{"_id":"5544d76ad8833c0d00582801","__v":1,"project":"55227389b4a0de0d00de7e28","forked_from":"55227389b4a0de0d00de7e2b","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"},"category":{"_id":"5544d76ad8833c0d00582804","__v":1,"pages":["5544d76bd8833c0d00582824","5544d76bd8833c0d00582825","5544d76bd8833c0d00582826","5544d76bd8833c0d00582827","5544d76bd8833c0d00582828","5544d76bd8833c0d00582829","5544d76bd8833c0d0058282a","5544d76bd8833c0d0058282b","5544d76bd8833c0d0058282c","5544d76bd8833c0d0058282d","5544d76bd8833c0d0058282e","5544d76bd8833c0d0058282f","5544d76bd8833c0d00582830","5544d76bd8833c0d00582831"],"project":"55227389b4a0de0d00de7e28","version":"5544d76ad8833c0d00582801","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-04-09T09:27:58.538Z","from_sync":false,"order":2,"slug":"_-1","title":"アドオン開発"},"__v":1,"project":"55227389b4a0de0d00de7e28","user":"552342f6e20da719000e7925","updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-04-10T06:32:14.894Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"フックはコードの必要な部分で特別な関数を呼び出すことによって宣言されます:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\nfn_set_hook('hook_name', $params, [$param2], [$paramN]);\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nフックはとても柔軟なプログラム・テクニックです。  \n1つの関数に複数のフック・ポイントを設定することができます。\n\nCS-Cart公式サイト上の[Hooks base](http://www.cs-cart.com/api)(英語)を利用することでCS-Cartの全てのバージョンで利用可能なPHPフック・ポイントを確認することが出来ます。\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/GjjtY4sVRK6LqbJOkpR1_sshookbase.png\",\n        \"sshookbase.png\",\n        \"1243\",\n        \"1019\",\n        \"#d9554f\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"PHPコード・フックの例\"\n}\n[/block]\nCS-Cartで使用されているPHPコード・フックの例です。\nコードフックは、*ギフト券アドオン*が使用している関数 `fn_get_gift_certificate_info()` 内で宣言されています。\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n....\\nfn_set_hook('get_gift_certificate_info', $_certificate, $certificate, $type);\",\n      \"language\": \"php\",\n      \"name\": null\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"PHPフックはいつ使用されるのか?\"\n}\n[/block]\nフックはコアプログラムのメインフローの途中でアドオンが追加のアクションを実行するために便利な方法を提供します。\n\nフックポイントでアドオンはコア・プログラムのコードの実行を遮ることができ、必要な処理を実行して、メインプログラムに実行プロセスを返します。\n\n特定のフックを呼び出した際には、すべての変数がアドオンに直接渡されます。\n\nアドオン内でのフックの呼び出しは関数名が`fn_ (アドオン名)(アンダーバー)(呼び出されたフックのフルネーム)`という名称で定義することによって実行されます:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\nfn_gift_certificates_get_gift_certificate_info($_certificate, $certificate, $type)\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\n上記の関数名は、**ギフト券アドオン**の`get_gift_certificate_info` フック内で実行される関数となります。\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"PHPフックの使い方\"\n}\n[/block]\nあなたのアドオンにPHPフックを利用するには:\n\n- 先ず使用するフック・ポイントをアドオンの`init.php` ファイル内で宣言します:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n...\\n\\nfn_register_hooks(\\n   'get_category_data_pre'\\n);\\n\\n  ...\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\n- アドオンの`func.php`ファイル内のフックのアクションを作動するための関数を作成します:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n\\nif ( !defined('AREA') ) { die('Access denied'); }\\n\\nfunction fn_my_addon_get_category_data_pre($category_id, $field_list, $get_main_pair, $skip_company_condition, $lang_code)\\n{\\n   ...\\n}\\n\\n?>\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nこれだけです!\n\nCS-Cartはアドオンが定義するフック・ポイントでフックが発生した際に処理をアドオンに引き渡します。\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"別のアドオンを他のアドオンで拡張する方法\"\n}\n[/block]\n別のアドオンの処理を拡張する必要がある場合、他のアドオンの中のフックポイントを利用することが可能です。\n\n例えば、*新着情報とメルマガ*アドオンは*SEOアドオン*を使用します。\n\n*新着情報とメルマガ*アドオンのためにSEOアドオンを拡張する必要はなく、SEOアドオンのフックポイントに処理を引き渡すことができます。\n\n*design/backend/templates/addons/news_and_emails/addons/seo/hooks/*\n\n動作の原理は他のフックと同様です。\n\n例外としては、*新着情報とメルマガ*アドオンからSEOアドオンのフックポイントを利用する場合は、SEOアドオンが有効な場合のみそのフックポイントが利用可能となります。\n\n以下の関数`fn_register_hooks`の三番目の引数はt他のアドオンが有効な場合のみPHPフックを登録するために追加されました:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\nfn_register_hooks( array('get_news_data', '', 'seo') ) \",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nこの場合のフックポイントに作用する関数名は**fn_seo_get_news_data**となります。これは**SEOアドオン**が有効な場合のみで呼び出されます。\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"全てのアクションは「アドオンを他のアドオンで拡張する」セクションに記述されています。\",\n  \"title\": \"情報\"\n}\n[/block]","excerpt":"PHPコード・フック(フックポイント)は作成したアドオンに処理を引き渡すことができるようにコア内に定義された箇所です。","slug":"php-hooks","type":"basic","title":"PHPフック"}

PHPフック

PHPコード・フック(フックポイント)は作成したアドオンに処理を引き渡すことができるようにコア内に定義された箇所です。

フックはコードの必要な部分で特別な関数を呼び出すことによって宣言されます: [block:code] { "codes": [ { "code": "<?php\nfn_set_hook('hook_name', $params, [$param2], [$paramN]);", "language": "php" } ] } [/block] フックはとても柔軟なプログラム・テクニックです。 1つの関数に複数のフック・ポイントを設定することができます。 CS-Cart公式サイト上の[Hooks base](http://www.cs-cart.com/api)(英語)を利用することでCS-Cartの全てのバージョンで利用可能なPHPフック・ポイントを確認することが出来ます。 [block:image] { "images": [ { "image": [ "https://files.readme.io/GjjtY4sVRK6LqbJOkpR1_sshookbase.png", "sshookbase.png", "1243", "1019", "#d9554f", "" ] } ] } [/block] [block:api-header] { "type": "basic", "title": "PHPコード・フックの例" } [/block] CS-Cartで使用されているPHPコード・フックの例です。 コードフックは、*ギフト券アドオン*が使用している関数 `fn_get_gift_certificate_info()` 内で宣言されています。 [block:code] { "codes": [ { "code": "<?php\n....\nfn_set_hook('get_gift_certificate_info', $_certificate, $certificate, $type);", "language": "php", "name": null } ] } [/block] [block:api-header] { "type": "basic", "title": "PHPフックはいつ使用されるのか?" } [/block] フックはコアプログラムのメインフローの途中でアドオンが追加のアクションを実行するために便利な方法を提供します。 フックポイントでアドオンはコア・プログラムのコードの実行を遮ることができ、必要な処理を実行して、メインプログラムに実行プロセスを返します。 特定のフックを呼び出した際には、すべての変数がアドオンに直接渡されます。 アドオン内でのフックの呼び出しは関数名が`fn_ (アドオン名)(アンダーバー)(呼び出されたフックのフルネーム)`という名称で定義することによって実行されます: [block:code] { "codes": [ { "code": "<?php\nfn_gift_certificates_get_gift_certificate_info($_certificate, $certificate, $type)", "language": "php" } ] } [/block] 上記の関数名は、**ギフト券アドオン**の`get_gift_certificate_info` フック内で実行される関数となります。 [block:api-header] { "type": "basic", "title": "PHPフックの使い方" } [/block] あなたのアドオンにPHPフックを利用するには: - 先ず使用するフック・ポイントをアドオンの`init.php` ファイル内で宣言します: [block:code] { "codes": [ { "code": "<?php\n...\n\nfn_register_hooks(\n 'get_category_data_pre'\n);\n\n ...", "language": "php" } ] } [/block] - アドオンの`func.php`ファイル内のフックのアクションを作動するための関数を作成します: [block:code] { "codes": [ { "code": "<?php\n\nif ( !defined('AREA') ) { die('Access denied'); }\n\nfunction fn_my_addon_get_category_data_pre($category_id, $field_list, $get_main_pair, $skip_company_condition, $lang_code)\n{\n ...\n}\n\n?>", "language": "php" } ] } [/block] これだけです! CS-Cartはアドオンが定義するフック・ポイントでフックが発生した際に処理をアドオンに引き渡します。 [block:api-header] { "type": "basic", "title": "別のアドオンを他のアドオンで拡張する方法" } [/block] 別のアドオンの処理を拡張する必要がある場合、他のアドオンの中のフックポイントを利用することが可能です。 例えば、*新着情報とメルマガ*アドオンは*SEOアドオン*を使用します。 *新着情報とメルマガ*アドオンのためにSEOアドオンを拡張する必要はなく、SEOアドオンのフックポイントに処理を引き渡すことができます。 *design/backend/templates/addons/news_and_emails/addons/seo/hooks/* 動作の原理は他のフックと同様です。 例外としては、*新着情報とメルマガ*アドオンからSEOアドオンのフックポイントを利用する場合は、SEOアドオンが有効な場合のみそのフックポイントが利用可能となります。 以下の関数`fn_register_hooks`の三番目の引数はt他のアドオンが有効な場合のみPHPフックを登録するために追加されました: [block:code] { "codes": [ { "code": "<?php\nfn_register_hooks( array('get_news_data', '', 'seo') ) ", "language": "php" } ] } [/block] この場合のフックポイントに作用する関数名は**fn_seo_get_news_data**となります。これは**SEOアドオン**が有効な場合のみで呼び出されます。 [block:callout] { "type": "info", "body": "全てのアクションは「アドオンを他のアドオンで拡張する」セクションに記述されています。", "title": "情報" } [/block]