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の他のプログラムと同じように扱えるので開発しやすい、追加のアドオンなどをインストールしなくても良い、といったメリットがあります。
