一定の時間ごとにメッセージを変えるプラグイン

バージョン
投稿者aromatherapy?
状態完了
投稿日2012-05-28 (月) 14:24:07

メッセージ

例えば、周期を48時間として start(開始時刻)を19:00として、その27時間後をend(終了)とする場合

■開始~終了時刻まで好きなメッセージ表示 「開始してから19時間が経過。終了まで残り8時間です。」みたいなかんじで経過と残り時間とかも表示したいんですが、実現難しいですか?

■時間外はまた違うメッセージを表示 「休憩中です」みたいに使おうと思ってるんですが、開始までの時間がカウントダウンさせたりもしたいです・・

とりあえず作ってみました。

&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);
}
?>

コメント

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-18 (火) 01:48:32
Site admin: PukiWiki Development Team

PukiWiki 1.5.1+ © 2001-2016 PukiWiki Development Team. Powered by PHP 5.6.30-0+deb8u1. HTML convert time: 0.535 sec.

OSDN