• カテゴリ プログラミング の最新配信
  • RSS
  • RDF
  • ATOM

blog - プログラミングカテゴリのエントリ

Xoops Cubeのフォーラムとして、newbb+fileupを使っているのだが、既読管理にCookieを使っているようで、4KB制限のためフォーラムの投稿が約150スレッドを超えると既読管理ができなくなる。
そこで、新しく投稿されたスレッドは、投稿日時から一定の期間、「New !」といったフラグが表示されるように改造した。

これまで、結構、newbbはテンプレート管理でいろいろ改造してきたが、今回はトップメニューに表示される最近の投稿を新しい順に表示するnewbb_block_new.htmlを改造する。
XoopsはテンプレートにSmartyを使っているので、Smartyで日付計算をする。

まず、$smarty.nowで現在日時のタイムスタンプを取得して、Newを表示する日数の秒を引き算して、スレッドの投稿日時と比較する。Smartyでは、算術計算はmath equationやassignなどを使って変数を宣言して行うので、やや面倒な書き方になる。
また、newbbの日付の書式がデフォルト(2010-3-9など)だと、日付の文字列の比較ができないので、フォーマットをmysql(2010-03-09など)に変更しておく。

たとえば、10日間、New !という文字列を$topic.timeの後に表示するには、以下のような感じ。

  <{math equation=x*24*3600 x=10 assign=deldays}>
  <{math equation=x-y x=$smarty.now y=$deldays format="%d" assign=nowdelay}>
   <{if $nowdelay|xoops_formattimestamp:"mysql" < $topic.time}><FONT COLOR="RED">New !</FONT><{else}> <{/if}>

modules\legacy\language\ja_utf8\global.phpにある日付の書式設定をすべて変更(2010-03-09など)しておく。
//define("_DATESTRING","Y-n-j G:i:s");
define("_DATESTRING","Y-m-d G:i:s");
//define("_MEDIUMDATESTRING","Y-n-j G:i");
define("_MEDIUMDATESTRING","Y-m-d H:i");
//define("_SHORTDATESTRING","Y-n-j");
define("_SHORTDATESTRING","Y-m-d");

ちなみに、Smartyのコメントアウトは、
   <{* hogehoge *}>
などとすればよい。
スポンサードリンク
検索

blogカテゴリ一覧

blogger一覧

blogアーカイブ