4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-11

この記事は、a-blog cms Advent Calendar 2017の10日目の記事です。
すみませんリマインダの日付間違えてて一日遅れました。

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

校正オプションとは

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

最もよく使われるのが、他の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に渡し、取得した情報を返す
  • 変数が空のときのデフォルト値を、表示しているコンテンツによって変更する
  • 正規表現検索を行い、特定のキーワードが入っていればマークアップする
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?