btmup Blog

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

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
-, , , , , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

SOY CMS でルート設定するとアクセスできなくなってしまうディレクトリを救出する方法

SOY CMS でサイトを制作して、ドメイン直下にページを公開したい場合は「ルート設定」をします。 その意味や方法についてはマニュアルを見ていただくとして、今回のテーマは「ルート設定からの逃れ方」。 …

no image

CMSについて独り言。

経験則だけど、たぶんものすごく一般論。 いわゆる「Web 担当者」が、文書の作成や編集をするときの基準は MS Office。 そういう人たちの多くは「インターネットは何でもできる」と思っていて、CM …

no image

国産 CMS のセミナー開催 – CSS Nite。

»国産CMSにフォーカスしたCSS Niteを6月27日に開催 – CSS Nite公式サイト ↑タイトルのまんまですが、国産 CMS に関するセミナーが開かれるようです。 採 …

no image

SOY CMS でエントリーの要素が空のとき、代替表示するための設定があった。

ちょっと諸事情により SOY CMS の使い方をまとめたりしてるんですが、マニュアルに以下のような記述があることに初めて気付きました。 ※title, content, moreが空の時に表示する値を …

no image

EC サイト構築 ASP の「MakeShop」で注意する点など(走り書き)。

EC サイトを構築するために「MakeShop」という ASP を使用しているのですが、やっぱり普通にホスティングを借りてガシガシ作るのとは勝手が違います。 色々と分からなかったり詰まったり「あー、こ …