日時の表記を自動更新する汎用スニペットを作る

部品の使い方や応用ノウハウ
アバター
yama
管理人
記事: 2853
登録日時: 2009年7月29日(水) 02:50

日時の表記を自動更新する汎用スニペットを作る

投稿記事by yama » 2010年5月10日(月) 12:57

http://modxcms-jp.com/bb/viewtopic.php?f=16&t=293
上記では、年度表記を自動更新するスニペットを作りました。

コード: 全て選択

<?php
return date('Y');
?>

▲スニペットの内容です。簡単です。フッタのコピーライト表記に使うならこれで十分です。

情報系のページに「2010年5月時点の情報です」などと付記することがありますが、これも基本的には同じで

コード: 全て選択

<?php
return date('Y年n月');
?>

▲これでオーケーです。「n」というのが今月の月を出力する変数です。古くからパソコンやってる人だとマクロ文字というと分かりやすいかも。詳細についてはphpのdate関数の解説を見てください。時間や分・秒なども出力できます。

どちらも機能がほとんど同じなので、まとめてしまうことができます。違うのは「Y」と「Y年n月」だけです。なので、この部分だけを外部から必要に応じて与えることにすればよいのです。外枠のデザインはサイト全体で共通で、中身(コンテンツ)だけを編集対象とするテンプレートの考え方に似てますね。

どうするか。回答を書きます。

コード: 全て選択

<?php
return date($format);
?>

▲スニペット本体はこう書きます。スニペット名は「現在日時」とします。

コード: 全て選択

[[現在日時?format=Y年n月]]時点の情報です

▲スニペットコール側ではこう書きます。

コード: 全て選択

Copyright [[現在日時?format=Y]]

▲著作権表記ではこう。以上です。

「現在日時?format=Y年n月」のformatの値「Y年n月」を、
スニペットコール内で$formatとして参照することができます。あとはphpの教科書どおり。MODx独自の関数などはいっさい使いません。

「現在日時?format=Y年n月」という書式は、URLのクエリ文字列に似ています。
http://forum.modx.jp/viewtopic.php?f=16&t=294
今見ているトピックだと上記のようになっているはずですが、これは16番目のフォーラムの293番目のトピックを表示せよというコマンドそのものです。URLクエリまたはクエリストリングなどと呼ばれます。「パラメータをGETで与える」などと表現することもあります。

ということは、

コード: 全て選択

<?php
$format=Y年n月;
return date($format);
?>

こう書けば「Y年n月」に固定してしまうことができるわけです。せっかく汎用化のテクニックを学んだところで意味なさそうに思えますが、これがどこで役に立つのかというと、多言語対応のスニペットを入手して、それを日本語環境でしか使わないのが明確な時に「$language=japanese-utf8;」と追記しておけば、スニペットコールを書くたびに「スニペット名?language=japanese-utf8」と書く必要がなくなりますよね。phpを理解するためのコツとして覚えておくとよいと思います。
(※スニペット編集画面の「既定のプロパティ」で設定することもできます)

ちなみにスニペットというのはもともとは「切れ端」「断片」という意味です。DittoやWayfinderくらいになると切れ端どころか大風呂敷レベルですが、MODxの開発が始まった頃はこのくらいの数行程度の小さなスニペットがフォーラムに数多く集積されて、フォーラム参加者同士でにぎわってました。小さなスニペットを書くことは、MODxの楽しさの原点のひとつと言えます。多機能なスニペットの使い方を習得する以前に、基本的なphpの文法を学んでスニペットを手作りしてみるのも面白いです。

“事例・活用例” へ戻る