バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hiroky
投稿日時: 2008/9/29 1:44
対応状況: −−−
半人前
登録日: 2008/9/19
居住地: 群馬
投稿: 20
Re: カレンダーで毎週○曜日休みの設定
定休日設定で土曜日や日曜日を休日指定すると
休日の表示になります。
(そのように便利に使わせてもらっております)
tonton
投稿日時: 2008/9/27 18:01
対応状況: −−−
仙人
登録日: 2008/8/14
居住地:
投稿: 437
Re: カレンダーで毎週○曜日休みの設定
原因によって対応が3つあります。
1)確認1
ブラウザで表示したページのソースを見て、カレンダー部分の土曜のところのclassが、
<td class="sat">
となっているなら、CSSで色指定が出来ていないだけと思われるので、CSSに、kvex2004さん指定のソースが追加してあるかどうかを確認し、自分の指定したい色のCSSを追加。


#block-calendar .sat {
background: #e6e6fa; /*ここに背景色*/
color: #6495ed; /*ここは文字色*/
}

2)確認2
ブラウザで表示したページのソースを見て、カレンダー部分の土曜のところのclassが、
<td class="sat">
となっていないなら、テンプレートのカレンダーブロックに、kvex2004さん指定の書き換えがされているか確認。
↓特にこの辺。
<!--{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}-->


3)コードはきちんと設定されているが、土曜が休日でもある設定をした場合
CSSは、休日のほうが後から記載されているので、土曜日に設定したCSSの色指定は、休日の色指定で上書きされます。
CSSの、土曜日のところに「!important」をいう記述を追加するか、
#block-calendar .sat {
background: #e6e6fa;
color: #6495ed;
} !imporatant

土曜日のCSSを休日のCSSより下に持ってくるといいです。


可能性から言えば上から順に高いので、多分この中で上から確認してもらえばどれかが原因だと思いますよ。(*^^*)

そういえば、この設定って、土曜とか日曜が休日という指定にしたとき、テンプレートでは、土日のクラスか休日のクラスかどっちが優先して書き出されるんでしょうかね?曜日?いや、休日みたいですね。(→休日だそうですヨ*^^*)
noosa
投稿日時: 2008/9/27 16:20
対応状況: −−−
半人前
登録日: 2008/7/25
居住地:
投稿: 12
Re: カレンダーで毎週○曜日休みの設定
すみません、上記の通り設定したのですが、
Ver2.2.0betaだと、すべてが赤色の休日になってしまうのですが、
2.1.2と違うのでしょうか?

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

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

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

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

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

本当にありがとうございました。深く感謝いたします。
これからもご指導ご鞭撻のほど、よろしくお願い申し上げます。
kvex2004
投稿日時: 2008/5/30 18:54
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
単にコピペしたので、タブなどそろって無くてすみません。
しかも、最後の設定ファイルの例にURLやコピー入れたままですので、削除しちゃって結構です。

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

最後に、あくまでも自己責任でお願いします。
当方ではうまく動いていますが、保証できませんので。
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 17:58
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
それと、隔週って難しいですね。
このカレンダーは、当月が開始なのでその前の月の最終週の該当曜日が休みかどうかがわからないので。

ゲスト
投稿日時: 2008/5/30 17:49
対応状況: −−−
Re: カレンダーで毎週○曜日休みの設定
ある程度できました。
ただ問題が・・・

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

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

第○火曜
第○週火曜
の2つだとしたら、一般的にどっちが需要がありそうですかねぇ。
kvex2004
投稿日時: 2008/5/30 10:56
対応状況: −−−
長老
登録日: 2007/10/31
居住地: 埼玉
投稿: 218
Re: カレンダーで毎週○曜日休みの設定
前の書き込み、私です。
たびたびログインしてなくて申し訳ございません。
ゲスト
投稿日時: 2008/5/30 7:31
対応状況: −−−
Re: カレンダーで毎週○曜日休みの設定
第○○週の処理がピンとこないのですが、あとはやってできないことは無いかなぁ、という感じです。
できれば、せっかくなので多くの人が参考になるようなものにしたいので、あまり需要が無さそうな部分はちょっと後回しに、ということで。

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

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

また夜にでも・・・
(1) 2 3 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,352名です
総投稿数は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.