cs-cart デベロッパーミーティング 2015-06-28

43
PHP×CS-Cart PHPでCS-Cartの機能をカスタマイズ 2015-06-28

Upload: toshihiro-yoshiura

Post on 08-Aug-2015

252 views

Category:

Software


1 download

TRANSCRIPT

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

PHP×CS-CartPHPでCS-Cartの機能をカスタマイズ

2015-06-28

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

Profile• 吉浦寿洋(有限会社フロッグマンオフィス)

• WordpressカスタマイズレベルのPHPスキル

• Codeigniterを少々

• 昨日のPHPカンファレンスの内容は難しすぎました汗

• CS-Cartカスタマイズ(アドオン)歴は約1年程

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

基本構造:MVC• MODEL・・・MySQL接続の基礎的な機能

• VIEW・・・Smarty

• CONTROLLER・・・PHP

CS-Cartはカスタマイズを前提とした フレームワーク的な側面を持っています。

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

データ処理の流れ

index.php ?dispatch=products.view

&product_id=180

URL例:商品詳細ページ

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

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

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

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

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

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

テンプレートのカスタマイズ除く

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

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

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

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

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

コントローラー・ファイル名命名規則

コア

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

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

例)index.php?dispatch=frogman.company

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

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

PHP-HOOKは後述します

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

どこに書く?

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

アドオンに書きます

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

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

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

標準のアドオンポイント

ほしいものリスト

Google Analytics

セット販売 返品管理

SNSログイン年齢認証

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

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

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

タブ拡張

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

ブログ Facebook Store

スライダーFAQ

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

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

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

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

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

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

1. アドオンの構造を理解しましょう。 2. ルールに沿ったディレクトリ構造を作成しましょう。 3. アドオンのXMLを作成しましょう。 4. 言語ファイルを用意しましょう。 …………(学習することが最初は沢山ある??)

アドオン開発のTips

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

簡単に作れないの?

アドオンのベースを

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

作れます

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

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

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

Demoアドオンの作成~インストール

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

コントローラー

テンプレートファイル

スキーマー

外部ライブラリー

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

作る事が出来ます

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

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

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

/apps/addons/your_addon

addon.xml

func.php

init.php

controllers

frontend

backend

your_addon.php

your_addon.php

products.post.php

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

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

フックポイントの宣言

[ショップフロント用]

[管理パネル用]

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

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

• デフォルト言語の設定

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

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

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

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

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

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

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

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

Hands-on#1

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

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

index.php?dispatch=categories.dumpURL

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

controllers

frontend

backend

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

[管理パネル用]

ファイルを作成

/app/controllers/frontend/categories.php

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

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

/apps/addons/your_addon

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

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 29: CS-Cart デベロッパーミーティング 2015-06-28

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

Hands-on#2

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

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

を新設する”

index.php?dispatch=your_addon.viewURL

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

controllers

frontend

backend

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

[管理パネル用]

ファイルを作成

/apps/addons/your_addon

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

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 33: CS-Cart デベロッパーミーティング 2015-06-28

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

Hands-on#3

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

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

fn.cart.php

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

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

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

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

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 36: CS-Cart デベロッパーミーティング 2015-06-28

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

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

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

/app/addons/your_addon/init.php

HOOKポイント名を登録する

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

Step#2init.phpで定義した

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

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

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 40: CS-Cart デベロッパーミーティング 2015-06-28

PHP-HOOKの利用例

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

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

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

まとめ

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

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

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

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

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

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