autocalendar.inc.php

サマリ表示中のページに対応した月を表示するカレンダー
リビジョン080521
対応バージョン1.4.7
投稿者tomas3?
投稿日2008-06-09 (月) 16:33:51

概要

calendar2プラグインを日記などで使用していて、カレンダーをmenubarに表示している場合を想定しています。

たとえば、次のようなページがあり、

  • 日記/2008-05-31
  • 日記/2008-06-01
  • more...

menubarの中で

#calendar2(日記,off)

とすれば、常にカレンダーが表示できます。 そして、calendar2プラグインの変わりに、本プラグインを使用し、

#autocalendar(日記)

とすると、日記/2008-05-31のページを表示している場合は、2008年5月のカレンダーを、日記/2008-06-01のページを表示しているときは、2008年6月のカレンダーを表示します。

mixiのカレンダーがこうなっていて、日記を順番に見ていくときに便利だと思ったので作成しました。

補足

  • 書式ですが、# autocalendar(ベースとなるページ名) で使用してください。引数省略不可です。
  • 受付範囲を勝手に1900年から2100年にしてあります。
  • 定数の定義部分のcalendar2をminicalendarにすれば、pukiwiki plus!のプラグインも使えます。
  • 1.4.7 utf-8 でしかチェックしていません。改造したcalendar2プラグインと一緒に使用中です。
  • 私の初のPHPコードです。ダメなところがあれば、教えてください。

コード

ファイルが添付できませんので、以下のコードを、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)) : "";
}

?>

ライセンス

GPL(?よくわかりませんが、コピーレフトなやつで)

コメントお願いします。

  • 引数にhtmlspecialchars()してませんが、calendarプラグインにそのまま渡すので、しないようにしてますが、いいんですよね… -- tomas3? 2008-06-09 (月) 18:09:52
  • デフォルトのカレンダーは大きすぎて、CSSをカスタマイズできる人しかmenubarへ入れていない予感… -- tomas3? 2008-06-09 (月) 19:39:43

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-03-08 (月) 16:49:54
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u1. HTML convert time: 0.245 sec.

OSDN