バージョン選択

フォーラム

メニュー

オンライン状況

17 人のユーザが現在オンラインです。 (10 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 17
もっと...

サイト内検索

質問 > フロント機能 > カレンダーで毎週○曜日休みの設定

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kvex2004
投稿日時: 2008/5/29 16:45
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
職場で確認したので、昨晩までのソースは自宅ですから、夜の対応になりますが。
他スレ(土曜日の件)と、こちらでの話が断片的になってしまったので、今夜にでも全部まとめたものを書きますね。参考になるようでしたら参考にしていただき、もっと簡単な(もしくは、的確な)やりかたがあるようなら逆にご提案いただければと思います。

予定では以下のとおりです(今までの改良含めて)

・土曜日にスタイルシートを別途付加させる。
・毎週○○曜日が休み、という設定ができるようにする。
・特別な営業日(毎週○○曜日休みだけど、今週は営業するぜ、みたいん)を外部ファイルにて対応させる
・休業日のスタイルシートは日曜と別にする。(日曜は赤ですが、カレンダー上「日曜日である」という表示と「休業日である」は必ずしも同じでは無いため。むしろ、日曜は営業している場合のほうが多いため)
・以上と重複するが、平日=白抜き、土曜日=水色、日曜日=赤、休日=濃い赤、というデフォルトのスタイルシートを設定する。

ここまでで、今までのものが全て網羅されると思います。
今まで出てきた改変の他はたいした作業では無いので、わりとあっさりできると思います。
koba63
投稿日時: 2008/5/29 17:58
対応状況: −−−
新米
登録日: 2008/5/29
居住地:
投稿: 3
Re: カレンダーで毎週○曜日休みの設定
kvex2004様
お忙しい最中ありがとうございます。
まとめたものでご教授いただけると大変助かります。

それともし可能であれば、第○週△曜日(第3週目の土曜日だけ、など)のフラグも立てられると嬉しい限りです。

私が最終的に実現したいのは、

・基本休業日(曜日)、隔週休業日を自動的に設定したい
・特別営業日を設定したい
・ある程度先々まで設定したいため年月日で日付指定したい
・土曜(sat)、日曜(sun)、休日(off)、営業日(sp)の色分けを行うため、CSSのclassをそれぞれ持ちたい
 ※営業日は休日を上書きするかたちでCSSを記述するつもりです。
  <style>
  #block-calendar td.off{color:#f00;}
  #block-calendar td.sp {color:#00f;}
  </style>
・基本休業日、隔週休業日、特別営業日の日付指定するファイルを外部化したい
 ※PHPのプログラムソースを直接さわることなく担当者レベルで編集可能にしたいです(浅い階層に設置してFTPして編集)。

下記のような外部ファイルが持てれたらと思います。

---

### 基本休業日(曜日)の設定 (class=off)###
# sun,mon,tue,wed,thu,fri,satから休業日にする曜日を指定する(複数指定はカンマ区切り)
offwork = mon,thu;

### 隔週休業日の設定 (class=off)###
# 第何週かを指定(複数指定はカンマ区切り)
offweek = 2,4;
# sun,mon,tue,wed,thu,fri,satから休業日にする曜日を指定する(複数指定はカンマ区切り)
offweek = tue;

### 特別営業日の設定 (class=sp)###
# 年月日で指定(例:20080101)(複数指定はカンマ区切り)
onwork = 20080505,20081224,20090101;

---

実際に表示されるカレンダーは、

1. 曜日クラス(sun,mon,tue,wed,thu,fri,sat)のCSSを自動付与
2. 基本休業日や隔週休業日は曜日クラスを「.off」に上書き
3. 特別営業日は「.off」を「.sp」に上書き

とできればと思います。

---

以上のようになります。

本当に我侭を申し上げて申し訳ございません。
お時間のある時で結構ですので、ご教授いただけると助かります。
どうかよろしくお願いします。
ゲスト
投稿日時: 2008/5/30 7:31
対応状況: −−−
Re: カレンダーで毎週○曜日休みの設定
第○○週の処理がピンとこないのですが、あとはやってできないことは無いかなぁ、という感じです。
できれば、せっかくなので多くの人が参考になるようなものにしたいので、あまり需要が無さそうな部分はちょっと後回しに、ということで。

設定ファイルだけでなく、処理部分も全て外に出してしまえば良いかもですね、処理を含めてインクルードする感じかな?プラグインっぽく。元のファイルには「require」と関数の1行追加程度で。

すみません、そちらの書き込み見たのが遅い時間だったので、夜のうちに作業できませんでした。仕事のときに、暇を見て考えてみます。

また夜にでも・・・
kvex2004
投稿日時: 2008/5/30 10:56
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
前の書き込み、私です。
たびたびログインしてなくて申し訳ございません。
ゲスト
投稿日時: 2008/5/30 17:49
対応状況: −−−
Re: カレンダーで毎週○曜日休みの設定
ある程度できました。
ただ問題が・・・

各週の定義がむずいです。
第3火曜  という表現と
第3週の火曜  という2種類が考えられるのですが

1日が日曜日だったら同じなんですけど、1日が土曜日だった場合に、第1週は土曜日だけなので、曜日の出現回数をカウントしていくのがいいと思うのですが、処理が重くなりそうで・・・

第○火曜
第○週火曜
の2つだとしたら、一般的にどっちが需要がありそうですかねぇ。
kvex2004
投稿日時: 2008/5/30 17:58
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
それと、隔週って難しいですね。
このカレンダーは、当月が開始なのでその前の月の最終週の該当曜日が休みかどうかがわからないので。

kvex2004
投稿日時: 2008/5/30 18:51
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
やっつけ仕事で、変数の使い方にかなり問題がありますが(ヘタっぴという意味)できました。
今までの修正と同様の機能も入っていますが、整理の意味で全部書きます

【機能改良項目】
・土曜日にスタイルシートクラスを付ける

・日曜・祝日は休業日ではない、あくまでもカレンダー上の「赤い日」

・休業日はさらにスタイルシートクラスを追加

・以上により、スタイルシートは4つとなり、クラスは以下のとおり
 1)日曜祝日 = sun
 2)土曜日  = sat
 3)休業日  = off
 4)その他  = 無指定

・休業日は別途ファイルを読み込む。設定可能は以下のとおり。
 1)毎週○○曜日休業 の設定追加
 2)第○の▲曜日休業 の設定追加
 3)上記該当日でも、特別に営業する日

【スタイルシートの例】
#block-calendar .sun {
    background: #FFEECC;
    color: #E04A00;
}
#block-calendar .sat {
    background: #e6e6fa;
    color: #6495ed;
}
#block-calendar .off {
    background: #ffc0cb;
    color: #ff6347;
	font-weight: bolder;
}


【カレンダーの生成部分】
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php
2箇所の関数を変更するので、変更関数の全ソースを掲載
    function init() {
        parent::init();
        $bloc_file = 'calendar.tpl';
        $this->setTplMainpage($bloc_file);

// カレンダーの追加初期設定
		require_once (DATA_PATH. 'calendar_conf.php');
		$this->setHoliday_w    = $cal_holiday;
		$this->setHoliday_open = $cal_open;
		$this->setHoliday_wnum = $cal_w_num;
	}


    // カレンダー情報取得
    function lfGetCalendar($disp_month = 1){

        for ($j = 0; $j <= $disp_month-1; ++$j) {
            $year = date('Y');
            $month = date('n') + $j;
            if ($month > 12) {
                $month = $month%12;
                $year = $year + $month%12;
            }

            $Month = new Calendar_Month_Weekdays($year, $month, 0);
            $Month->build();
            $i = 0;
			$z = 1; // 週
			$w_count = array(0,0,0,0,0,0,0); // 曜日毎のカウント
			
            while ($Day = $Month->fetch()) {
                
				if ($month == $Day->month) {
                    $arrCalendar[$j][$i]['in_month'] = true;
                } else {
                    $arrCalendar[$j][$i]['in_month'] = false;
                }
                $arrCalendar[$j][$i]['first'] = $Day->first;
                $arrCalendar[$j][$i]['last'] = $Day->last;
                $arrCalendar[$j][$i]['empty'] = $Day->empty;
                $arrCalendar[$j][$i]['year'] = $year;
                $arrCalendar[$j][$i]['month'] = $month;
                $arrCalendar[$j][$i]['day'] = $Day->day;

// 曜日を求めた後、曜日の出現回数をカウントする
				$w_day = date('w',mktime(0,0,0,$arrCalendar[$j][$i]['month'],$arrCalendar[$j][$i]['day'],$arrCalendar[$j][$i]['year']));
				if($arrCalendar[$j][$i]['in_month']){
					$w_count[$w_day] ++;
				}
				
// 第何週かのカウント
                if($Day->last) {
					$z ++;
                }

// 1=日曜日,2=土曜日,3=休業日,4=その他
				if ($this->lfCheckHoliday($month, $Day->day)) {
                    $arrCalendar[$j][$i]['holiday'] = 3;
                } elseif($Day->first) {
                    $arrCalendar[$j][$i]['holiday'] = 1;
                } elseif($Day->last) {
                    $arrCalendar[$j][$i]['holiday'] = 2;
                } else {
                    $arrCalendar[$j][$i]['holiday'] = 4;
                }

// 毎週○○曜日が休みの設定をオーバーライトする
				foreach($this->setHoliday_w as $chk){
					if ($w_day == $chk){
	                    $arrCalendar[$j][$i]['holiday'] = 3;
					}
				}

// 第○▲曜日が休みの設定をオーバーライトする
				if ($this->setHoliday_wnum[$w_count[$w_day]][$w_day]){
	                    $arrCalendar[$j][$i]['holiday'] = 3;
				}

// 決まった休みでも特別に営業する場合などをオーバーライトする
				foreach($this->setHoliday_open as $chk){
					$w_day = $arrCalendar[$j][$i]['year']. "-". $arrCalendar[$j][$i]['month']. "-". $arrCalendar[$j][$i]['day'];
					if ($w_day == $chk){
	                    $arrCalendar[$j][$i]['holiday'] = 4;
					}
				}

                ++$i;
            }
        }
        return $arrCalendar;
    }

【カレンダーのブロックテンプレート】
デザイン管理のブロック編集、カレンダーを改変
<!--▼カレンダーここから-->
<h2></h2>
<div id="block-calendar">
<!--{section name=num loop=$arrCalendar}-->
<!--{assign var=arrCal value=`$arrCalendar[num]`}-->
<!--{section name=cnt loop=$arrCal}-->
<!--{if $smarty.section.cnt.first}-->
<table>
<caption><!--{$arrCal[cnt].year}-->年<!--{$arrCal[cnt].month}-->月の定休日</caption>
<thead><tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr></thead>
<!--{/if}-->
<!--{if $arrCal[cnt].first}-->
<tr>
<!--{/if}-->
<!--{if !$arrCal[cnt].in_month}-->
<td></td>
<!--{elseif $arrCal[cnt].holiday == 1}-->
<td class="sun"><!--{$arrCal[cnt].day}--></td>
<!--{elseif $arrCal[cnt].holiday == 2}-->
<td class="sat"><!--{$arrCal[cnt].day}--></td>
<!--{elseif $arrCal[cnt].holiday == 3}-->
<td class="off"><!--{$arrCal[cnt].day}--></td>
<!--{else}-->
<td><!--{$arrCal[cnt].day}--></td>
<!--{/if}-->
<!--{if $arrCal[cnt].last}-->
</tr>
<!--{/if}-->
<!--{/section}-->
<!--{if $smarty.section.cnt.last}-->
</table>
<!--{/if}-->
<!--{/section}-->
</div>
<!--▲カレンダーここまで-->

【設定ファイルを追加】
data/calendar_conf.php
<?php
/*******************************
 ■営業日カレンダー設定ファイル

 Programed at 2008.05.30
 
 http://www.naviwave.com/
 Kazuhisa Katoh

********************************/

// 毎週○○曜日休みの設定。カンマで区切ってください。
	$cal_holiday = array(3,4); // 0=日曜〜 7=土曜

// 第○▲曜日の設定
// $cal_w_num[第○][曜日0〜7]
// 例)$cal_w_num[1][2]; 第1火曜日
// 必要数だけ追加してください
	$cal_w_num[2][2] = true;
	$cal_w_num[4][2] = true;

// 営業日の設定。毎週休みを設定した場合などで、特別に営業する場合など。
// カンマで区切ってください。
	$cal_open = array(
	'2008-6-11',
	'2008-6-25',
	);

?>
kvex2004
投稿日時: 2008/5/30 18:54
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
単にコピペしたので、タブなどそろって無くてすみません。
しかも、最後の設定ファイルの例にURLやコピー入れたままですので、削除しちゃって結構です。

それから、元ファイルは必ず保存しておいてくださいね。

最後に、あくまでも自己責任でお願いします。
当方ではうまく動いていますが、保証できませんので。
koba63
投稿日時: 2008/5/31 2:12
対応状況: −−−
新米
登録日: 2008/5/29
居住地:
投稿: 3
Re: カレンダーで毎週○曜日休みの設定
kvex2004様
ご連絡が遅くなってしまい申し訳ございません。
また、お忙しいにも関わらずご教授くださり、ありがとうございます。

ご教授いただいたカレンダーを試してみたところ、すべてうまくいきました。
これですべて解決できました。本当にありがとうございます!

> 最後の設定ファイルの例にURLやコピー入れたままですので、削除しちゃって結構です。

いえ、これはkvex2004様のお教えあってのものですので、削除せずにいたいと思います。

本当にありがとうございました。深く感謝いたします。
これからもご指導ご鞭撻のほど、よろしくお願い申し上げます。
noosa
投稿日時: 2008/9/27 16:20
対応状況: −−−
半人前
登録日: 2008/7/25
居住地:
投稿: 12
Re: カレンダーで毎週○曜日休みの設定
すみません、上記の通り設定したのですが、
Ver2.2.0betaだと、すべてが赤色の休日になってしまうのですが、
2.1.2と違うのでしょうか?

う〜ん、なんとか土曜日だけでも青色に変えたいのですが。

どなたかご教授いただけないでしょうか。
« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,353名です
総投稿数は110,082件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1304
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.