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