Upload
toshihiro-yoshiura
View
781
Download
0
Embed Size (px)
Citation preview
♥アドオンアドオンでCS-Cartの機能をカスタマイズ
2015-11-28
カスタマイズは どこに書く?
アドオンに書きますすべて
アドオンとは?CS-Cartのカスタマイズの基盤となる仕組み =WordpressやEC-Cubeのプラグイン
標準のアドオンポイント
ほしいものリスト
Google Analytics
セット販売 返品管理
SNSログイン年齢認証
CS-Cartの様々な機能はアドオンでも提供されています。
サードパーティー製のアドオン
タブ拡張
フロントエンドエディター
eBay統合 Facebook Store
スライダーFAQ
約400以上のアドオンが販売中CS-Cart Marketplace
コントローラー
テンプレートファイル
スキーマー
外部ライブラリー
アドオンを作成することでコアから切り離された独自のスペースを
作る事が出来ます
さっそくアドオンを書いてみましょう!
1. アドオンの構造を理解しましょう。 2. アドオンのXMLを作成しましょう。 3. ルールに沿ったディレクトリ構造を作成しましょう。 4. 言語ファイルを用意しましょう。 ……
アドオン開発のTips
チュートリアルhttp://docs.cs-cart.jp/
簡単に作れないの?
アドオンのベースを
作れます
CS-Cart Add-on Buildercs-cart.ie Ireland
Demoアドオンビルダーを使ってみよう
作成~インストール
知っておくべきアドオンの基本構造
/apps/addons/your_addonaddon.xml
func.php
init.php
アドオンの基本情報&設定項目
アドオンで使用する関数を書く
初期化用ファイル
アドオン独自のディレクトリには 他にも様々なファイルを置くことが出来ます。
addon.xmlで出来ること• アドオンの設定値の定義、保存
• デフォルト言語の設定
• アドオンのプライオリティの設定
• 他のアドオンと依存、排他関係の定義
• PHPの対応可能最小/最大バージョン
• PHPエクステンションの依存関係
• インストール/アンインストール時のDB作成や削除
• インストール/アンインストール時に実行する関数の指定…………
フルバージョンを見る
休憩
テンプレートフックTemplate Hook
コアのテンプレートに用意されている 「フックポイント」を利用するカスタマイズ方法
/design/themes/responsive/templates/index.tpl
テンプレートフック例
テンプレートの見つけ方
index.php ?dispatch=products.view
&product_id=180
URL例:商品詳細ページ
コントローラー名.モード名
先ほどのアドオンを利用して テンプレートフックを使ってみよう
hooksindex
XXXXXX
head_scripts.tpl[ディレクトリを作成]
{hook name="index:head_scripts"}{/hook}フックポイント
/design/themes/responsive/templates/addons/your_addon/
ファイルを作成したあとは
テンプレートキャッシュのクリア
フックポイントを探して 色々と試してみましょう
では、自分の求めるところに フックポイントがなかったら?
テンプレートオーバーライドTemplate Override
コアのテンプレートを直接改変せずに 自分の用意したファイルで
オーバーライド(上書き)するカスタマイズ方法
オーバーライドも先ほどの アドオンに設置します
overrides/design/themes/responsive/templates/addons/your_addon/
アドオンのテンプレートディレクトリに この名前のフォルダを作成します
overridesディレクトリを作成すると
コア
同じディレクトリ構造で置くだけ!
色々とオーバーライドしてみましょう
休憩
コントローラーcontroller
処理を書いてみましょう
処理のカスタマイズのアプローチ方法
1.既存のコントローラーを拡張する
2.独自のコントローラーを作成する
3.コアの関数を拡張する(PHP-HOOK)
Controllerも アドオンに書きます
データ処理
index.php ?dispatch=products.view
&product_id=180
URL例:商品詳細ページ
コントローラー名.モード名
/apps/addons/your_addonaddon.xml
func.php
init.php
controllers
frontend
backend
your_addon.php
your_addon.php
products.post.php
アドオンの基本情報&設定項目
アドオンで使用する関数&フック
フックポイントの宣言
[ショップフロント用]
[管理パネル用]
1.既存コントローラーの拡張Pre- / Post- コントローラーを作成することで拡張が可能。
例)カテゴリー(categories)コントローラーを拡張する場合dispatch=categories.view&category_id=168
categories.pre.php(コントローラー実行前)
categories.post.php(コントローラー実行後)
Pre/Postコントローラーの命名規則
コア
pre/post - controllerのデモ
2.独自コントローラーの作成
例)index.php?dispatch=frogman.company
frogman.php
!コア・コントローラー名と被らないように
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をフレームワークとして向き合う。かなりの部分は命名規則とディレクトリ構造の理解で充分
ご静聴ありがとうございました