**一定の時間ごとにメッセージを変えるプラグイン [#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


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.103 sec.

OSDN