Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PHP CS-Cart
PHPでCS-Cartの機能をカスタマイズ
2015-06-28
Profile
• 吉浦寿洋(有限会社フロッグマンオフィス)
• WordpressカスタマイズレベルのPHPスキル
• Codeigniterを少々
• 昨日のPHPカンファレンスの内容は難しすぎました汗
• CS-Cartカスタマイズ(アドオ...
基本構造:MVC
• MODEL・・・MySQL接続の基礎的な機能
• VIEW・・・Smarty
• CONTROLLER・・・PHP
CS-Cartはカスタマイズを前提とした
フレームワーク的な側面を持っています。
データ処理の流れ
index.php
?dispatch=products.view
&product_id=180
URL例:商品詳細ページ
コントローラー名.モード名
カスタマイズのアプローチ方法
1.既存のコントローラーを拡張する
2.独自のコントローラーを作成する
3.コアの関数を拡張する(PHP-HOOK)
テンプレートのカスタマイズ除く
1.既存コントローラーの拡張
Pre- / Post- コントローラーを作成することで拡張が可能。
例)カテゴリー(categories)コントローラーを拡張する場合

dispatch=categories.view&category_id=...
2.独自コントローラーの作成
例)index.php?dispatch=frogman.company
frogman.php
!コア・コントローラー名と被らないように
PHP-HOOKは後述します
どこに書く?
アドオンに書きます
アドオンとは?
CS-Cartのカスタマイズの基盤となる仕組み
=WordpressやEC-Cubeのプラグイン
標準のアドオン
ポイント
ほしいものリスト
Google Analytics
セット販売 返品管理
SNSログイン年齢認証
CS-Cartの様々な機能はアドオンでも提供されています。
サードパーティー製のアドオン
タブ拡張
フロントエンドエディター
ブログ Facebook Store
スライダー
FAQ
約400以上のアドオンが販売中

CS-Cart Marketplace
チュートリアル
http://docs.cs-cart.jp/
さっそくアドオンを書いてみましょう!
1. アドオンの構造を理解しましょう。
2. ルールに沿ったディレクトリ構造を作成しましょう。
3. アドオンのXMLを作成しましょう。
4. 言語ファイルを用意しましょう。
…………(学習することが最初は沢山ある??)
アドオン開発のTips
簡単に作れないの?
アドオンの
ベースを
作れます
CS-Cart Add-on Builder
cs-cart.ie 

Ireland
Demo
アドオンの作成∼インストール
コントローラー
テンプレートファイル
スキーマー
外部ライブラリー
アドオンを作成することで

コアから切り離された独自のスペースを

作る事が出来ます
知っておくべき

アドオンの基本構造
/apps/addons/your_addon
addon.xml
func.php
init.php
controllers
frontend
backend
your_addon.php
your_addon.php
products.po...
addon.xmlで出来ること
• アドオンの設定値の定義、保存
• デフォルト言語の設定
• アドオンのプライオリティの設定
• 他のアドオンと依存、排他関係の定義
• PHPの対応可能最小/最大バージョン
• PHPエクステンションの依存関...
1.既存コントローラーの拡張
Hands-on#1
ショップフロントの
categoriesコントローラーに

dumpモードを追加する
index.php?dispatch=categories.dump
URL
controllers
frontend
backend
categories.post.php
[ショップフロント用]
[管理パネル用]
ファイルを作成
/app/controllers/frontend/categories.php
コアの...
use TyghRegistry; //インポート文
if (!defined('BOOTSTRAP')) { die('Access denied'); }
if ($mode == 'dump')  //独自のモード
{
$root_cate...
2.独自コントローラーの作成
Hands-on#2
ショップフロントに
your_addonコントローラー

を新設する
index.php?dispatch=your_addon.view
URL
controllers
frontend
backend
your_addon.php
[ショップフロント用]
[管理パネル用]
ファイルを作成
/apps/addons/your_addon
use TyghRegistry; //インポート文
if (!defined('BOOTSTRAP')) { die('Access denied'); }
if ($mode == 'view')  //モード
{
$root_categor...
3.コアの関数を拡張する

PHP-HOOK
Hands-on#3
コアのコントローラー
/app/functions
fn.cart.php
fn.catalog.php
fn.promotions.phpfn.users.php
fn.search.php
fn.cms.php
fn.database.ph...
function fn_get_cart_product_data($hash, ……){
………
fn_set_hook('get_cart_product_data_pre', $hash, $product,
$skip_promotio...
Step#1
フックポイントの利用を宣言する
fn_register_hooks(
get_cart_product_data_pre , //1

get_cart_product_data_post_options //2
);
/app/addons/your_addon/init....
Step#2
init.phpで定義した

フックポイントで動作する関数を作成する
function fn_your_addon_get_cart_product_data_pre(
$hash,
$product,
$skip_promotion,
$cart,
$auth,
$promotion_amount
)
/app...
PHP-HOOKの利用例
独自で作成したテーブルのフィールドも

検索対象としたい。
アドオンで作成した(商品と紐付いた)値も

合わせて取得したい/更新したい
まとめ
• カスタマイズのスタートは「アドオン」から
• 全体の構造をおおまかに理解する

(コアの構造と同じ構造をアドオンで組み立てる)
• CS-Cartをフレームワークとして向き合う。

かなりの部分は命名規則とディレクトリ構造の理解で充分
ご静聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

CS-Cart デベロッパーミーティング 2015-06-28

980 views

Published on

CS-Cart デベロッパーミーティング
2015-06-28

PHPでCS-Cartの機能をカスタマイズする場合のアプローチ方法

Published in: Software

CS-Cart デベロッパーミーティング 2015-06-28

  1. 1. PHP CS-Cart PHPでCS-Cartの機能をカスタマイズ 2015-06-28
  2. 2. Profile • 吉浦寿洋(有限会社フロッグマンオフィス) • WordpressカスタマイズレベルのPHPスキル • Codeigniterを少々 • 昨日のPHPカンファレンスの内容は難しすぎました汗 • CS-Cartカスタマイズ(アドオン)歴は約1年程
  3. 3. 基本構造:MVC • MODEL・・・MySQL接続の基礎的な機能 • VIEW・・・Smarty • CONTROLLER・・・PHP CS-Cartはカスタマイズを前提とした フレームワーク的な側面を持っています。
  4. 4. データ処理の流れ index.php ?dispatch=products.view &product_id=180 URL例:商品詳細ページ コントローラー名.モード名
  5. 5. カスタマイズのアプローチ方法 1.既存のコントローラーを拡張する 2.独自のコントローラーを作成する 3.コアの関数を拡張する(PHP-HOOK) テンプレートのカスタマイズ除く
  6. 6. 1.既存コントローラーの拡張 Pre- / Post- コントローラーを作成することで拡張が可能。 例)カテゴリー(categories)コントローラーを拡張する場合
 dispatch=categories.view&category_id=168 categories.pre.php(コントローラー実行前)
 categories.post.php(コントローラー実行後) コントローラー・ファイル名命名規則 コア
  7. 7. 2.独自コントローラーの作成 例)index.php?dispatch=frogman.company frogman.php !コア・コントローラー名と被らないように
  8. 8. PHP-HOOKは後述します
  9. 9. どこに書く?
  10. 10. アドオンに書きます
  11. 11. アドオンとは? CS-Cartのカスタマイズの基盤となる仕組み =WordpressやEC-Cubeのプラグイン
  12. 12. 標準のアドオン ポイント ほしいものリスト Google Analytics セット販売 返品管理 SNSログイン年齢認証 CS-Cartの様々な機能はアドオンでも提供されています。
  13. 13. サードパーティー製のアドオン タブ拡張 フロントエンドエディター ブログ Facebook Store スライダー FAQ 約400以上のアドオンが販売中
 CS-Cart Marketplace
  14. 14. チュートリアル http://docs.cs-cart.jp/
  15. 15. さっそくアドオンを書いてみましょう!
  16. 16. 1. アドオンの構造を理解しましょう。 2. ルールに沿ったディレクトリ構造を作成しましょう。 3. アドオンのXMLを作成しましょう。 4. 言語ファイルを用意しましょう。 …………(学習することが最初は沢山ある??) アドオン開発のTips
  17. 17. 簡単に作れないの? アドオンの ベースを
  18. 18. 作れます
  19. 19. CS-Cart Add-on Builder cs-cart.ie 
 Ireland
  20. 20. Demo アドオンの作成∼インストール
  21. 21. コントローラー テンプレートファイル スキーマー 外部ライブラリー アドオンを作成することで
 コアから切り離された独自のスペースを
 作る事が出来ます
  22. 22. 知っておくべき
 アドオンの基本構造
  23. 23. /apps/addons/your_addon addon.xml func.php init.php controllers frontend backend your_addon.php your_addon.php products.post.php アドオンの基本情報&設定項目 アドオンで使用する関数&フック フックポイントの宣言 [ショップフロント用] [管理パネル用]
  24. 24. addon.xmlで出来ること • アドオンの設定値の定義、保存 • デフォルト言語の設定 • アドオンのプライオリティの設定 • 他のアドオンと依存、排他関係の定義 • PHPの対応可能最小/最大バージョン • PHPエクステンションの依存関係 • インストール/アンインストール時のDB作成や削除 • インストール/アンインストール時に実行する関数の指定
 …………
  25. 25. 1.既存コントローラーの拡張 Hands-on#1
  26. 26. ショップフロントの categoriesコントローラーに
 dumpモードを追加する index.php?dispatch=categories.dump URL
  27. 27. controllers frontend backend categories.post.php [ショップフロント用] [管理パネル用] ファイルを作成 /app/controllers/frontend/categories.php コアのcategories.phpが実行された後に 実行前の場合はcategories.pre.phpとする。 categories.phpとすると… /apps/addons/your_addon
  28. 28. use TyghRegistry; //インポート文 if (!defined('BOOTSTRAP')) { die('Access denied'); } if ($mode == 'dump')  //独自のモード { $root_categories = fn_get_subcategories(0); fn_print_r($root_categories); //print_r exit(); //処理を終了      //終了しない場合はVIEWを読み出す処理 } categories.post.php /design/themes/responsive/templates/addons
 /your_addon/views/categories/dump.tpl
  29. 29. 2.独自コントローラーの作成 Hands-on#2
  30. 30. ショップフロントに your_addonコントローラー
 を新設する index.php?dispatch=your_addon.view URL
  31. 31. controllers frontend backend your_addon.php [ショップフロント用] [管理パネル用] ファイルを作成 /apps/addons/your_addon
  32. 32. use TyghRegistry; //インポート文 if (!defined('BOOTSTRAP')) { die('Access denied'); } if ($mode == 'view')  //モード { $root_categories = fn_get_subcategories(0); fn_print_r($root_categories); //print_r exit(); //処理を終了      //終了しない場合はVIEWを読み出す処理 } your_addon.php /design/themes/responsive/templates/addons
 /your_addon/views/your_addon/view.tpl
  33. 33. 3.コアの関数を拡張する
 PHP-HOOK Hands-on#3
  34. 34. コアのコントローラー /app/functions fn.cart.php fn.catalog.php fn.promotions.phpfn.users.php fn.search.php fn.cms.php fn.database.php コア・コントローラーの実行時、常に特定の処理を行いたい
  35. 35. function fn_get_cart_product_data($hash, ……){ ……… fn_set_hook('get_cart_product_data_pre', $hash, $product, $skip_promotion, $cart, $auth, $promotion_amount); ……… } /app/functions/fn.cart.php get_cart_product_data_preというフックポイント 引数は… $hash, $product, $skip_promotion, $cart, $auth, $promotion_amount [コアを読む]
  36. 36. Step#1 フックポイントの利用を宣言する
  37. 37. fn_register_hooks( get_cart_product_data_pre , //1
 get_cart_product_data_post_options //2 ); /app/addons/your_addon/init.php HOOKポイント名を登録する
  38. 38. Step#2 init.phpで定義した
 フックポイントで動作する関数を作成する
  39. 39. function fn_your_addon_get_cart_product_data_pre( $hash, $product, $skip_promotion, $cart, $auth, $promotion_amount ) /app/addons/your_addon/func.php 引数はHOOKポイントを参照する fn_[アドオンID]_[フックポイント名](引数){
 ……
 } PHPフックポイントの命名規則
  40. 40. PHP-HOOKの利用例 独自で作成したテーブルのフィールドも
 検索対象としたい。 アドオンで作成した(商品と紐付いた)値も
 合わせて取得したい/更新したい
  41. 41. まとめ
  42. 42. • カスタマイズのスタートは「アドオン」から • 全体の構造をおおまかに理解する
 (コアの構造と同じ構造をアドオンで組み立てる) • CS-Cartをフレームワークとして向き合う。
 かなりの部分は命名規則とディレクトリ構造の理解で充分
  43. 43. ご静聴ありがとうございました

×