View
251
Download
1
Category
Preview:
Citation preview
PHP×CS-CartPHPでCS-Cartの機能をカスタマイズ
2015-06-28
Profile• 吉浦寿洋(有限会社フロッグマンオフィス)
• WordpressカスタマイズレベルのPHPスキル
• Codeigniterを少々
• 昨日のPHPカンファレンスの内容は難しすぎました汗
• CS-Cartカスタマイズ(アドオン)歴は約1年程
基本構造: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=168
categories.pre.php(コントローラー実行前)
categories.post.php(コントローラー実行後)
コントローラー・ファイル名命名規則
コア
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
さっそくアドオンを書いてみましょう!
1. アドオンの構造を理解しましょう。 2. ルールに沿ったディレクトリ構造を作成しましょう。 3. アドオンのXMLを作成しましょう。 4. 言語ファイルを用意しましょう。 …………(学習することが最初は沢山ある??)
アドオン開発のTips
簡単に作れないの?
アドオンのベースを
作れます
Demoアドオンの作成~インストール
コントローラー
テンプレートファイル
スキーマー
外部ライブラリー
アドオンを作成することでコアから切り離された独自のスペースを
作る事が出来ます
知っておくべきアドオンの基本構造
/apps/addons/your_addon
addon.xml
func.php
init.php
controllers
frontend
backend
your_addon.php
your_addon.php
products.post.php
アドオンの基本情報&設定項目
アドオンで使用する関数&フック
フックポイントの宣言
[ショップフロント用]
[管理パネル用]
addon.xmlで出来ること• アドオンの設定値の定義、保存
• デフォルト言語の設定
• アドオンのプライオリティの設定
• 他のアドオンと依存、排他関係の定義
• PHPの対応可能最小/最大バージョン
• PHPエクステンションの依存関係
• インストール/アンインストール時のDB作成や削除
• インストール/アンインストール時に実行する関数の指定…………
1.既存コントローラーの拡張
Hands-on#1
”ショップフロントの categoriesコントローラーにdumpモードを追加する”
index.php?dispatch=categories.dumpURL
controllers
frontend
backend
categories.post.php[ショップフロント用]
[管理パネル用]
ファイルを作成
/app/controllers/frontend/categories.php
コアのcategories.phpが実行された後に
実行前の場合はcategories.pre.phpとする。 categories.phpとすると…
/apps/addons/your_addon
use Tygh\Registry; //インポート文 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
2.独自コントローラーの作成
Hands-on#2
”ショップフロントに your_addonコントローラー
を新設する”
index.php?dispatch=your_addon.viewURL
controllers
frontend
backend
your_addon.php[ショップフロント用]
[管理パネル用]
ファイルを作成
/apps/addons/your_addon
use Tygh\Registry; //インポート文 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
3.コアの関数を拡張するPHP-HOOK
Hands-on#3
コアのコントローラー /app/functions
fn.cart.php
fn.catalog.phpfn.promotions.phpfn.users.php
fn.search.php fn.cms.phpfn.database.php
コア・コントローラーの実行時、常に特定の処理を行いたい
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
[コアを読む]
Step#1フックポイントの利用を宣言する
fn_register_hooks( ‘get_cart_product_data_pre’, //1 ‘get_cart_product_data_post_options’ //2 );
/app/addons/your_addon/init.php
HOOKポイント名を登録する
Step#2init.phpで定義した
フックポイントで動作する関数を作成する
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フックポイントの命名規則
PHP-HOOKの利用例
独自で作成したテーブルのフィールドも検索対象としたい。
アドオンで作成した(商品と紐付いた)値も合わせて取得したい/更新したい
まとめ
• カスタマイズのスタートは「アドオン」から
• 全体の構造をおおまかに理解する(コアの構造と同じ構造をアドオンで組み立てる)
• CS-Cartをフレームワークとして向き合う。かなりの部分は命名規則とディレクトリ構造の理解で充分
ご静聴ありがとうございました
Recommended