CMS fun(2月21日にベースキャンプ名古屋で開催) ネタです。今回は、CMS管理画面からでなく、コマンドラインから投稿する方法を紹介します。
FuelPHPのoilコマンド
Novius OS は FuelPHP フレームワークベースの CMS です。FuelPHPには、コマンドラインツール oil が用意されています。Novius OS に管理画面外から投稿する場合、この oil 機能を使うことで実現できます。
php oil refine <タスクのクラス名>:<タスクのメソッド名>
もし、tasksフォルダに、sample.phpを作り、呼び出したいメソッドがreadであれば、
php oil refine sample:read
になります。たとえば下のようなコードです。
<?php namespace Fuel\Tasks; class Sample { function read($format='json') { $data = \Recipe\Model_Menu::find('first'); if ($format == 'json') { $message = \Fuel\Core\Format::forge($data)->to_json(); } elseif ($format == 'xml') { $message = \Fuel\Core\Format::forge($data)->to_xml(); } elseif ($format == 'csv') { $message = \Fuel\Core\Format::forge($data)->to_csv(); } else { $message = 'Format should be one of: json, xml, csv'; } echo $message; } }
実行すると、Novius OSのデータを取得して、json形式で出力してくれます。
対象のアプリケーションは、サンプル用に作成したhttps://github.com/ounziw/recipeです。以下のコードも同じです。
データを更新する
先ほどの例は、データを取得して出力、でした。次は、データを更新してみましょう。ORマッパーを使うことで、SQL文を書くことなく更新できます。
以下のようなコードを作り、
php oil refine sample:update
を実行すれば、タイトルが ABC になります。
<?php namespace Fuel\Tasks; class Sample { public function update() { $data = \Recipe\Model_Menu::find('first'); // メニューの最初の項目を取得する $data->menu_title = 'ABC'; // タイトルを ABC にする $data->save(); // 保存する(更新する) } }
新規データを挿入する
ORマッパーを使えば、新規データの挿入も可能です。
php oil refine sample:create
<?php namespace Fuel\Tasks; class Sample { public function create() { $xml = '<xml> <item> <menu_virtual_name>menu1</menu_virtual_name> <menu_title>abcdefg</menu_title> <menu_price>800</menu_price> <menu_reserve>0</menu_reserve> <menu_start>2015-02-09 14:18:38</menu_start> <menu_end>2015-03-09 14:18:38</menu_end> <menu_publication_status>1</menu_publication_status> </item> </xml>'; $data = \Format::forge($xml,'xml'); // xml形式のデータを読み込み $item = $data->to_array(); // 配列に変換 $new =array_pop($item); // 配列の一個目を取得 $entry = \Recipe\Model_Menu::forge(); // オブジェクトを新規作成 $entry->set($new); // 配列でデータをセット $entry->save(); // 保存する } }
といった形で実現できます。
新規に登録する場合、どのような項目をすればよいか、はデータベース定義(https://github.com/ounziw/recipe/blob/first-commit/migrations/001_install.sql)などで調べる必要があります。とはいえ、一回xmlの雛形を作ってしまえば、二回目以降は楽にデータ挿入できますね。
FuelPHPの機能で実現する
コマンドラインから投稿する機能は、Novius OSに限らず、多くのCMSで実現できるでしょう。Novius OSではFuelPHPの機能で実現しています。FuelPHPの他のプログラムと同じように扱えるので開発しやすい、追加のアドオンなどをインストールしなくても良い、といったメリットがあります。