- 追加された行はこの色です。
- 削除された行はこの色です。
**一定の時間ごとにメッセージを変えるプラグイン [#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