**一定の時間ごとにメッセージを変えるプラグイン [#j711d959] |RIGHT:70|LEFT:410|c |~バージョン|| |~投稿者|[[aromatherapy]]| |~状態|提案| |~投稿日|&new{2012-05-28 (月) 14:24:07};| ***メッセージ [#i796e2a3] 例えば、周期を48時間として start(開始時刻)を19:00として、その27時間後をend(終了)とする場合 ■開始~終了時刻まで好きなメッセージ表示 「開始してから19時間が経過。終了まで残り8時間です。」みたいなかんじで経過と残り時間とかも表示したいんですが、実現難しいですか? ■時間外はまた違うメッセージを表示 「休憩中です」みたいに使おうと思ってるんですが、開始までの時間がカウントダウンさせたりもしたいです・・ ***とりあえず作ってみました。 [#y5575914] &ctimer(開始時刻,期間,周期,表示形式){個別メッセージ}; ''開始時刻'' php関数strtotimeが処理できる文字列.例えば"yyyy/mm/dd hh:mm"~ ''期間'' イベント期間を時間単位で~ ''周期'' イベントの開始周期を時間単位で。省略時は周期開始されない~ ''表示形式'' remain イベント期間中の場合、残り時間の表示。~ past イベント期間中の場合、経過時間を表示。~ cdown イベント期間外の場合、次の開始時刻までの残り時間を表示。~ &ctimer(2012/05/29 10:00:00,14,24,remain,cdown){''営業時間''}; 上の例だと、毎日(24時間周期で) 10時~24時(14時間)をイベント期間とする。期間中は残り時間、期間外は次の開始時間までカウントダウン &ctimer(2012/05/27 19:00,27,48,past,remain){開始 };&ctimer(2012/05/28 22:00,21,24,remain){休憩中 }; 2つ組み合わせて、期間中は「開始 hh時間mm分が経過。残りhh時間mm分です。」 期間外は「休憩中 残りhh時間mm分です。」 と言う表示になります。 <?php // License: The same as PukiWiki // PukiWiki - Yet another WikiWikiWeb clone. // $Id: ctimer.inc.php,v 0.01 2012/05/29 00:00:00 Kazuna Asato Exp $ define('PLUGIN_CTIMER_USAGE', '&ctimer(start,range,cycle){message};'); define('PLUGIN_CTIMER_PAST','$1が経過。'); define('PLUGIN_CTIMER_REMAIN','残り$1です。'); define('PLUGIN_CTIMER_CDOWN','開始$1前です。'); define('PLUGIN_CTIMER_HOUR','$1時間'); define('PLUGIN_CTIMER_MINUTE','$1分'); function plugin_ctimer_inline() { global $vars; $now=time(); $args = func_get_args(); if (count($args)<2){ return(PLUGIN_CTIMER_USAGE);} $mess0 =array_pop($args); $start0=array_shift($args); foreach($args as $v){ switch ($v){ case 'remain': $remain=1; break; case 'past': $past=1; break; case 'cdown': $cdown=1; break; default: if ($range0!=0){$cycle0=intval($v);}else{$range0=intval($v);} } } $start=strtotime($start0); if ($start<10000000){ return('ctimer error:illegal start time.');} $range=intval($range0); $cycle=intval($cycle0); $end=$start+$range*3600; // Unit is Hours. if($cycle>0){ if ($cycle<$range){return('ctimer error:cycle too small.');} $cycle=$cycle*3600; if($now>$end){ $ctimes=floor(($now-$start)/$cycle)+1; $start=$start+($cycle*$ctimes); $end =$end +($cycle*$ctimes); } } $rr=''; if (( $cdown)&($now<$start)){$rr.=plugin_ctimer_cdown( $now,$start);} // Count Down if (($start<=$now)&($now<=$end)){ if ( $past){$rr.=plugin_ctimer_past( $now,$start);} // Past if ($remain){$rr.=plugin_ctimer_remain( $now,$end );} // Remain } if ($rr!=''){$rr=$mess0.$rr;}; return ($rr); } function plugin_ctimer_fmt($p){ $r=''; if ($p>3600){ $ph=strval(intval($p/3600)); $r=str_replace("$1",$ph,PLUGIN_CTIMER_HOUR); } $pm=strval(intval(($p%3600)/60)); $r.=str_replace("$1",$pm,PLUGIN_CTIMER_MINUTE); return($r); } function plugin_ctimer_cdown($n,$s){ $t=plugin_ctimer_fmt($s-$n); $r=str_replace("$1",$t,PLUGIN_CTIMER_CDOWN); return($r); } function plugin_ctimer_past($n,$s){ $t=plugin_ctimer_fmt($n-$s); $r=str_replace("$1",$t,PLUGIN_CTIMER_PAST); return($r); } function plugin_ctimer_remain($n,$e){ $t=plugin_ctimer_fmt($e-$n); $r=str_replace("$1",$t,PLUGIN_CTIMER_REMAIN); return($r); } ?> ***コメント [#naf8d900] #comment