a-blog cmsのモジュール


a-blog cmsのモジュール

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

GETモジュール

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

  • データベースの情報を表示する

  • XML生成用に加工して表示する

  • 外部データを取得して表示する

<html>
<body>
<!-- BEGIN_MODULE Hoge -->
(プログラムの出力結果)
<!-- END_MODULE Hoge -->
</body>
</html>

詳細はGETモジュールの開発を参照してください。

POSTモジュール

入力・操作に対してアクションを起こすためのプログラムです。送信されるフォームデータのキー(name属性)に ACMS_POST_{POSTモジュール名} を含めれば動作します。これにより、submitボタンだけでなくJavaScriptからフォームを送信する場合にも利用できます。

  • フォームの情報をデータベースに記録する

  • ボタンを押した後に指定したページに遷移する

  • ファイルをアップロードする

<form action="" method="post">
<input type="submit" name="ACMS_POST_Fuga" value="Fugaモジュールを実行" />
</form>
const csrfToken = window.csrfToken ?? document.querySelector('meta[name="csrf-token"]')?.content;
const formData = new FormData();
formData.append('ACMS_POST_Fuga', 'Fugaモジュールを実行');
formData.append('formToken', window.csrfToken);
// 必要に応じて他のフィールドを追加
// formData.append('field1', '値');

const response = await fetch(document.location.href, {
  method: 'POST',
  body: formData,
  headers: {
     'X-CSRF-Token': csrfToken,
     'X-Requested-With': 'XMLHttpRequest',
  },
});

詳細はPOSTモジュールの開発を参照してください。

V2 GET モジュール

Twigテンプレート と連携する新しい形式のGETモジュールです。従来のGETモジュールと異なり、連想配列を返す ことでTwig側で柔軟に表示を制御できます。

項目

従来のGETモジュール

V2 GETモジュール

基底クラス

ACMS_GET

Acms\Modules\Get\V2\Base

戻り値

文字列(HTML等)

配列(構造化データ)

呼び出し

<!-- BEGIN_MODULE -->

Twig の module() 関数

{% set result = module('V2_Sample') %}
<p>{{ result.moduleTest }}</p>

詳細は V2 GETモジュールの開発 を参照してください。


ディレクトリ構造

パス

用途

/php/ACMS/GET/

GETモジュール

/php/ACMS/POST/

POSTモジュール

/extension/acms/

独自モジュール(GET/POST/V2)

GETモジュールはGETディレクトリ内に、POSTモジュールはPOSTディレクトリ内に配置します。独自V2モジュールは extension/acms/Modules/Get/V2/ に配置します。

extension/acms/
├── Modules/Get/V2/    # 独自 V2 GETモジュール
├── GET/               # 独自 GETモジュール
├── POST/              # 独自 POSTモジュール
├── Hook.php
├── Corrector.php
└── Validator.php

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>

ページ情報を取得する

URLコンテキスト(参照)で表されるページ情報のうち各種IDをGETモジュール内で取得する方法を説明します。

GETモジュール内でページ情報のうち、例えばエントリーID(以下EID)を取得することができれば、そのモジュールがどのエントリーから呼び出されたかによって参照する情報を変えることができます。基本的には、Entry_BodyやEntry_Headlineなどのモジュールもそのようにページ情報を取得することで、表示すべき情報を決定しデータベースを参照しています。

スコープの設定

下記のようにプロパティを設定することで、$this->bid, $this->cid, $this->eidとして、表示中のページが持つID情報を取得できます。

public $_scope = array(
    'bid' => 'global',
    'cid' => 'global',
    'eid' => 'global',
);

表示中ページの各種IDを参照するサンプル

<?php

namespace Acms\Custom\GET;

use ACMS_GET;

class Hoge extends ACMS_GET
{
    public $_scope = array(
        'bid' => 'global',
        'cid' => 'global',
        'eid' => 'global',
    );

    function get()
    {
        $string[] = 'Global Vars';
        $string[] .= "BID = $this->bid";
        $string[] .= "CID = $this->cid";
        $string[] .= "EID = $this->eid";

        return nl2br(implode("\r\n", $string));
    }
}

出力結果

<!-- bid = 1, cid = 2, eid = 5 の場合 -->
Global Vars<br />
BID = 1<br />
CID = 2<br />
EID = 5

取得できる情報

GETモジュールで現在表示中のページより取得できる情報には以下のものがあります。

プロパティ

説明

bid

ブログID

http://sample.com/blog/

uid

ユーザーID

http://sample.com/uid/1/profile.html

cid

カテゴリーID

http://sample.com/news/

eid

エントリーID

http://sample.com/news/123.html

keyword

キーワード

http://sample.com/keyword/検索文字/
http://sample.com/?keyword=検索文字

tag

タグ

http://sample.com/tags/aaa/

field

フィールド

http://sample.com/field/station/あの駅/

start

検索の始まり日時

http://sample.com/2017-01-01/-/2017-03-03/

end

検索の終わり日時

http://sample.com/2017-01-01/-/2017-03-03/

page

ページ番号

http://sample.com/page/2/

order

並び順

http://sample.com/order/datetime-desc/