Web 制作のことを中心に、ちょっとした Tips などを掲載しています。「自分用メモ」が基本スタンス。

btmup Blog

CMS PHP

SOY CMS で記事の日付に曜日を日本語(漢字)で表示する方法。

投稿日:

[2011.08.03 追記 「$information["create_date"]」の仕様変更、および、「strtotime」関数によるタイムスタンプへの変換についての記述を追加しました。]

ググってもあまり情報が無かったので、とりあえずメモ。

SOY CMS でブログ記事の日付を表示するとき、「cms:id="create_date"」で作成日を取得することができますが、一緒に「cms:format」を指定することで日付のフォーマットを任意に変更できます。
例えば「cms:format="Y年m月d日"」と指定したときは、「2011年03月08日」という具合。
フォーマット指定の書式は、PHP の date 関数と同じものが使えます。
»PHP: date - Manual

ただ、date 関数だけでは、曜日を日本語(というか漢字)で表示することができません
英語だけで良ければ、フォーマットに一文字追加するだけで良いんですけどね(フルスペルなら「l」(小文字の L)、3 文字なら「D」)。
残念ながら日本語の場合は date 関数によって数値を取得し、それに応じた文字に置き換える必要があります。

で、色々検索してみたりしたんですが、意外と見付からなかったので、自分で組んでみました。

SOY CMS で曜日を日本語(漢字)で表示する

結論から言うと、出来上がったのは以下のようなコードです。
(もっとスマートな方法があるかも知れませんが、まぁ動いてるので良し)

トップページの一覧表示を想定してるので、他のページ(テンプレート)で使う場合は、適宜書き替えてください。

<!-- block:id="information" -->
<p class="date"><!-- cms:id="create_date" cms:format="Y年m月d日" -->日時<!-- /cms:id="create_date" --><?php
	$dayNum = date(w, $information["create_date"]);
	$day = array("日", "月", "火", "水", "木", "金", "土");
	echo "(" . $day[$dayNum] . ")";
?></p>
<p class="title"><!-- cms:id="title" -->記事タイトル<!-- /cms:id="title" --></p>
<!-- /block:id="information" -->

「日時」と「記事タイトル」の部分は、SOY CMS 標準のテンプレートタグなので説明は省略。
(詳しくは公式マニュアルへ)

追加した PHP では、まず「$information["create_date"]」で記事のタイムスタンプを取得しています。
(参考:SOY CMS フォーラム • トピックの表示 - テンプレート内でのPHPコードについて
それを PHP の date 関数に放り込んで、フォーマット指定を「w」とすることで曜日を数値で取得(0 〜 6)。
曜日を表示するための文字は「$day」に配列で定義しているので、date 関数によって得られた数値に応じて表示する文字を指定することができる訳です。

処理自体は PHP そのものですので、タイムスタンプさえ取得できれば、SOY CMS 以外にも応用可能です。
(というか、PHP を触るような人からすれば、これくらいの処理は定番なんでしょうけどね……)

タイムスタンプに変換する方法(2011.08.03 追記)

SOY CMS のバージョンアップに伴い、「$information["create_date"]」で取得できる値が変更されたようです。
(どのバージョンで変更されたかは不明ですが、1.3.2 は旧仕様のままで、1.3.4a の時点で変更されていました)

これまでは「1312257201」というタイムスタンプの形式で取得できたのですが、新しい仕様では「2011-08-02 11:10:10」のように整形された日付として取得することになります。
こうなると、上記の方法では正しく曜日を取得できません(僕の場合は、すべて「(木)」になりました)。

ではどうするかというと、date 関数で正しく処理を行うために、「$information["create_date"]」で取得した値をタイムスタンプに変換してやる必要があります。
その処理を行うのが、「strtotime」という関数です。
»PHP: strtotime - Manual

実は、SOY CMS のフォーラムで教えていただきました。
»SOY CMS フォーラム • トピックの表示 - 「create_date」の仕様、タイムスタンプの取得について

という訳で、タイムスタンプへの変換処理を加えたコードは、以下のようになります。

<!-- block:id="information" -->
<p class="date"><!-- cms:id="create_date" cms:format="Y年m月d日" -->日時<!-- /cms:id="create_date" --><?php
	$dayNum = date(w, strtotime($information["create_date"]));
	$day = array("日", "月", "火", "水", "木", "金", "土");
	echo "(" . $day[$dayNum] . ")";
?></p>
<p class="title"><!-- cms:id="title" -->記事タイトル<!-- /cms:id="title" --></p>
<!-- /block:id="information" -->

新しいバージョンの SOY CMS を使っていて、うまく動作しない場合は、こちらの方法を試してみてください。




-CMS, PHP
-, , , , , ,

Copyright© btmup Blog , 2024 All Rights Reserved Powered by AFFINGER5.