59
♥アドオン アドオンでCS-Cartの機能をカスタマイズ 2015-11-28

CS-Cartセミナー東京 20151128

Embed Size (px)

Citation preview

Page 1: CS-Cartセミナー東京 20151128

♥アドオンアドオンでCS-Cartの機能をカスタマイズ

2015-11-28

Page 2: CS-Cartセミナー東京 20151128

カスタマイズは どこに書く?

Page 3: CS-Cartセミナー東京 20151128

アドオンに書きますすべて

Page 4: CS-Cartセミナー東京 20151128

アドオンとは?CS-Cartのカスタマイズの基盤となる仕組み =WordpressやEC-Cubeのプラグイン

Page 5: CS-Cartセミナー東京 20151128

標準のアドオンポイント

ほしいものリスト

Google Analytics

セット販売 返品管理

SNSログイン年齢認証

CS-Cartの様々な機能はアドオンでも提供されています。

Page 6: CS-Cartセミナー東京 20151128

サードパーティー製のアドオン

タブ拡張

フロントエンドエディター

eBay統合 Facebook Store

スライダーFAQ

約400以上のアドオンが販売中CS-Cart Marketplace

Page 7: CS-Cartセミナー東京 20151128

コントローラー

テンプレートファイル

スキーマー

外部ライブラリー

アドオンを作成することでコアから切り離された独自のスペースを

作る事が出来ます

Page 8: CS-Cartセミナー東京 20151128

さっそくアドオンを書いてみましょう!

Page 9: CS-Cartセミナー東京 20151128

1. アドオンの構造を理解しましょう。 2. アドオンのXMLを作成しましょう。 3. ルールに沿ったディレクトリ構造を作成しましょう。 4. 言語ファイルを用意しましょう。 ……

アドオン開発のTips

Page 10: CS-Cartセミナー東京 20151128

チュートリアルhttp://docs.cs-cart.jp/

Page 11: CS-Cartセミナー東京 20151128

簡単に作れないの?

アドオンのベースを

Page 12: CS-Cartセミナー東京 20151128

作れます

Page 13: CS-Cartセミナー東京 20151128

CS-Cart Add-on Buildercs-cart.ie Ireland

Page 14: CS-Cartセミナー東京 20151128

Demoアドオンビルダーを使ってみよう

作成~インストール

Page 15: CS-Cartセミナー東京 20151128

知っておくべきアドオンの基本構造

Page 16: CS-Cartセミナー東京 20151128

/apps/addons/your_addonaddon.xml

func.php

init.php

アドオンの基本情報&設定項目

アドオンで使用する関数を書く

初期化用ファイル

アドオン独自のディレクトリには 他にも様々なファイルを置くことが出来ます。

Page 17: CS-Cartセミナー東京 20151128

addon.xmlで出来ること• アドオンの設定値の定義、保存

• デフォルト言語の設定

• アドオンのプライオリティの設定

• 他のアドオンと依存、排他関係の定義

• PHPの対応可能最小/最大バージョン

• PHPエクステンションの依存関係

• インストール/アンインストール時のDB作成や削除

• インストール/アンインストール時に実行する関数の指定…………

フルバージョンを見る

Page 18: CS-Cartセミナー東京 20151128

休憩

Page 19: CS-Cartセミナー東京 20151128

テンプレートフックTemplate Hook

コアのテンプレートに用意されている 「フックポイント」を利用するカスタマイズ方法

Page 20: CS-Cartセミナー東京 20151128

/design/themes/responsive/templates/index.tpl

テンプレートフック例

Page 21: CS-Cartセミナー東京 20151128

テンプレートの見つけ方

index.php ?dispatch=products.view

&product_id=180

URL例:商品詳細ページ

コントローラー名.モード名

Page 22: CS-Cartセミナー東京 20151128

先ほどのアドオンを利用して テンプレートフックを使ってみよう

Page 23: CS-Cartセミナー東京 20151128

hooksindex

XXXXXX

head_scripts.tpl[ディレクトリを作成]

{hook name="index:head_scripts"}{/hook}フックポイント

/design/themes/responsive/templates/addons/your_addon/

Page 24: CS-Cartセミナー東京 20151128

ファイルを作成したあとは

テンプレートキャッシュのクリア

Page 25: CS-Cartセミナー東京 20151128

フックポイントを探して 色々と試してみましょう

Page 26: CS-Cartセミナー東京 20151128

では、自分の求めるところに フックポイントがなかったら?

Page 27: CS-Cartセミナー東京 20151128

テンプレートオーバーライドTemplate Override

コアのテンプレートを直接改変せずに 自分の用意したファイルで

オーバーライド(上書き)するカスタマイズ方法

Page 28: CS-Cartセミナー東京 20151128

オーバーライドも先ほどの アドオンに設置します

Page 29: CS-Cartセミナー東京 20151128

overrides/design/themes/responsive/templates/addons/your_addon/

アドオンのテンプレートディレクトリに この名前のフォルダを作成します

Page 30: CS-Cartセミナー東京 20151128

overridesディレクトリを作成すると

コア

同じディレクトリ構造で置くだけ!

Page 31: CS-Cartセミナー東京 20151128

色々とオーバーライドしてみましょう

Page 32: CS-Cartセミナー東京 20151128

休憩

Page 33: CS-Cartセミナー東京 20151128

コントローラーcontroller

処理を書いてみましょう

Page 34: CS-Cartセミナー東京 20151128

処理のカスタマイズのアプローチ方法

1.既存のコントローラーを拡張する

2.独自のコントローラーを作成する

3.コアの関数を拡張する(PHP-HOOK)

Page 35: CS-Cartセミナー東京 20151128

Controllerも アドオンに書きます

Page 36: CS-Cartセミナー東京 20151128

データ処理

index.php ?dispatch=products.view

&product_id=180

URL例:商品詳細ページ

コントローラー名.モード名

Page 37: CS-Cartセミナー東京 20151128

/apps/addons/your_addonaddon.xml

func.php

init.php

controllers

frontend

backend

your_addon.php

your_addon.php

products.post.php

アドオンの基本情報&設定項目

アドオンで使用する関数&フック

フックポイントの宣言

[ショップフロント用]

[管理パネル用]

Page 38: CS-Cartセミナー東京 20151128

1.既存コントローラーの拡張Pre- / Post- コントローラーを作成することで拡張が可能。

例)カテゴリー(categories)コントローラーを拡張する場合dispatch=categories.view&category_id=168

categories.pre.php(コントローラー実行前)

categories.post.php(コントローラー実行後)

Pre/Postコントローラーの命名規則

コア

Page 39: CS-Cartセミナー東京 20151128

pre/post - controllerのデモ

Page 40: CS-Cartセミナー東京 20151128

2.独自コントローラーの作成

例)index.php?dispatch=frogman.company

frogman.php

!コア・コントローラー名と被らないように

Page 41: CS-Cartセミナー東京 20151128

1.既存コントローラーの拡張

Hands-on#1

Page 42: CS-Cartセミナー東京 20151128

”ショップフロントの categoriesコントローラーにdumpモードを追加する”

index.php?dispatch=categories.dumpURL

Page 43: CS-Cartセミナー東京 20151128

controllers

frontend

backend

categories.post.php[ショップフロント用]

[管理パネル用]

ファイルを作成

/app/controllers/frontend/categories.php

コアのcategories.phpが実行された後に

実行前の場合はcategories.pre.phpとする。 categories.phpとすると…

/apps/addons/your_addon

Page 44: CS-Cartセミナー東京 20151128

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

Page 45: CS-Cartセミナー東京 20151128

2.独自コントローラーの作成

Hands-on#2

Page 46: CS-Cartセミナー東京 20151128

”ショップフロントに your_addonコントローラー

を新設する”

index.php?dispatch=your_addon.viewURL

Page 47: CS-Cartセミナー東京 20151128

controllers

frontend

backend

your_addon.php[ショップフロント用]

[管理パネル用]

ファイルを作成

/apps/addons/your_addon

Page 48: CS-Cartセミナー東京 20151128

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

Page 49: CS-Cartセミナー東京 20151128

3.コアの関数を拡張するPHP-HOOK

Hands-on#3

Page 50: CS-Cartセミナー東京 20151128

コアのコントローラー /app/functions

fn.cart.php

fn.catalog.phpfn.promotions.phpfn.users.php

fn.search.php fn.cms.phpfn.database.php

コア・コントローラーの実行時、常に特定の処理を行いたい

Page 51: CS-Cartセミナー東京 20151128

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

[コアを読む]

Page 52: CS-Cartセミナー東京 20151128

Step#1フックポイントの利用を宣言する

Page 53: CS-Cartセミナー東京 20151128

fn_register_hooks( ‘get_cart_product_data_pre’, //1 ‘get_cart_product_data_post_options’ //2 );

/app/addons/your_addon/init.php

HOOKポイント名を登録する

Page 54: CS-Cartセミナー東京 20151128

Step#2init.phpで定義した

フックポイントで動作する関数を作成する

Page 55: CS-Cartセミナー東京 20151128

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フックポイントの命名規則

Page 56: CS-Cartセミナー東京 20151128

PHP-HOOKの利用例

独自で作成したテーブルのフィールドも検索対象としたい。

アドオンで作成した(商品と紐付いた)値も合わせて取得したい/更新したい

Page 57: CS-Cartセミナー東京 20151128

まとめ

Page 58: CS-Cartセミナー東京 20151128

• カスタマイズのスタートは「アドオン」から

• 全体の構造をおおまかに理解する(コアの構造と同じ構造をアドオンで組み立てる)

• CS-Cartをフレームワークとして向き合う。かなりの部分は命名規則とディレクトリ構造の理解で充分

Page 59: CS-Cartセミナー東京 20151128

ご静聴ありがとうございました