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

POSTモジュールの雛形

<?php

namespace Acms\Custom\POST;

use ACMS_POST;

/**
 * extension/acms/POST/Sample.php
 *
 * テンプレート上では、標準のPOSTモジュールと同様に、
 * '<input type="submit" name="ACMS_POST_Sample" value="送信" />' で呼び出されます。
 */
class Sample extends ACMS_POST
{
    function post()
    {
        return $this->Post;
    }
}

POSTモジュールの規約

クラス

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

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

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

<?php

namespace Acms\Custom\POST;

use ACMS_POST; 

class Sample extends ACMS_POST
{
}

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

<?php

namespace Acms\Custom\POST\Own;

use ACMS_POST; 

class Sample extends ACMS_POST
{
}

実行

POSTモジュールは呼び出されるとpostメソッドを実行します。postメソッド内で処理を実行した後には、最後に$this->Postをreturnします。これは規約上のスペルです。次に起動するGETモジュールとの情報の受け渡しに利用されますが、ここでは言及しません。

制約

POSTモジュール内では、echoやprintなど文字列を直接出力することはしません。表示(View)に関わる部分はGETモジュールで行います。

GETモジュールから表示ページがもつIDを参照する

ページ情報を取得する

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ブログIDhttp://sample.com/blog/
uidユーザーIDhttp://sample.com/uid/1/profile.html
cidカテゴリーIDhttp://sample.com/news/
eidエントリーIDhttp://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/