Edited at

a-blog cmsで、独自タグの内容を置換する「校正オプション」の具体的な使い方

More than 1 year has passed since last update.

この記事は、a-blog cms Advent Calendar 2017の10日目の記事です。

すみませんリマインダの日付間違えてて一日遅れました。

先日、12月9日のCMSMix Sapporo Vol.4のハンズオンでご紹介した、「校正オプション」の具体的な使い方です。


校正オプションとは

a-blog cmsでは、テンプレート内の変数の直後に、半角角カッコ([])で「表示内容を置換するルール」を指定することができます。これが「校正オプション」で、ほぼすべての変数に対して使用できます。

使用できるオプションの一覧は、下記を参照ください。

https://developer.a-blogcms.jp/document/reference/proofreading.html

最もよく使われるのが、他のCMSでもよくある日付変換です。下記のサンプルでは、YY-mm-dd形式で入力されたカスタムフィールド「event_date」を、ゼロを付けない日付に置換して表示しています。


acms_corrector_date.html

{event_date}[date('Y年n月j日')] -> 2017-01-01 -> 2018年1月1日



a-blog cms独自の校正オプション

a-blog cmsでは、国産ならではの、日付を和暦に変換する校正オプションもあります。下記のサンプルでは、YY-mm-dd形式で入力されたカスタムフィールド「my_birth」を、和暦で表示しています。

以下は私のお誕生日です。なにかください。


acms_corrector_wareki.html

{my_birth}[wareki('年n月j日')] -> 1975-03-26 -> 昭和50年3月26日



校正オプションを自作する


自作オプションが必要となる例

acms_corrector.jpg

これは、CMSMix Sapporo Vol.4のハンズオンのスクリーンショットです。

日本将棋連盟のプロ棋士のデータをa-blog cmsで表示したものです。

一般に日本の芸道は、漢数字の「段」でランク分けされ、サイトによっては「段位が高い順」での表示を求められます。漢数字でもソートは可能ですが、半角数字にしておいたほうが無難です。

このサンプルでは、「kanjinum」校正オプションを自作し、数字を漢数字に変換しています。


作り方

a-blog cms内の以下のファイルをエディタで開き、「ACMS_User_Corrector」クラスにpublic関数を追加します。

php/ACMS/User/Corrector.php

実際のファイルは既にサンプルコードが入っていますが、アウトラインは以下の通りです。


acms_corrector_outline.php

<?php

class ACMS_User_Corrector
{

public static function sample($txt, $args = array())
{
// 校正オプション[sample]の処理
// 変数「$txt」に直前のa-blog cmsの変数の値が入る
// 第二引数にarrayを定義すると、文字列で補助値を渡すことができる
}

public static function kanjinum($txt)
{
// 校正オプション[kanjinum]の処理
// 第二引数はないので、補助値を渡さないで使う前提
}

}



処理の流れ


  • 校正オプションと同じ名前の関数が呼び出される

  • 変数「\$txt」に、直前のa-blog cmsの変数の値が送られる

  • 関数から「return」で返された値を、本来の変数の値に変わって表示する

最も単純な構造だとこうなります。変数の内容が何であっても「_:(´ཀ`」∠):_」にして返します。


acms_corrector_simple.php

    public static function simple($txt)

{
return '_:(´ཀ`」∠):_';
}
}


漢数字変換のサンプル

こちらで公開されている関数をそのまま流用できます。変数「\$outstr」に、変数「\$txt」を処理した内容を入れて返します。

PHPで半角数字を漢数字にする | ぱふぅ家のホームページ

https://www.pahoo.org/e-soul/webtech/php03/php03-05-01.shtm


acms_corrector_kanjinum.php

    public static function kanjinum($txt)

{
// 例 {var}[kanjinum]
// {var}の中は整数でなければならない

static $kantbl1 = array(0=>'', 1=>'一', 2=>'二', 3=>'三', 4=>'四', 5=>'五', 6=>'六', 7=>'七', 8=>'八', 9=>'九', '.'=>'.', '-'=>'-');
static $kantbl2 = array(0=>'', 1=>'十', 2=>'百', 3=>'千');
static $kantbl3 = array(0=>'', 1=>'万', 2=>'億', 3=>'兆', 4=>'京');

$outstr = '';
$len = strlen($txt);
$m = (int)($len / 4);

//一、万、億、兆‥‥の繰り返し
for ($i = 0; $i <= $m; $i++) {

$s2 = '';

//一、十、百、千の繰り返し
for ($j = 0; $j < 4; $j++) {

$pos = $len - $i * 4 - $j - 1;

if ($pos >= 0) {
$ch = substr($txt, $pos, 1);
if ($ch == ',') continue; //カンマは無視

$ch1 = isset($kantbl1[$ch]) ? $kantbl1[$ch] : '';
$ch2 = isset($kantbl2[$j]) ? $kantbl2[$j] : '';

//冒頭が「一」の場合の処理
if ($ch1 != '') {
if ($ch1 == '一' && $ch2 != '') $s2 = $ch2 . $s2;
else $s2 = $ch1 . $ch2 . $s2;
}
}
}

if ($s2 != '') $outstr = $s2 . $kantbl3[$i] . $outstr;

}
return $outstr;
}
}



実際に利用する

以下のように書くだけです。


acms_corrector_kanjinum_tmpl.html

{player_lank}[kanjinum]段



その他の校正オプションの自作例

サイトによっては、以下のようなものを作ると便利かもしれません。


  • 商品番号を別途サーバーに置いている商品情報APIに渡し、取得した情報を返す

  • 変数が空のときのデフォルト値を、表示しているコンテンツによって変更する

  • 正規表現検索を行い、特定のキーワードが入っていればマークアップする