phpの覚書

   

fullcalendarを使ってイベント登録とかする仕組みを作ってたんだけど定期イベントに関してはPHPファイルに直書きしていたので、そこを管理画面側から操作するにあたってどういう修正をしたのか自分用メモ。

前提

イベントカレンダーはページリストブロックのカスタムテンプレートで表示されている。

イベントの開始日と終了日の設定

管理画面側

ページ属性でテキストエリアを作成する。
属性はページリストブロックを追加してあるページの属性に設定する。
テキストエリアには「Y-m-d,Y-m-d」というように、(開始日,終了日)を一行ずついれてもらうことにする。

view.php側

テキストエリアの値を取得する。
PHPでテキストエリアの入力を改行で区切って配列にして、イベント用のjavascript(fullcalendarのevents)を回す。

PHPでテキストエリアの入力を改行で区切って配列にする方法で大変お世話になったサイト

PHPでフォームのtextareaに入力された複数行の内容を1行毎に処理する方法
PHPでテキストエリアの入力を改行で区切って配列にする(改行コードはダブルクォーテーションで囲む)

    $lendurls = $c->getAttribute('example_handlename');      // テキストエリアの値を取得
    $cr = array("\r\n", "\r");   // 改行コード置換用配列を作成しておく
    $urls = trim($urls);         // 文頭文末の空白を削除
    // 改行コードを統一
    //str_replace ("検索文字列", "置換え文字列", "対象文字列");
    $urls = str_replace($cr, "\n", $urls);
    //改行コードで分割(結果は配列に入る)
    $lines_array = explode("\n", $urls);

開始日,終了日を分割する

explodeを使ってY-m-d,Y-m-dをコンマでわける。

fullcalendarのカスタマイズ

通常のイベントにはタイムゾーン設定が効くんだけど、renderingがbackground設定になっていて且つ月表示の時に、終了日が前日までしか表示してくれない。(終了日には色がつかない)
バグかな?と思ったけど、週表示、日表示では適用されているので月表示ではこういう仕様なんだなということにしておく。
なのでプログラム側で+1日をしてあげないといけないので

$date = new DateTime(分割して取り出した終了日を取得する);
$enddate = $date->modify('+1 days')->format('Y-m-d');//1日後

とすることで終了日+1日を取得することができカレンダーの表示が希望通りになった。

0

 - concrete5