グローバル変数、校正オプション、バリデータを作ってみよう

この記事は公開日より7年以上経過しているため、現在の内容と異なる可能性があります。


このハンズオンでは、標準で用意されているグローバル変数、校正オプション、バリデータで要件を満たせない場合に、自作する方法について取り扱っていきます。

グローバル変数の作成

Hook 機能を利用します。そのためには設定変更をする必要があります。config.server.php の HOOK_ENABLE を1にします。
作業ファイル:/config.server.php

define('HOOK_ENABLE', 1);

グローバル変数を作成するには extendsGlobalVars() 内に、記述を追加します。
下記の記述をしてある場合、%{key}とテンプレートに記述すると、var と表示されます。
作業ファイル:/php/ACMS/User/Hook.php

public function extendsGlobalVars(&$globalVars)
{
$globalVars->set('key', 'var');
}

課題

1時間前の年月日 %{UCHINA_DATE} と、1時間前の時分秒 %{UCHINA_TIME} を表示するグローバル変数を作成する。1時間前の年月日時分秒は下記のプログラムコードで生成できます。
参考:phpマニュアル date関数

date('Y-m-d H:i:s', strtotime('-1 hour'))

テンプレートに %{UCHINA_DATE} と %{UCHINA_TIME} を記載し、ブラウザで表示を確認します
次に、トップページで表示している新着情報では最新の5件を表示していますが、追加で終了日時(end)を1時間前までとします。登録したての最新の記事は表示されず、1時間後に表示されるようになります。

校正オプションの作成

校正オプションを作成するには、class ACMS_User_Corrector を編集します。既に開催されている[sample]の校正オプションを参考にします。
作業ファイル:/php/ACMS/User/Corrector.php

課題

テキスト内の特定の文字を太字にします

{title}[wordstrong] とする場合、ACMS_User_Corrector に次のようなfunction を用意します。
下記コードをコピペするか、sampleを複製して、function 名を変更する方法でも問題ありません。

public static function wordstrong($txt, $args = array())
{
 $before = array("テーマ", "Cookie");
 $after   = array("<strong>テーマ</strong>", "<strong>Cookie</strong>");
 return str_replace($before, $after, $txt);
}

校正オプションを適応する文字は $txt にあります。この $txt に特定の文字が含まれているかを検索して置換をします。

次に、トップページの新着情報タイトルに先ほど作成した校正オプションを追加します。この時、必ずescapeの校正オプションも併記します。
作業ファイル:/themes/simple2016/include/entry/topHeadline.html

{title}[escape|wordstrong]

バリデータの作成

フォームの入力値チェックであるバリデータを作成するには、ACMS_User_Validator を編集します。既に用意されているsampleのバリデータを参考にします。
作業ファイル:/php/ACMS/User/Validator.php
作業ファイル:/themes/simple2016/contact/form/input.html

課題

電話番号の入力値チェックとして、0から始まる場合はOKとし、それ以外はエラーとするバリデータを作成します。
sample を参考に下記のようなチェックプログラムを使用します。
参考:PHPのマニュアル strpos

return (strpos($val, '0') === 0);

テンプレート側でバリデータを使用するように追記します。

<input type="hidden" name="tel:v#phonenumber" value="">
<!-- BEGIN tel:validator#phonenumber -->
<p class="error-text"><span class="acms-icon acms-icon-attention"></span>電話番号を確認してください。</p>
<!-- END tel:validator#phonenumber -->

0で始まらない電話番号はエラーになりましたら成功です。
余力がある方は、電話番号は必須項目ではないので空の場合はエラーにならないようにします。

同じタグ付けがされている記事