Standing on the Shoulder of Linus

Home / 2015 / 2月 / 09 / コマンドラインからNovius OSへ投稿する方法

コマンドラインからNovius OSへ投稿する方法

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形式で出力してくれます。

oil

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

関連

Posted in cms | Tagged fuelphp, コマンドライン
← カスタム投稿タイプの下書きをダッシュボードに表示する 「FuelPHP入門」は「はじめてのフレームワークとしてのFuelPHP」と補い合う →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • WordPress見積プラグインで見積書PDF発行
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.