Dittoで出力したリストにNEWマークをつける(2)
前回作成したPHxを利用してのNEWマークが、微妙に上手く働かなかったので、再度別方向からのアプローチ。何が悪かったのか、記事が増えたにも関わらずマークがつかなかったので…。
前回と同じトピックスを参考(→こちら)に、PHxではなくDittoの拡張機能を利用してのNEWマークをつける。
まず、/assets/snippets/ditto/extenders/の下に、newicon.extender.inc.phpを作成する。他のPHPファイルと同じく、改行はLF。
ソースコードは
<?php $placeholders['newicon'] = array("editedon,createdon,pub_date","whatsNew"); $newDays = isset($newDays) ? $newDays : 7; $newMark = isset($newMark) ? $newMark : " <span class=color_text>New!!</span>"; $GLOBALS['ditto_newicon'] = compact("dateSource","newDays","newMark"); if (!function_exists("whatsNew")) { function whatsNew($resource) { global $modx, $ditto_newicon; $now = time(); $timestamp = ($resource[$ditto_newicon["dateSource"]] != "0") ? $resource[$ditto_newicon["dateSource"]] : $resource['createdon']; $erapse = $now - (intval($timestamp) + $modx->config["server_offset_time"]); if ($erapse <= $ditto_newicon["newDays"]*60*60*24) { return $ditto_newicon["newMark"]; } return ""; } } ?>
Dittoを呼び出すスニペットコールに
&extenders=`newicon`
と付け加えることで、NEWマークを呼び出すプレイスホルダ[+newicon+]が利用できるようになる。このとき、dateSourceを指定しなければきちんと働かない模様。
利用する箇所によってマーク表示の日数を変えることも可能で、
&newDays=`3`
とすれば3日間表示される。
省略した場合は7日。
また、Dittoを呼び出すときに
&newMark=`新着!`
などとすることで表示を変えることができる。ただし、HTMLタグは限定的にしか利用できない。「=」などはバグのせいでスニペットに渡せないっぽいので、ストロングタグなどしか利用できない?
ただしこれはDittoから指定する場合に限り、デフォルトの設定
$newMark = isset($newMark) ? $newMark : " <span class=color_text>New!!</span>";
の中では「=」も利用できるようだ。