ユーザから公開期限付きcms:ignoreが欲しいという連絡があった。
cms:ignoreについては、ブログページを作成する(ブログトップ) - SOY CMSを使ってみように使用例があるので、この記事では詳細には触れない事にする。
PHPモジュールを使用する(要PHP) - SOY CMSを使ってみよう
早速本題の公開期限付きのcms:ignoreのようなモジュールを作る。
<!-- cms:ignore cms:start="2021-08-01 00:00:00" cms:end="2021-08-31 24:00:00" -->8月中は出力する<!-- /cms:ignore -->
上記のような目的とするタグをモジュールで作成してみる。
最初にモジュールを作成する。
下記のパスになるようにディレクトリ(フォルダ)とPHPファイルを作成する。
/ドキュメントルート/サイトID/.module/parts/ignore.php
ignore.phpを開き、下記のコードにする。
説明が大変なので、詳細説明はコード内のコメントにて
<?php
/**
* <!-- cms:module="parts.ignore" -->
* <!-- cms:id="ignore" -->公開期間付きignore<!-- /cms:id="ignore" -->
* <!-- /cms:module="parts.ignore" -->
*/
//関数名はsoycms_{PHPファイル名から.phpを除いたもの}
function soycms_ignore($html, $htmlObj){
/**
* $obj = $htmlObj->create〜と末尾に$obj->display()を書く事で、
* <!-- cms:module="parts.ignore"で囲った箇所のHTMLの記述を維持しつつ、
* 途中に記述したcms:idを使用することができるようになる
*/
$obj = $htmlObj->create("soycms_ignore", "HTMLTemplatePage", array(
"arguments" => array("soycms_ignore", $html)
));
/**
* 8月中はcms:id="ignore"で囲んだ箇所を表示する
* mktime():https://www.php.net/manual/ja/function.mktime.php
* time():https://www.php.net/manual/ja/function.time.php
*/
$start = mktime(0, 0, 0, 8, 1, 2021);
$end = mktime(0, 0, 0, 9, 1, 2021);
$now = time();
/**
* addModel():https://saitodev.co/article/1795
* visibleに指定した条件式でcms:id="ignore"で囲まれた箇所が8月中に表示されることになる
*/
$obj->addModel("ignore", array(
"soy2prefix" => "cms",
"visible" => ($start <= $now && $now < $end)
));
$obj->display();
}
これで、公開期限付きのcms:ignoreのようなモジュールができた。
このモジュールは下記のコードをテンプレートに挿入することで使用できます。
※ページの種別なく使用できます。
<!-- cms:module="parts.ignore" --> <!-- cms:id="ignore" -->公開期間付きignore<!-- /cms:id="ignore" --> <!-- /cms:module="parts.ignore" -->
今回の機能をSOY Shopで作成したい場合、コード内にあるsoycms_ignoreの記述全てをsoyshop_ignoreに変更して、テンプレートに記述するタグは、
<!-- shop:module="parts.ignore" --> <!-- cms:id="ignore" -->公開期間付きignore<!-- /cms:id="ignore" --> <!-- /shop:module="parts.ignore" -->
のようにcms:moduleの記述をshop:moduleにすれば良い。





