a-blog cmsのモジュール

a-blog cmsのモジュール

a-blog cmsはGETモジュールとPOSTモジュールという独自単位のPHPプログラムによって動作します。

GETモジュール

テンプレートを通して情報を表示するためのプログラムです。テンプレート内で表示制御のテンプレートタグとして動作します。

  • データベースの情報を表示する
  • XML生成用に加工して表示する
  • 外部データを取得して表示する
<html>
<body>
<!-- BEGIN_MODULE Hoge -->
(プログラムの出力結果)
<!-- END_MODULE Hoge -->
</body>
</html>

POSTモジュール

入力・操作に対してアクションを起こすためのプログラムです。フォーム要素内のsubmitまたはimageボタンとして動作します。

  • フォームの情報をデータベースに記録する
  • ボタンを押した後に指定したページに遷移する
  • ファイルをアップロードする
<form action="" method="post">
<input type="submit" name="ACMS_POST_Fuga" value="Fugaモジュールを実行" />
</form>

ディレクトリ構造

/php/
phpファイルの格納ディレクトリ
/php/ACMS/
a-blog cms動作ファイルの格納ディレクトリ
/php/ACMS/GET/
GETモジュールの格納ディレクトリ
/php/ACMS/POST/
POSTモジュールの格納ディレクトリ
/extension/acms/
独自に開発したモジュールの格納ディレクトリ

a-blog cmsのシステム上、GETモジュールはGETディレクトリ内に配置し、同様にPOSTモジュールはPOSTディレクトリ内に配置します。

GETモジュールの基本と雛形

GETモジュールの雛形

<?php

namespace Acms\Custom\GET;

use ACMS_GET;
use Template;

/**
 * extension/acms/GET/Sample.php
 *
 * テンプレート上では、標準のGETモジュールと同様に、
 * '<!-- BEGIN_MODULE Sample --><!--END_MODULE Sample -->' で呼び出されます。
 */
class Sample extends ACMS_GET
{
    function get()
    {
        return 'sample sample';
    }
}

GETモジュールの規約

クラス

GETモジュールとして動作させるために、ACMS_GETを継承してください。
ファイルのパスと命名規則はPSR4に従います。(ただし下位互換性を保つため一部したがっていない場合があります)

**extension/acms の名前空間は Acms\Custom になります。**

この命名規則によりクラスがオートロード(autoload)されますので、requireなどは必要ありません。

extension/acms/GET/Sample.php の場合

namespace Acms\Custom\GET;
use ACMS_GET;

class Sample extends ACMS_GET {
}

extension/acms/GET/Own/Sample.php の場合

namespace Acms\Custom\GET\Own;
use ACMS_GET;

class Sample extends ACMS_GET {
}

出力

GETモジュールは呼び出されるとgetメソッドを実行します。最終的にgetメソッド内で、returnした文字列がモジュール内で出力されます。Smartyなど他のテンプレートエンジンと組み合わせたり、外部から情報を取得したりして情報を出力できます。

returnする文字列にはHTMLタグなどが含まれていても構いません。テンプレートとプログラムを分離させる必要が無い場合は、直接HTMLコンテンツを出力することもできます。

実行例

冒頭の雛形を実行する際のテンプレートと、その実行結果を例示します。GETモジュールは、BEGIN_MODULEから始まり、ENDMODULEで終わる、一連のテンプレートタグによって呼び出されます。テンプレート上のモジュール名は Acms\Custom 以降のクラス名を **(アンダーバー)** 繋ぎにしたものになります。

例: Acms\Custom\GET\Own\Sample -> Own_Sample

テンプレート

<html>
<body>
    <p><!-- BEGIN_MODULE Own_Sample --><!-- END_MODULE Oen_Sample --></p>
</body>
</html>

実行結果

<html>
<body>
    <p>sample sample</p>
</body>
</html>