ユーザから公開期限付き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にすれば良い。