了解しました。
というわけで、初めてCMSDのプログラム改造を行ってみました。
cmsdesigner/include/viewcore.php.inc
#2537行 あたりにあるdaysago属性を改造
※属性の新規追加が面倒だったので
コード: 全て選択
/* ---------------------------------------------------------------
* エントリノードから日付を取得し、「今日」との日数差を算出してdaysago属性として追加する。
* $xmlEntry : エントリのノード。
*/
function set_daysago_attribute( &$xmlEntry )
{
$today = getdate();
$nowyear = $today[year];
$nowmonth = $today[mon];
$nowday = $today[mday];
$year = $xmlEntry->get_attribute('year');
$month = $xmlEntry->get_attribute('month');
$day = $xmlEntry->get_attribute('day');
$dtEntry = mktime( 0, 0, 0, $month, $day, $year );
$dtNow = mktime( 0, 0, 0, $nowmonth, $nowday, $nowyear );
$daysago = intval(($dtNow - $dtEntry) / ( 24 * 60 * 60 ));
$xmlEntry->set_attribute('daysago', $daysago );
}
改造箇所
1)getdate を使って年月日までを取得
$today = getdate(); ← 今日を取得
$nowyear = $today[year]; ← 今の年
$nowmonth = $today[mon]; ← 今の月
$nowday = $today[mday]; ← 今の日
2)その取得年月日を比較させるためのdtNowに格納
$dtNow = mktime( 0, 0, 0, $nowmonth, $nowday, $nowyear );
改造はここまで。
これで24時間を1日とせず日ごとの指定が可能
あとは、xsl を遡りたい日数分製作(力技?w
下記は一週間分のサンプル
file: sche.list.m0.design.xsl
<xsl:if test="@daysago=0"> ... </xsl:if>
略
file: sche.list.m6.design.xsl
<xsl:if test="@daysago=-6"> ... </xsl:if>
で、PHPで各日毎に呼び出し
file: schedule.php
<cmsd:entrylist name="sche" design="m0" pageno="top" />
略
<cmsd:entrylist name="sche" design="m6" pageno="top" />
でとりあえずは上手くいってます。
どこか問題があればご指摘下さい。
それと、改造しててひとつ気になることがありました。
元々のdaysago指定について、Entryの日付は時間以下が切られているのにNowには現在の秒数までが格納されている。
ということは、daysagoで得られる1は正確な24時間前でもないのでは??
$dtEntry = mktime( 0, 0, 0, $month, $day, $year );
$dtNow = mktime();
以上、未熟ながらご報告まで。