編集履歴
2007-05-07T18:40:49+09:00 application/xhtml+xml対応プラグインが思いっきり間違えていたので修正&スリム化しました。
こんにちは。
MODxで「できるといいなあ」と思ったことを、練習としてプラグインとスニペットにしてみました。
既にたくさんのプラグイン・スニペットがある中で、たいしたものではないのでかなり気が引けるのですが、せっかくなので投稿してみます。
まだ、MODxをいじり初めて間もない&PHPも不慣れなので変なことをしていたらすみません…ご指導いただければと思います。
【1】年数表示スニペット
ある日からある日までの年数を表示します。年齢表示や「○○歴: ○○年」とかを毎年、自動表示したくて作ってみました。
使い方
1.「スニペット」からスニペット名「PhiYear」で「新規作成」
2.ページの内容等の表示したい位置に
書式に従って記述
書式
[[PhiYear?begin=`
日付`]]
[[PhiYear?end=`
日付`]]
[[PhiYear?begin=`
日付`&end=`
日付`]]
※begin, endはどちらも省略可能。省略した場合は現在の日付が使われます。
※日付の書式は「/」「-」「.」のいずれかで区切られたもので、年は4桁、月日は1桁か2桁で指定。
yyyy/mm/dd
yyyy.mm.dd
yyyy-mm-dd
yyyy-mm.dd 等
$pattern = '/^(\d{4})[-\/\.](\d{1,2})[-\/\.](\d{1,2})$/';
$now = date('Y-m-d');
$begin = preg_match($pattern, $begin, $matches) && checkdate($matches[2], $matches[3], $matches[1]) ? $begin : $now;
$end = preg_match($pattern, $end, $matches) && checkdate($matches[2], $matches[3], $matches[1]) ? $end : $now;
list($by, $bm, $bd) = explode('-', preg_replace("/[\.\/]/","-", $begin));
list($ey, $em, $ed) = explode('-', preg_replace("/[\.\/]/","-", $end));
$PhiYear = $ey - $by;
if ($em * 100 + $ed < $bm * 100 + $bd) $PhiYear --;
return $PhiYear;
【2】 application/xhtml+xml対応プラグイン
[PLUGIN] application/xhtml+xml 1.1
http://www.modxcms.com/PLUGIN-applicationxhtmlxml-1.1-1252.html
を参考にさせていただきました。Content-Type「application/xhtml+xml」に未対応のUAには「text/html」として出力するプラグインです。
OperaやAnother HTML-lintにも対応したコードに変更してみました。コード自体はよく色々なブログ等で紹介されているものです。
使い方
1.新規プラグインにコードを入力後、「OnWebPagePrerende」イベントをチェックして保存
2.「サイト設定」の「カスタムコンテントタイプ」に「application/xhtml+xml」を追加
3.ページの設定で「コンテントタイプ」に「application/xhtml+xml」を選択
if ($modx->documentObject['contentType'] == 'application/xhtml+xml') {
$accept = $_SERVER['HTTP_ACCEPT'];
$ua = $_SERVER['HTTP_USER_AGENT'];
$charset = $modx->config['modx_charset'];
$supported = eregi('Opera', $ua) || eregi('Another_HTML-lint', $ua) || eregi('application/xhtml\+xml', $accept);
if ($supported ) {
header ('Content-type: application/xhtml+xml; charset={$charset}');
} else {
header ('Content-Type: text/html; charset={$charset}');
}
}