** autocalendar.inc.php [#m76387ad]
|RIGHT:100|LEFT:360|c
|~サマリ|表示中のページに対応した月を表示するカレンダー|
|~リビジョン|080521|
|~対応バージョン|1.4.7|
|~投稿者|[[tomas3]]|
|~投稿日|&new{2008-06-09 (月) 16:33:51};|
***概要 [#cba99e5d]
[[calendar2プラグイン>PukiWiki/プラグイン/1.4#x3bbd0a5]]を日記などで使用していて、カレンダーをmenubarに表示している場合を想定しています。
たとえば、次のようなページがあり、
-日記/2008-05-31
-日記/2008-06-01
-more...
menubarの中で
#calendar2(日記,off)
とすれば、常にカレンダーが表示できます。
そして、calendar2プラグインの変わりに、本プラグインを使用し、
#autocalendar(日記)
とすると、日記/2008-05-31のページを表示している場合は、2008年5月のカレンダーを、日記/2008-06-01のページを表示しているときは、2008年6月のカレンダーを表示します。
mixiのカレンダーがこうなっていて、日記を順番に見ていくときに便利だと思ったので作成しました。
***補足 [#nb033000]
-書式ですが、# autocalendar(ベースとなるページ名) で使用してください。引数省略不可です。
-受付範囲を勝手に1900年から2100年にしてあります。
-定数の定義部分のcalendar2をminicalendarにすれば、pukiwiki plus!のプラグインも使えます。
-1.4.7 utf-8 でしかチェックしていません。改造したcalendar2プラグインと一緒に使用中です。
-私の初のPHPコードです。ダメなところがあれば、教えてください。
***コード [#zffa2973]
ファイルが添付できませんので、以下のコードを、pluginフォルダにautocalendar.inc.phpとして保存してください(エンコードに注意願います)
calendar2プラグインをラップするように書いています。グローバル変数&titleを調べて、引数で指定したページの子ページを表示しているとみなせば、年月指定つきでcalendar2プラグインを呼び出します。その他の場合は、そのままcalendar2プラグインを呼び出しています。
<?php
//**********************************
// autocalendar ver.080521
// by tomas3
//
// for calendar2 plugin of Pukiwiki
//**********************************
//choose calendar2 or minicalendar(Pukiwiki Plus!).
define('PLUGIN_AUTOCALENDAR_BASEPLUGIN', 'calendar2');
function plugin_autocalendar_convert()
{
//プラグイン引数チェック
//手抜き。省略されたら、現在のページにするのが普通のはず
$args = func_get_args();
if(count($args) != 1)
return "<span style=\"color:red\">plugin autocalendar: no target parameter.</span>";
$target = $args[0];
//同じ親か
global $title;
if(mb_substr($title, 0, mb_strlen($target) + 1) != $target . "/") {
// return "debug: 同じ親じゃ無い $target ";
} else {
//子ページかどうか
$sub_title = mb_substr($title, mb_strlen($target) + 1);
// return "debug: " . $sub_title;
if(false) {
//ここのifに、条件を厳しくするコードが入れられます。ex.孫 があるページはダメ
//現在は、孫ページがあっても、子ページ名が日付フォーマットと一致していれば動作させる
} else {
$sub_title = mb_substr($sub_title, 0, mb_strlen("yyyy-mm-"));
//日付であるかの確認 1900年から2100年としてある。(yyyy-mm-)
if(
strlen($sub_title) != mb_strlen($sub_title) ||
mb_substr($sub_title, 4, 1) != "-" ||
mb_substr($sub_title, 7, 1) != "-"
) {
// return "debug: 'yyyy-mm-*'じゃない $target ";
} else {
$year = mb_substr($sub_title, 0, 4);
$month = mb_substr($sub_title, 5, 2);
if(
(int) $year < 1900 ||
(int) $year > 2100 ||
(int) $month < 1 ||
(int) $month > 12
) {
// return "debug: 日付のレンジがおかしい $target ";
} else {
//ここまで来たら、年月を指定するべきときのはず
array_push($args, $year . $month);
}
}
}
}
//一覧表示offオプションを追加してcalendarプラグインを呼び出し。
array_push($args, "off");
return exist_plugin_convert(PLUGIN_AUTOCALENDAR_BASEPLUGIN) ?
do_plugin_convert(PLUGIN_AUTOCALENDAR_BASEPLUGIN, csv_implode(',', $args)) : "";
}
?>
***ライセンス [#l0f10d83]
GPL(?よくわかりませんが、コピーレフトなやつで)
***コメントお願いします。 [#m6aa51a7]
- 引数にhtmlspecialchars()してませんが、calendarプラグインにそのまま渡すので、しないようにしてますが、いいんですよね… -- [[tomas3]] &new{2008-06-09 (月) 18:09:52};
- デフォルトのカレンダーは大きすぎて、CSSをカスタマイズできる人しかmenubarへ入れていない予感… -- [[tomas3]] &new{2008-06-09 (月) 19:39:43};
- この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5021837.htm?info=viagra viagra =]] -- [[viagra]] &new{2010-03-08 (月) 12:24:34};
#comment
//#comment