23
WordPressとCakePHP連携 より複雑なことが出来る管理画面をつくろう 第5回CakePHP勉強会@TOKYO 株式会社エフエックスビイ 代表取締役CVO 原 一浩 twitter tag : #phpstudy #cakephpstudy #cakephp

Cakephp And Wordpress

Embed Size (px)

DESCRIPTION

Method of using CakePHP in plug-in of WordPress.WordPressのプラグイン内でCakePHPを使う方法

Citation preview

Page 1: Cakephp And Wordpress

WordPressとCakePHP連携より複雑なことが出来る管理画面をつくろう

第5回CakePHP勉強会@TOKYO

株式会社エフエックスビイ代表取締役CVO 原 一浩

twitter tag : #phpstudy #cakephpstudy #cakephp

Page 2: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡原 一浩‣株式会社エフエックスビイ代表取締役CVO- www.fxb.jp

‣ DesignWedge編集長

Page 3: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡普段の仕事‣ RIA- Flash/Flex/AIR- AJAX- Silverlight- および、これら技術を使用したサイトのサーバーサイド開発•メインはCakePHP+MySQL•最近はScalaという言語のliftというフレームワークに興味津々

‣ CMS- MovableType、WordPress、Typo3

MEDIA

CMS RIA

Page 4: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡普段の仕事その2‣自作クローラーを使ったデザインリサーチに基づく、デザインコンサルティング- Vaqumという開発コードネーム。CakePHPベース

Page 5: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡今回のお話‣WordPressとCakePHPを連携させると、より複雑なCMSをすっきりと、素早く作ることができるよというお話

‣必要知識- PHPの簡単な知識- WordPressの管理画面のカスタマイズ基礎知識- WordPressのプラグイン作成の知識ちょっとだけ- CakePHPのある程度の知識- データベースに関する知識ほんの少し

Page 7: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡CakePHPをプラグインから使う‣組み込みの流れ- CakePHP側にプライベートメソッドを記述- WordPress側にCakePHPブリッジクラス作成- CakePHPアクセス用ファイルを作成- CakePHPを組み込みたいWordPressのプラグインを用意- WordPress上で確認

WordPressプラグイン

ブリッジ用クラス

アクセス用ファイル

CakePHP

Page 8: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡今回つくるもの‣ ToDoアプリからToDoを一つ抜き出し、WordPressの管理画面に表示させてみる

‣ Todoというモデルと、Userというモデルがある

Page 9: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡ToDoトップページ‣ 1.3で作った即席ToDoアプリ(Bakeするだけの簡単なお仕事。作業時間5分)

Page 10: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡ToDo個別ページ

Page 11: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡ToDoユーザーページ

Page 12: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡CakePHP側にプライベートメソッドを記述‣ todo_controller.phpに追記

function _getToDo($id = 0) { $result = $this->Todo->findById($id); return $result;}

Page 13: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡WordPress内にCakePHPブリッジクラス作成class WPCakePHP { var $controller; function _getToDo($id = 0) { require_once ($_SERVER['DOCUMENT_ROOT'] . '/altodo/webroot/cakephp.php'); App::import('Controller', 'Todos'); $this->controller = new TodosController(); $this->controller->constructClasses(); $result = $this->controller->_getTodo($id); return $result; }}

Page 14: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡CakePHPアクセス用ファイルを作成‣ CakePHPのapp内webrootにあるindex.phpをコピーし、cakephp.phpと複製- 下記の2行をコメントアウト

- この方法はUsing CakePHP in external PHP Systemsにて学習

✴ http://debuggable.com/posts/using-cakephp-in-external-php-systems-cmss-weblogs-etc:480f4dd5-ed94-4186-acda-4443cbdd56cb

//$Dispatcher = new Dispatcher();//$Dispatcher->dispatch();

Page 15: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡CakePHPを組み込みたいWordpressのプラグインを用意

function _getToDo($id = 0) { require_once (ABSPATH . '/wp-content/plugins/wp-cakephp/wp-cakephp.php'); $cakeObj = new WPCakePHP(); $result = $cakeObj->_getToDo($id); return $result;}

Page 16: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡HTMLの出力$todo_arr = _getToDo(56);$todo = <<< EOF <h3>ID</h3> <p>{$todo_arr["Todo"]["id"]}</p> <h3>ToDo名</h3> <p>{$todo_arr["Todo"]["title"]}</p> <h3>ステータス</h3> <p>{$todo_arr["Todo"]["check"]}</p> <h3>ユーザー</h3> <p>{$todo_arr["User"]["username"]}</p> <h3>作成日</h3> <p>{$todo_arr["Todo"]["created"]}</p>EOF;

Page 17: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡Wordpress上で確認

‣エラー的な何かがでた。。

Page 18: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡CakePHP本体の修正‣ stripslashes_deepという同名の関数がWordpressとCakePHP両方で定義されているのが原因

‣ if(!function_exists('stripslashes_deep')){ ... }で囲ってあげる

‣暫定処置ですので注意。

Page 19: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡もう一度Wordpress上で確認

‣また同様のエラー的ななにかが‣ _ _関数が2重定義されているので同じように直す

‣他言語対応している人は注意‣この問題をどちらのシステムにも手を付けずに直す、いい方法あったら共有させてください。

Page 20: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡Wordpress上で確認‣無事表示できました。パチパチ。‣データの保存や検索、バリデーションなどCakePHPのコントローラで自由に出来ます

Page 21: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡使いどころ‣入力画面で、CakePHP側を検索して入力補完‣ CakePHP側のビューを表示‣WordPressの入力時にCakePHP側にも情報を反映

‣WordPressをCakePHPのadmin画面として使う- ユーザー認証、CMS機能、デザイン、UI機能つきと考えると実はコストパフォーマンス高い

‣など、応用次第ではかなりのことが出来るはず

Page 22: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡NoseRubのご紹介‣ CakePHPベースのTwitterクローン‣頑張って日本語化しました‣情報は http://fxb.jp/ にて公開予定

Page 23: Cakephp And Wordpress

twitter id : @kara_d tag : #cakephpstudy

➡ありがとうございました‣ご質問などありましたら是非!!

‣ twitter : @kara_d‣mail : [email protected]