XPressME Integration Kit

フォーラム

Re: 最近の記事内容ブロックの日付による抽出について

#3073
toemon
キーマスター

モジュール外にブロックを配置した場合、ブロックはキャッシュを利用して表示されます。(詳細については「ブロックのキャッシュ」を参照ください。)

このキャッシュはXPressMEモジュールのトップにアクセスした場合と、投稿の変更、追加、が行われた場合に更新されます。

従って、抽出範囲を「本日」に設定した場合、このキャッシュ更新が行われた時点の日時をdate()関数で取りだし、その時点から、24時間以内を本日と仮定しています。(カレンダーでの日付という意味ではないということに留意ください。)

また、比較日付がキャッシュ更新時であることから、リアルタイム性も期待できないことになります。

極端な話、10日間記事の更新、追加がなく、10日間XPressMEモジュールトップへのアクセスがない場合は、本日というのは10日前のことになってしまいます。

そういった意味では、本日の投稿というのはあまり意味がなくなってしまうかもしれません。

リアルタイムに表示したい場合は、XOOPSのカスタムブロックで「カスタム (PHP eval())」タイプのブロックを新規追加して、PHPコードでXOOPS側から直接DB参照するしかなさそうです。

カスタムブロックへの記述例

<code>global $xoopsDB,$xoopsUser;<br />
<br />
$post_db = 'xdb_xp_trunk_posts';<br />
$base_url = 'http://localhost/cube/modules/xp_trunk/';<br />
$post_num =10;<br />
$disp_day_num = 1;<br />
<br />
$myts =& MyTextSanitizer::getInstance();<br />
$where = "post_status ='publish' AND post_type='post'";<br />
$date_where = "AND post_date > date_add(now(), interval -$disp_day_num day)";<br />
<br />
$sql = "SELECT ID, post_title FROM  $post_db WHERE $where $date_where ORDER BY post_date DESC";<br />
<br />
$result = $xoopsDB->query($sql, $post_num, 0);<br />
while ( $myrow = $xoopsDB->fetcharray($result) ) {<br />
echo '<a href="' . $base_url . '?p=' . $myrow["ID"] . '">' . $myrow["post_title"] . '</a><br />';<br />
}</code>

($post_dbや$base_urlは環境に合わせて書き換えてください。)