{strip}{* 必要な要素を準備する間ソースを綺麗にするため一行にまとめる *} {* カレンダー作成 **************************************************** * iframで呼び出しているページのURLで表示タイプを切り替える * * 直下のvalue=" " の文字で調整すること * ********************************************************************** * 表示タイプをURLで判断するためのキーワード設定 ******************* * ユニークキーになる単語をURLから選択して記述すること *} {assign var="SmallType" value="unknown"} {assign var="BigType" value="campus"} {assign var="TallType" value="news-test"} {assign var="MiddleType" value="middle"} {********************************************************************* * カレンダー めくり移動用 * 月めくり機能のターゲットを確定し、ターゲット月とその前月を宣言 * * GETされた年月を基にして押されたスイッチ(next/back :GET[MonthChangeButton])で表示する月を求める * 12月から1月へ等の移動は年の増減も加えて処理する * GETデータが存在しなければ現在の年月を反映する * ※(戻るBackで遷移した場合のエラーを防ぐためPOSTでなくGETを採用) * TargetYear: ターゲット年 * TargetMonth: ターゲット月 * BefoerMonth: ターゲットの前月 * MonthChangeButton: 移動ボタンを押した場合のGET名 **********************************************************************} {* GETで取得できる場合は反映、そうでなければ現在の年月を変数に割り当て *} {if isset($smarty.get.TargetYear)} {assign var="TargetYear" value=$smarty.get.TargetYear} {else} {assign var="TargetYear" value=$smarty.now|date_format:"%Y"} {/if} {if isset($smarty.get.TargetMonth)} {assign var="TargetMonth" value=$smarty.get.TargetMonth} {else} {assign var="TargetMonth" value=$smarty.now|date_format:"%m"} {/if} {* 移動ボタンで遷移の場合、年月を増減して変数に代入 *} {if isset($smarty.get.MonthChangeButton)} {assign var="MonthChangeButton" value=$smarty.get.MonthChangeButton} {if $smarty.get.MonthChangeButton eq 'next'} {if $TargetMonth+1 === 13} {assign var="TargetMonth" value="1"} {assign var="TargetYear" value=$TargetYear+1} {else} {assign var="TargetMonth" value=$TargetMonth+1} {/if} {elseif $smarty.get.MonthChangeButton eq 'back'} {if $TargetMonth-1 === 0} {assign var="TargetMonth" value="12"} {assign var="TargetYear" value=$TargetYear-1} {else} {assign var="TargetMonth" value=$TargetMonth-1} {/if} {/if} {/if} {********************************************************************* * ターゲットの年月からその月の初日(1日)の曜日を求める * ユリウス変換 ツェラーの公式 * Week01point: ターゲット月の1日の曜日 * PHPが使用可能なら命令文で1行 **********************************************************************} {* 1月、2月は 前年の 13月、14月として計算する *} {if $TargetMonth < 3} {assign var="JuliusYear" value=$TargetYear-1} {assign var="JuliusMonth" value=$TargetMonth+12} {else} {assign var="JuliusYear" value=$TargetYear} {assign var="JuliusMonth" value=$TargetMonth} {/if} {* ツェラーの公式 * 年を4で割ったA(以降、小数点切り捨て) * 年を100で割ったB * 年を400で割ったC * 月を13掛けたD1 * D1+8のD2 * D2を5で割ったD3 * D3+1のE(ここで足す1は「1日」の意味) * 年+A+C+D‐B=E * Eを7で割った数値が曜日の指針になる * 1:日曜 2:月曜 3:火曜・・・ *} {assign var="AAA" value=$JuliusYear/4|floor} {assign var="BBB" value=$JuliusYear/100|floor} {assign var="CCC" value=$JuliusYear/400|floor} {assign var="DD1" value=$JuliusMonth*13} {assign var="DD2" value=$DD1+8} {assign var="DD3" value=$DD2/5|floor} {assign var="DDD" value=$DD3+1} {assign var="EEE" value=$JuliusYear+$AAA+$CCC+$DDD-$BBB} {assign var="Week01point" value=$EEE%7|floor} {* 初期化 変更不可! **************} {assign var="EventFlag" value="NG"} {assign var="TargetDay" value=1} {assign var="TargetWeek" value=1} {assign var="NextMonthDay" value=1} {**** 今日の日付8桁 **************************************************} {assign var="Today8form" value=$smarty.now|date_format:"%Y%m%d"} {**** 月日の2桁の準備 ************************************************} {assign var="TargetMonth2form" value=$TargetMonth|string_format:"%02d"} {assign var="TargetDay2form" value=$TargetDay|string_format:"%02d"} {**** ターゲット月の月末日を確定する ********************************* * TargetMonthLastDay: ターゲット月の最終日 * BeforeMonthLastDay: ターゲット前月の最終日 * 途中、小の月の条件式で9月部分がうまく認識されなかったのでeq 9 となっている ***** 2月の閏年計算 **************************************************} {if $TargetMonth2form eq 02} {if $TargetYear%4 eq 0} {if $TargetYear%100 eq 0} {if $TargetYear%400 eq 0} {assign var="TargetMonthLastDay" value="29"} {assign var="BeforeMonthLastDay" value="31"} {else} {assign var="TargetMonthLastDay" value="28"} {assign var="BeforeMonthLastDay" value="31"} {/if} {else} {assign var="TargetMonthLastDay" value="29"} {assign var="BeforeMonthLastDay" value="31"} {/if} {else} {assign var="TargetMonthLastDay" value="28"} {assign var="BeforeMonthLastDay" value="31"} {/if} {**** 2月以外の小の月 ************************************************} {elseif $TargetMonth2form eq 04 or $TargetMonth2form eq 06 or $TargetMonth eq 9 or $TargetMonth2form eq 11} {assign var="TargetMonthLastDay" value="30"} {assign var="BeforeMonthLastDay" value="31"} {**** 3月 ************************************************************} {elseif $TargetMonth2form eq 03} {if $TargetYear%4 eq 0} {if $TargetYear%100 eq 0} {if $TargetYear%400 eq 0} {assign var="BeforeMonthLastDay" value="29"} {assign var="TargetMonthLastDay" value="31"} {else} {assign var="BeforeMonthLastDay" value="28"} {assign var="TargetMonthLastDay" value="31"} {/if} {else} {assign var="BeforeMonthLastDay" value="29"} {assign var="TargetMonthLastDay" value="31"} {/if} {else} {assign var="BeforeMonthLastDay" value="28"} {assign var="TargetMonthLastDay" value="31"} {/if} {**** 1/8月 **********************************************************} {elseif $TargetMonth2form eq 01 or $TargetMonth eq 8} {assign var="BeforeMonthLastDay" value="31"} {assign var="TargetMonthLastDay" value="31"} {**** 他の大の月 *****************************************************} {else} {assign var="BeforeMonthLastDay" value="30"} {assign var="TargetMonthLastDay" value="31"} {/if} {********************************************************************** * 配列を一気に作成できないので48回分のループ用配列を作成する * PHP使用不可のため繰り返し処理のforやwhileが使えないための苦肉策 ***********************************************************************} {assign var=myArray value=","|explode:""} {capture name="garage"}{$myArray|@array_pop}{/capture} {capture name="garage"}{$myArray|@array_push:"1"}{/capture} {capture name="garage"}{$myArray|@array_push:"2"}{/capture} {capture name="garage"}{$myArray|@array_push:"3"}{/capture} {capture name="garage"}{$myArray|@array_push:"4"}{/capture} {capture name="garage"}{$myArray|@array_push:"5"}{/capture} {capture name="garage"}{$myArray|@array_push:"6"}{/capture} {capture name="garage"}{$myArray|@array_push:"7"}{/capture} {capture name="garage"}{$myArray|@array_push:"8"}{/capture} {capture name="garage"}{$myArray|@array_push:"9"}{/capture} {capture name="garage"}{$myArray|@array_push:"10"}{/capture} {capture name="garage"}{$myArray|@array_push:"11"}{/capture} {capture name="garage"}{$myArray|@array_push:"12"}{/capture} {capture name="garage"}{$myArray|@array_push:"13"}{/capture} {capture name="garage"}{$myArray|@array_push:"14"}{/capture} {capture name="garage"}{$myArray|@array_push:"15"}{/capture} {capture name="garage"}{$myArray|@array_push:"16"}{/capture} {capture name="garage"}{$myArray|@array_push:"17"}{/capture} {capture name="garage"}{$myArray|@array_push:"18"}{/capture} {capture name="garage"}{$myArray|@array_push:"19"}{/capture} {capture name="garage"}{$myArray|@array_push:"20"}{/capture} {capture name="garage"}{$myArray|@array_push:"21"}{/capture} {capture name="garage"}{$myArray|@array_push:"22"}{/capture} {capture name="garage"}{$myArray|@array_push:"23"}{/capture} {capture name="garage"}{$myArray|@array_push:"24"}{/capture} {capture name="garage"}{$myArray|@array_push:"25"}{/capture} {capture name="garage"}{$myArray|@array_push:"26"}{/capture} {capture name="garage"}{$myArray|@array_push:"27"}{/capture} {capture name="garage"}{$myArray|@array_push:"28"}{/capture} {capture name="garage"}{$myArray|@array_push:"29"}{/capture} {capture name="garage"}{$myArray|@array_push:"30"}{/capture} {capture name="garage"}{$myArray|@array_push:"31"}{/capture} {capture name="garage"}{$myArray|@array_push:"32"}{/capture} {capture name="garage"}{$myArray|@array_push:"33"}{/capture} {capture name="garage"}{$myArray|@array_push:"34"}{/capture} {capture name="garage"}{$myArray|@array_push:"35"}{/capture} {capture name="garage"}{$myArray|@array_push:"36"}{/capture} {capture name="garage"}{$myArray|@array_push:"37"}{/capture} {capture name="garage"}{$myArray|@array_push:"38"}{/capture} {capture name="garage"}{$myArray|@array_push:"39"}{/capture} {capture name="garage"}{$myArray|@array_push:"40"}{/capture} {capture name="garage"}{$myArray|@array_push:"41"}{/capture} {capture name="garage"}{$myArray|@array_push:"42"}{/capture} {capture name="garage"}{$myArray|@array_push:"43"}{/capture} {capture name="garage"}{$myArray|@array_push:"44"}{/capture} {capture name="garage"}{$myArray|@array_push:"45"}{/capture} {capture name="garage"}{$myArray|@array_push:"46"}{/capture} {capture name="garage"}{$myArray|@array_push:"47"}{/capture} {capture name="garage"}{$myArray|@array_push:"48"}{/capture} {************************************************************************************* イベント貯蔵用配列をリセット ***************************************************************************************} {assign var=myEvent value=","|explode:""} {capture name="EventBox"}{$myEvent|@array_pop}{/capture} {************************************************************************************* カレンダーテーブル作成用の変数の初期化および設定 *************************************************************************************** * カレンダー本体の大きさを決める縦横幅 * フォント調整なしだと180px:120pxまでくらいが(FontSize:10px時における)小型化の限度? * 以降、開いているページによって形状・仕様変更がされる。iframeで参照するページのアドレスによって条件分岐 * サイズ調整をしていく中でSmallがMiddleより大きくなってしまったところは察してください *} {if isset($smarty.get.PageFlag)} {assign var="PageFlag" value=$smarty.get.PageFlag} {else} {assign var="PageFlag" value="unknown"} {/if} {if $smarty.server.HTTP_REFERER|mb_strpos:$BigType !== FALSE} {assign var="PageFlag" value=$BigType} {elseif $smarty.server.HTTP_REFERER|mb_strpos:$TallType !== FALSE} {assign var="PageFlag" value=$TallType} {elseif $smarty.server.HTTP_REFERER|mb_strpos:$MiddleType !== FALSE} {assign var="PageFlag" value=$MiddleType} {elseif $smarty.server.HTTP_REFERER|mb_strpos:$SmallType !== FALSE} {assign var="PageFlag" value=$SmallType} {/if} {if $PageFlag eq $BigType} {assign var="CalenderSizeTop" value='width:918px; height:60px; margin-top:0px;'} {assign var="CalenderSizeBody" value='width:918px; height:760px;'} {elseif $PageFlag eq $TallType} {assign var="CalenderSizeTop" value='width:275px; font-size:14px; margin-left:2px;'} {assign var="CalenderSizeBody" value='width:275px; height:150px;'} {elseif $PageFlag eq $SmallType} {assign var="CalenderSizeTop" value='width:336px; height:20px; font-size:10pt; margin-left:2px;'} {assign var="CalenderSizeBody" value='width:336px; height:150px;'} {elseif $PageFlag eq $MiddleType} {assign var="CalenderSizeTop" value='width:300px; height:20px; font-size:10pt;'} {assign var="CalenderSizeBody" value='width:300px; height:150px;'} {else} {assign var="CalenderSizeTop" value='width:180px; height:20px;'} {assign var="CalenderSizeBody" value='width:180px; height:100px;'} {/if} {* 日付の入るTD枠の縦横幅 *} {if $PageFlag eq $BigType} {assign var="DayWakuFormat" value='
{$TargetMonth2form|replace:"01":"January"|replace:"02":"February"|replace:"03":"March"|replace:"04":"April"|replace:"05":"May"|replace:"06":"June"|replace:"07":"July"|replace:"08":"August"|replace:"09":"September"|replace:"10":"October"|replace:"11":"November"|replace:"12":"December"} {$TargetYear}
{***** 定型トップここまで ********************************************} {**** 曜日枠の作成 ***************************************************} {if $PageFlag != $TallType} {$WeekWakuFormat}{$ModeSun}">SUN {$WeekWakuFormat}{$ModeYoubi}{$ModeNormal}">MON {$WeekWakuFormat}{$ModeYoubi}{$ModeNormal}">TUE {$WeekWakuFormat}{$ModeYoubi}{$ModeNormal}">WED {$WeekWakuFormat}{$ModeYoubi}{$ModeNormal}">THU {$WeekWakuFormat}{$ModeYoubi}{$ModeNormal}">FRI {$WeekWakuFormat}{$ModeSat}">SAT {/if} {**** TD作成 反復処理 ここから *************************************} {foreach from=$myArray item=t name=t} {******************************************************************** * 長型カレンダー用本体 *********************************************************************} {if $PageFlag eq $TallType} {if $Week01point-1 >= 0} {elseif $TargetDay <= $TargetMonthLastDay} {assign var="TargetDay2form" value=$TargetDay|string_format:"%02d"} {if "$TargetYear$TargetMonth2form$TargetDay2form" eq $Today8form} {assign var="ModeTodaySet" value="$ModeToday"} {else} {assign var="ModeTodaySet" value=""} {/if} {foreach from=$guidance item=t name=t} {assign var="EventAction" value=$t.fields.date.date_value|date_format:"%Y%m%d"} {assign var="EventAnker" value=$t.fields.time.text_value} {if "$TargetYear$TargetMonth2form$TargetDay2form" eq $EventAction } {assign var="EventFlag" value="eventOK"} {assign var="linkA" value='{$TargetDay}{$TargetWeek%7|replace:"1":"日"|replace:"2":"月"|replace:"3":"火"|replace:"4":"水"|replace:"5":"木"|replace:"6":"金"|replace:"0":"土"} {assign var=myEvent value=","|explode:""} {capture name="eventbox"}{$myEvent|@array_pop}{/capture} {/if} {******************************************************************** * 小型大型カレンダー用本体 *********************************************************************} {else} {if $t eq 48} {elseif $t%8 eq 0} {else} {******* 初日(1日)曜日まで前月表示 **********} {if $Week01point > 0} {if $PageFlag eq $SmallType or $PageFlag eq $MiddleType} {$DayWakuFormat}{$ModeOther}">{$BeforeMonthLastDay-$Week01point+1} {else} {$DayWakuFormat}{$ModeOther}">
{$BeforeMonthLastDay-$Week01point+1}
{/if} {assign var=myEvent value=","|explode:""} {capture name="eventbox"}{$myEvent|@array_pop}{/capture} {******* 当月表示 **********} {elseif $TargetDay <= $TargetMonthLastDay}{strip} {assign var="TargetDay2form" value=$TargetDay|string_format:"%02d"} {foreach from=$guidance item=t name=t} {assign var="EventAction" value=$t.fields.date.date_value|date_format:"%Y%m%d"} {assign var="EventAnker" value=$t.fields.time.text_value} {if "$TargetYear$TargetMonth2form$TargetDay2form" eq $EventAction } {assign var="EventFlag" value="eventOK"} {if $PageFlag eq $BigType} {assign var="linkA" value='
{$LinkPage}{$TargetDay}
{assign var="EventFlag" value="NG"} {else} {$DayWakuFormat}{$WeekFontColor}{$TodayBorder}">{$TargetDay} {/if} {else} {$DayWakuFormat}{$WeekFontColor}{$TodayBorder}">
{$TargetDay}
{foreach item=s name=s from=$myEvent } {$s} {/foreach}
{assign var=myEvent value=","|explode:""} {capture name="eventbox"}{$myEvent|@array_pop}{/capture} {/if} {******* 月末日からの翌月表示 **********} {else} {if $PageFlag eq $SmallType or $PageFlag eq $MiddleType} {$DayWakuFormat}{$ModeOther}">{$NextMonthDay++} {else} {$DayWakuFormat}{$ModeOther}">
{$NextMonthDay++}
{/if} {assign var=myEvent value=","|explode:""} {capture name="eventbox"}{$myEvent|@array_pop}{/capture} {/if} {/if} {/if} {/foreach}
{foreach from=$myEvent item=s name=s} {$s} {/foreach}