- 締切済み
.cgiのスケジュール管理システム曜日追加
.cgiのスケジュール管理システムを編集中です(perlと連動)。 自分自身が作ったものではなく引き継ぎでやっております。 現在管理確認/表示画面にて 月曜~土曜日までしかなく、日曜日だけ日付けも曜日も存在しません。 日曜日をがおそらく省かれていてる(非表示にされている)状況です。 これは今まで日曜日が定休日だったからです。日曜日も営業日として追加するのが目標です。 日曜日を表示さすのはどうしたらいいのでしょうか? .cgiは初心者のため。。。何十時間かけて調べたりいじってみたのですが、理想の答えもどれだけ調べても見つからず、 自分で触ってもどうにもならずもうお手上げです。。。 色々調べていたら「$en」で非表示にするやり方がある事を知り、 編集しているcgi内に探しましたがこのようなものはありませんでした。。。 おそらく違う方法で日曜日が非表示になっているかと。。。 *ログイン後、管理設定では日曜日も表示され、予定を入れる事が出来るのですが、 実際の確認画面には表示されません。 ちょっと説明不足かもしれませんが。。。。 よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
おそらく、その 「"if"とか"for"を使った」中に、#1で書いたような構造で、連続的に日付けを変更してて出力している(ただし、日曜日は出力していない)ものがあります。 これには、プログラムの動作を知ることしか、方法はありません。 <td> </td><td align=center>Mon</td><td align=center>Tue</td><td align=center>Wed</td><td align=center>Thu</td><td align=center>Fri</td><td align=center>Sat</td><td align=center>Sun</td> これにSunを付け加えた、という程度の単純なやりかたでは無理です。 たとえば if($first != 0){ この$firstが意味するものは?単語から考えると「最初」ですが、何の最初? if(!$hflag){ この$hflagが意味するものは? ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $m_f=sprintf("%02d",$mday); ということから、この$mdayは「本日の日付け」であって、表示される1週間の日付けでは無いように思えます。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time); の意味は、 "Perl time関数"( https://www.google.co.jp/search?q=perl%20time%20%E9%96%A2%E6%95%B0&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a )などで検索します。 time関数は、1970年1月1日 00:00:00 UTCからの秒数を返します。 loclatime関数 秒数を (秒,月(0-11),時間(0-24),日(1-31),月(0-11),年(-1970/1/1/0:00),曜日(0-6),年初からの日数,サマータイムの時間)の配列にします。 よって@TM=localtime();で、$TM{0]と呼び出しても構わないが、いっそのこと関数のリストに直接代入しているだけ ($sec, $min, $hour, $mday, $mon,$year, $wday, $yday, $isdst)=localetime(); ここで、 @Weeks = ("日","月","火"・・・・"土"); とでもしておいて、 $Weeks[$wday]には、日本語の曜日が入っているはず。 日にちは、すでに$mdayに入っている。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
日付は mdayですよ。 これは正味1~31の数値が入ります。 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time); $year += 1900; print "$sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst\n"; で、それぞれに入っている値は調べられます。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>色々調べていたら「$en」で非表示にするやり方がある事を知り、 $en・・・なんでしょうね。単にスカラー変数ですから、その指定がそのまま他のプログラムで使えることは、まずありえません。 time関数で得られる値をloclatimeに渡し、それから帰ってくる値から、曜日の配列から曜日を取り出す仕組みを理解してください。 ($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime(time()); $wday は、0~6の数値で与えられていますから @WD = ("日曜日","月曜日"・・・・・); というリストを用意しておけば $WD[$wday] が$wday番目の値になりますね。 ネットで探すのは大変です。特に、配布されているプログラムを探してもダメですよ。探すなら、リファレンスです。 Perlは、様々な書き方が出来るプログラム言語です。開発者の数だけ書き方があるなんて揶揄されるくらい。ですから他人の書いたプログラムは、たのプログラムへの参考にするには、しっかりした基礎知識が必要です。 >.cgiのスケジュール管理システムを編集中です(perlと連動)。 と書かれているだけで、状況はわかります。(^^) Perlで書かれたスケジュール管理CGI・・・のことでしょうね。
補足
御丁寧にありがとうございます。 ($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime(time()); は調べていたら意味はわかったのですが。。。 そこから@WD= というのも発見し、大半はそう書かれている中、私がいじっているものは <td> </td><td align=center>Mon</td><td align=center>Tue</td><td align=center>Wed</td><td align=center>Thu</td><td align=center>Fri</td><td align=center>Sat</td><td align=center>Sun</td> </tr> EOM $tmax=@TIME; $j=0; など $table=<<EOM; <table border="0" class="tb" cellpadding=4 width="1100"> <tr bgcolor=¥"#cccccc¥"> <td width="50" bgcolor="#ffffff"> </td> <td width="150" align=center> Mon </td> <td width="150" align=center> Tue </td> <td width="150" align=center> Wed </td> <td width="150" align=center> Thu </td> <td width="150" align=center> Fri </td> <td width="150" align=center> Sat </td> <td width="150" align=center> Sun </td> </tr> EOM $timemax=@TIME; $m_f=sprintf("%02d",$mon); など @w=('Mon','Tue','Wed','Tur','Fri','Sat','Sun'); @wno=('1','2','3','4','5','6','0'); $i=0; などで。。。 日曜日自体は追加出来たのですが、 実際の下に日付けが書いているのですが、 Sunという列は追加出来た中、日付が出ない状況です。。。 やはりネットで探すのも難しいのですね。。。 ちなみにおそらく仰る通り、perlで書かれた.cgiスケジュール管理だと思います。 もう一つperlと書いている.plファイルもアップして動いていると思います。 もう一つのファイルで時間の定義など時間の追加や、スケジュールの内容の追加などは 簡単に出来るのですが。。。今回は難問です。。。 時にhtmlは触っていたり、以前このスケジュール管理の 予定の内容を追加や予定内容によって色を変更や時間の追加などはなんとか形に出来、 基礎はない中、今までなんとか色々更新/変更出来てきたのですが。。。 今回はどうやらそう簡単にはいかなさそうですね。。。(涙)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 お使いのシステムの作り次第ですので的確な回答は難しいです。 システムや作り手の手法により方法はごまんとあります。 表示している部分を見てみないとわかりません。
お礼
やはり全体を見ないとなんとも言えませんよね。。。 ご回答ありがとうございます。
- kmee
- ベストアンサー率55% (1857/3366)
これだけの情報では、何もわかりません。 そのソースコードをここに貼るわけにもいかないでしょうから ・あなたがプログラミング技術を高める(時間はかかるが、費用はあなたの給料分だけ) ・(専門業者を含め)詳しい人に頼むか(費用はかかるが、時間は短縮できる) ということになるのでは。 その内容から、考えられるパターンがいくつもあります。 週毎のループ { 月~土のループ{ 1日分の表示 } } という構造だと、最初から対象外です。内側のループを月~日にする必要があります 開始から終了までループ { if(日曜でない){ 1日分の表示 } } とか 開始から終了までループ { if(日曜){ next ;} 1日分の表示 } とかなら、日曜でも表示するように、プログラムの流れを変更します。 表示もそうですが、他の箇所も確認する必要があります。 ・日曜にデータを入力すると、エラーになるように作られているかもしれません ・保存データの構造として、日曜日が指定できないかもしれません。
お礼
御丁寧にありがとうございます。 そうですよね。。。 今までこれ以外の内容はなんとか更新出来ていたので。。。 悔しい現実です。。。 ご回答ありがとうございます。
補足
御丁寧に何度もご回答ありがとうございます。 mdayで検索かけると、 例1: ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $mon++; $year=$year+1900; など 例2: #適用年月日:<input type="text" name="year" value="$year" size=4>年<input type="text" name="mon" value="$mon" size=4>月<input type="text" name="day" value="$mday" size=4>日 <input type="text" name="hour" value="$hour" size=4>時<br> など 例3: $col=0; $m_f=sprintf("%02d",$mday); しか出てこなくて、 おそらくこれだけだと全部表示される、しかしどこかで一部(日曜の日付)を省くようにでも設定されている?と思っているのですが。。。 らしきものがまったく見当たらないんですよね。。。 ちなみに 上記の1番目(例:1)のものの下に print "$sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst\n"; と挿入して実行してみたら、 通常の表ではなく、htmlのソースみたいなものが出てきて、なんらかのヒントになるか??と思いじっと見ていたのですが、 通常表示される表のソース版って感じでした。。。 if とかで一部日付(日曜日の)を省く設定でもされているのかな。。。と思いつつも、 いくら見ても。。。らしきものが。。。。 しかし唯一怪しいと思っているのは、 緑文字で、メモのような感じで 「# (日:0)月:1~土:6までで設定」 と書いている部分なのですが、 前後見ても、 "if"とか"for"を使った 例1: if($first != 0){ や 例2: if(!$hflag){ や 例:3 if($col != 0){ $hflag=0; #print @ho; foreach(@ho){ #print "[".$_."]"; #print "{".$i."} "; if($_ == $i){ #print " match "; $hflag=1; last; } } #print "¥r¥n"; などのものばかりで。。。 「# (日:0)月:1~土:6までで設定」 とこのスクリプトの中にメモがあるという事は絶対にカギはどこかにあると思うのですよね。。。。