WordPressユーザーのbaserCMS覚え書き


固定ページに記事の登録日とか更新日を出力する

[2014.1.2追記]
以下の記事はbaserCMS2系に関する内容です。baserCMS3に対応したコードを別記事で紹介していますので、よろしければご参照ください。

固定ページに記事の登録日とか更新日を出力する(baserCMS3編)


という関数が、なぜかないのですよね。baserCMSには。WordPressだと the_time() っていう関数(テンプレートタグ)があって、ループ内にさえ置いておけば「投稿」であろうが「固定ページ」であろうが出力できるのですけど。

でも、管理画面の「固定ページ管理」を見ると、リストの右端のカラムにページの登録日・更新日が出ているので、データとしては保持しているはず。隠れキャラを探すような気持ちでソースを追いかけていきました。探検探検。

で /baser/models/page.php や /baser/views/helpers/bc_page.php を読んでみたところ、登録日は

<?php echo $bcPage->data['Page']['created'] ?>

更新日は

<?php echo $bcPage->data['Page']['modified'] ?>

で出力できることがわかりました。

ただ、このままだと、PHPの date() 関数でいう Y-m-d H:i:s のフォーマットで出力されてしまいます。

任意のフォーマットで出力したいときは、PHPの strtotime() 関数をいったん通して、それを date() 関数で再度整形しましょう。たとえば、このページの「最終更新日」欄のような形式にしたいときは下のようなコードになります。

<?php echo date( 'Y.n.j', strtotime( $bcPage->data['Page']['modified'] ) ) ?>

ちなみに、固定ページに関するもろもろの情報は

<?php var_dump( $bcPage->data ) ?>

でゴソっと確認できるので、興味のある方はぜひどうぞ。


[2013.11.3追記]
上に示したコードだと検索結果一覧ページで「1970.1.1」の日付を出力するので、その回避方法について別の記事でまとめました。
WordPressの is_search() みたいなものをbaserCMSで実装する


[2013.11.9追記]
上に示したコードだと、

  • フロントページ
  • カテゴリーのインデックスページ
  • 子ページのない固定ページ

にて、うまく更新日が取得できないようです。

$bcPage->data['Page']['modified']

がNULLとなり、日付が「1970.1.1」になってしまいます。
(「このサイトと運営者について」のページがその状態です)

根本的な解決にはどうやらもう少し時間がかかりそうです。解決できたらこのページに追記します。


[2013.11.12追記]

さしあたり、

  • カテゴリーのインデックスページ
  • 子ページのない固定ページ

での不具合は解消しました。コード自体に問題が……というのでなく、本サイトのコードのつくりかたそのものに問題がありました。ああ恥ずかしい。

もともと本サイトのフロントページでは、コンテンツの大分類(「このサイトと運営者について」「WordPressとbaserCMSの関数比較」など)で $bcBaser->link() を使ってのリンク指定をしていました。

ところが、この関数の第2引数の指定がまずかった。

公式の関数リファレンスにあるように、第2引数は基本的にスラッシュから始まるパスを指定する必要があります。ところが私の場合、最初にスラッシュを入れなかったばかりに、「更新日が出ない……」としていた「このサイトと運営者について」が

http://baser-for-wper.tecking.org/pages/about

を指すようになってしまっていたのです(スラッシュを入れると http://baser-for-wper.tecking.org/about を指してくれる)。URLが違うだけでページそのものは表示されるので、完全に見落としていました。

どうやら、スラッシュを入れない指定だと $bcPage->data['Page']['modified'] が生成されないようで、上に示したような事態が発生していたというわけでした。