#author("2017-07-18T01:48:32+09:00","","")
**一定の時間ごとにメッセージを変えるプラグイン [#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 イベント期間外の場合、次の開始時刻までの残り時間を表示。~

●1つのイベントを毎日(24時間毎に)実行する場合
 &ctimer(2012/05/29 10:00:00,14,24,remain,cdown){''イベント実施中''};

 上の例だと、毎日(24時間周期で) 10時~24時(14時間)をイベント期間とする。期間中は残り時間、期間外は次の開始時間までカウントダウン


●2つを組み合わせて、時間帯別に表示を変える場合
 &ctimer(2012/05/29 10:00:00,14,24,past,remain){開店 };&ctimer(2012/05/30 00:00:00,10,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.02 2012/05/30 00:00:00 Kazuna Asato Exp $
 
 define('PLUGIN_CTIMER_USAGE', '&ctimer(start,range,cycle,display){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分');
 define('PLUGIN_CTIMER_UNITS',3600);        // Set unit in seconds
 
 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*PLUGIN_CTIMER_UNITS;
 
   if($cycle>0){
     if ($cycle<$range){return('ctimer error:cycle too small.');}
     $cycle=$cycle*PLUGIN_CTIMER_UNITS;
 
     if($start<$now){
       $ctimes=floor(($now-$start)/$cycle);
       $start+=($cycle*$ctimes);
       $end  +=($cycle*$ctimes);
     }
     if($end<$now){
       $start+=$cycle;
       $end  +=$cycle;
     }
 
   }
 
   $rr='';
   if (( $cdown)&($now<$start)){
       $rr.=str_replace("$1",plugin_ctimer_fmt($start-$now),PLUGIN_CTIMER_CDOWN);  // CountDown
   }
   if (($start<=$now)&($now<=$end)){
     if (  $past){
       $rr.=str_replace("$1",plugin_ctimer_fmt($now-$start),PLUGIN_CTIMER_PAST);    // Past
     }
     if ($remain){
       $rr.=str_replace("$1",plugin_ctimer_fmt($end-$now  ),PLUGIN_CTIMER_REMAIN);  // 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);
 }
 ?>


 
***コメント [#naf8d900]
- 迅速な対応に本当に感謝します。 -- [[aromatherapy]] &new{2012-05-30 (水) 06:58:32};
- 周期開始の判定が誤っていたので修正&関数の整理 すみません -- [[asato]] &new{2012-05-30 (水) 07:52:53};
- 修正と関数の整理ありがとうございます!いえ、私は全く解らないので、すごく助かっています。 -- [[aromatherapy]] &new{2012-05-31 (木) 03:47:08};
- cs wiki > http&#x3a;//cswiki.jp/ さんを使っているんですが、完成したプラグインの導入を運営様にリクエストしたいのですが、動作のサンプルを見る事は可能ですか。 -- [[aromatherapy]] &new{2012-06-01 (金) 08:47:27};

#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.041 sec.

OSDN