▼スレッド
│
└◇1876:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 09/28 07:08
└◇1877:Re:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 09/28 22:56
├◇1878:Re[2]:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 09/29 12:09
│└◇1880:Re[3]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 09/29 20:46
│ └◇1882:Re[4]:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 09/30 14:01
│ └◇1884:Re[5]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 09/30 21:18
│ └◇1885:Re[6]:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 10/01 11:53
│ └◇1886:Re[7]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 10/01 19:03
│ └◇1887:Re[8]:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 10/02 14:59
│ └◇1888:Re[9]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 10/03 10:34
│ └◇1889:Re[10]:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 10/03 19:32
│ └◇1890:Re[11]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 10/03 21:24
│ └◇1891:Re[12]:【続】カードコレクションのカテゴリわけとページ切り替え [YOUME] 10/04 10:32
│ └◇1892:Re[13]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 10/04 14:13
│ └◇1893:Re[14]:【続】カードコレクションのカテゴリわけとページ切り替え [moon] 10/04 20:35<-last
└◇1879:コレクション数に応じたボーナス [YOUME] 09/29 12:45
└◇1881:Re:コレクション数に応じたボーナス [moon] 09/29 21:17
└◇1883:Re[2]:コレクション数に応じたボーナス [YOUME] 09/30 14:08
おはようございます!コメントを書く(引用) | スレッド一覧
書き込み階層制限につき、新規トピ作成で失礼します…
printで変数の値を出力してデバッグする方法を教えて頂きありがとうございます!
恥ずかしながら思いつきませんでした…
その結果、grep前が1件以上でgrep後が0件だったので、
%card_name_hashの定義を確認しようと思ってみてはみたものの…
試しにカテゴリ名を半角英数字にして試したりもしたのですが上手くいかず…
そういう問題ではなかったりしますでしょうか?汗
cardimg.pl内は、現状
my %card_name_hash = (
'テストカードA' => {
'image' => 'c0000.jpg',
'category' => 'categoryA',},
・・・
sub get_card_image_path{
my $name = shift;
my $image_file = exists($card_name_hash{$name}) && exists($card_name_hash{$name}->{'image'}) ? $card_name_hash{$name}->{'image'} : '2011-12-23_1-246.gif';
return $image_dir . $image_file;
}
こんな感じになってはいるのですが…
ページ切り替え処理の方も、$startに初期値を設定しようと試行錯誤しているのですが、上手くいかず…
試しに直アドで試そうともしたのですが
$cgiurl?mode=collection&category=categoryA&id=$Fm{id}&pass=$Fm{pass}&start=0
この書き方でやってみたのですが、IDとPS等は間違いなくテストキャラのものが出ているのにパスワードが間違っていますという表示だけで何も出てこない感じで…
何度も教えて頂いているのに自分の理解力が無さ過ぎて本当に申し訳ないです…
> my %card_name_hash = (コメントを書く(引用) | スレッド一覧
原因はここだと思います。
No.1850で書いたものだと思うのですが、あれはファイル外で%card_name_hashを使わないようにしようとmyにしていました。
カテゴリ取得用のサブルーチンを追加で作るか、作りとしては上手くないですがmyを除くか、すれば良いです。
> $cgiurl?mode=collection&category=categoryA&id=$Fm{id}&pass=$Fm{pass}&start=0
パスワードは一部でpassですが、それ以外はpsです。
おはようございます!コメントを書く(引用) | スレッド一覧
そして教えて頂き、ありがとうございます!!
ひとまずmyを外して動作確認をしたところ、つ、ついにカテゴリ分けされたページが表示されるようになりました!!
ありがとうございます!!
ち、ちなみにカテゴリ取得用のサブルーチンを追加で作る場合、どのような方法が良いでしょうか…?
正直どう作るべきか全く分からず…
毎回本当に頼ってばかりで申し訳ないです…
そしてページ分けについてもご教授ありがとうございます!!
無事に表示できるようになりました!!!ううう良かった…
> ち、ちなみにカテゴリ取得用のサブルーチンを追加で作る場合、どのような方法が良いでしょうか…?コメントを書く(引用) | スレッド一覧
sub get_card_image_pathをベースに変更すれば良いです。
> そしてページ分けについてもご教授ありがとうございます!!
> 無事に表示できるようになりました!!!ううう良かった…
もし、URLにパスワードが含まれる形式(GET形式)で実現しているのでしたら、No.1869で触れたようにselect要素で指定するなどしてPOST形式にすることをお勧めします。
> select要素で指定するなどしてPOST形式にすることをお勧めします。コメントを書く(引用) | スレッド一覧
やってみようと思い、下記のようにしてみたのですが、これだと表示がされず…
(Sub Collection内に書いています)
my $start = int($Fm{'start'});
print qq|<FORM method="POST" action="$cgiurl">\n|;
print qq|<input type="hidden" name="collection" value="mode">\n|;
print qq|<input type="hidden" name="category" value="$Fm{category}">\n|;
print qq|<input type="hidden" name="id" value="$id">\n|;
print qq|<input type="hidden" name="pass" value="$ps">\n|;
print qq|<input type="hidden" name="start" value="$start">\n|;
print qq|<select>\n|;
print qq|<OPTION SELECTED>ページ切り替え\n|;
print qq|<option value="1">1\n|;
print qq|<option value="5">2\n|;
print qq|<option value="10">3\n|;
print qq|</select><input type="submit" value="みる"></FORM>\n|;
この書き方が間違っているとは思いつつ、どこがいけないのかが分からず…汗
教えて頂けると助かります…
(サブルーチンも、実は今まで一度も作ったことがないということもあり…sub get_card_image_pathをベースにどうすればいいのか分からず……ひとまずmyを抜く方法で様子見を…汗)
> やってみようと思い、下記のようにしてみたのですが、これだと表示がされず…コメントを書く(引用) | スレッド一覧
> print qq|<FORM method="POST" action="$cgiurl">\n|;
他と同様に「&form('start');」を使い、閉じタグ出力も「&form('end');」を使うほうが良いです。
> print qq|<input type="hidden" name="collection" value="mode">\n|;
> print qq|<input type="hidden" name="category" value="$Fm{category}">\n|;
> print qq|<input type="hidden" name="id" value="$id">\n|;
> print qq|<input type="hidden" name="pass" value="$ps">\n|;
他と同様に「&input('hidden', 'mode', 'collection');」のようにしたほうが良いです。
モード用のnameとvalueが逆です。(名前がmode)
パスワード用の名前はpsです。
> print qq|<input type="hidden" name="start" value="$start">\n|;
> print qq|<select>\n|;
> print qq|<OPTION SELECTED>ページ切り替え\n|;
> print qq|<option value="1">1\n|;
> print qq|<option value="5">2\n|;
> print qq|<option value="10">3\n|;
> print qq|</select><input type="submit" value="みる"></FORM>\n|;
startの値をhiddenで指定すると選択できなくなります。(同様にcategoryも固定値になっています。)
代わりに、select要素のname属性をstartにしてください。
> (サブルーチンも、実は今まで一度も作ったことがないということもあり…sub get_card_image_pathをベースにどうすればいいのか分からず……ひとまずmyを抜く方法で様子見を…汗)
今回の件に限らず、共通化できる処理はサブルーチン化することをお勧めします。
現状では1か所でしか使用していないので共通化というメリットはないですが、サブルーチン化すると後で見た時に何をやっているのかが少しはイメージしやすくなると思います。
処理内容としては、カード名を受け取って画像ファイルを返していたのを、カテゴリ名を返すように変更します。(○○○、△△△、□□□、×××の部分を変更するだけ。)
sub ○○○{
my $name = shift;
my $△△△ = exists($card_name_hash{$name}) && exists($card_name_hash{$name}->{'□□□'}) ? $card_name_hash{$name}->{'□□□'} : '×××';
return $△△△;
}
おはようございます!教えて頂き感謝です!コメントを書く(引用) | スレッド一覧
早速以下のように修正してみたのですが
&form('start');
&input('hidden', 'mode', 'collection');
&input('hidden', 'category', '$category');
&input('hidden', 'id', '$id');
&input('hidden', 'ps', '$ps');
print qq|<select name="start">\n|;
print qq|<option SELECTED value="1">1\n|;
print qq|<option value="5">2\n|;
print qq|<option value="10">3\n|;
print qq|</select>\n|;
&OKbuttoninform;
&form('end');
ページ切り替えを行うと「ID $idは存在しません」と出てしまって…私の理解が間違っていると思いつつ、何処がいけないのか分からず…
そしてサブルーチンの方も
sub get_card_category_path{
my $name = shift;
my $category_name = exists($card_name_hash{$name}) && exists($card_name_hash{$name}->{'category'}) ? $card_name_hash{$name}->{'category'} : 'なし';
return $category_name;
}
として、
%card_name_hash = もmy %card_name_hash = (
にして試したのですが、カードが表示されなくなり…
# Sub Collection #内の変更も必要になるのかなと思いつつ、どこを変更すれいいのか分からず…
何度も申し訳ないです…
> &input('hidden', 'category', '$category');コメントを書く(引用) | スレッド一覧
> &input('hidden', 'id', '$id');
> &input('hidden', 'ps', '$ps');
略...
> ページ切り替えを行うと「ID $idは存在しません」と出てしまって…私の理解が間違っていると思いつつ、何処がいけないのか分からず…
メッセージ通りIDが「$id」となっています。
「'」で囲むと変数が展開されないので、囲まないか「"」で囲むなどで対処してください。
$id以外の変数も同様です。
> print qq|</select>\n|;
> &OKbuttoninform;
> &form('end');
修正が必要というわけではないですが、前回の返信でOKbuttoninformに触れなかったのはボタンの表示テキストが「みる」となっていたからです。
> sub get_card_category_path{
カテゴリ名を取得する処理なので「〜_path」というサブルーチン名は混乱のもとになるかと思います。
> # Sub Collection #内の変更も必要になるのかなと思いつつ、どこを変更すれいいのか分からず…
「$card_name_hash{カード名}->{'category'}」を置き換える必要があります。
ご教授ありがとうございます!!!コメントを書く(引用) | スレッド一覧
ついに…無事に…ページ切り替えができるようになりました!
本当に本当に感謝です!!!
ただサブルーチン分けの方だけがいまだに上手くいかず;
その後、以下のように修正して
# sub get_card_name #
sub get_card_name{
my $name = shift;
my $category_name = exists($card_name_hash{$name}) && exists($card_name_hash{$name}->{'category'}) ? $card_name_hash{$name}->{'category'} : 'なし';
return $category_name;
}
> 「$card_name_hash{カード名}->{'category'}」を置き換える必要があります。
$card_name_hash{$item}->{'category'} eq $Fm{'category'};
を
$card_name_hash{$category_name}->{'category'} eq $Fm{'category'};
みたいにして試したりもしたのですが…
%card_name_hash = (
を
my %card_name_hash = (
にしてしまうと表示されず…
どうしたものか…と…すみません…
> sub get_card_name{コメントを書く(引用) | スレッド一覧
サブルーチン名は処理内容を表しているほうが良いと思います。
今回はカードのカテゴリ名を取得する処理なので、get_card_categoryやget_card_category_name等が適切だと思います。
> $card_name_hash{$item}->{'category'} eq $Fm{'category'};
> を
> $card_name_hash{$category_name}->{'category'} eq $Fm{'category'};
> みたいにして試したりもしたのですが…
これだとサブルーチンを使用していないです。
単純に「&get_card_name($item) eq $Fm{'category'};」とするだけです。
> > sub get_card_name{コメントを書く(引用) | スレッド一覧
get_card_categoryに修正して、
> > $card_name_hash{$item}->{'category'} eq $Fm{'category'};
> > を
> 単純に「&get_card_name($item) eq $Fm{'category'};」とするだけです。
&get_card_name($item) eq $Fm{'category'};としたのですが、myを入れた状態だとコレクションしたカードが表示されなくなってしまい…
他に調整するべき場所があったりしますでしょうか?
何度もお手数をおかけします…
> get_card_categoryに修正して、コメントを書く(引用) | スレッド一覧
略...
> &get_card_name($item) eq $Fm{'category'};としたのですが、myを入れた状態だとコレクションしたカードが表示されなくなってしまい…
サブルーチン名を変更したのでしたら呼び出し側も変更してください。
おはようございます!コメントを書く(引用) | スレッド一覧
> サブルーチン名を変更したのでしたら呼び出し側も変更してください。
ギャー!すみません…
&get_card_category($item) eq $Fm{'category'};
に変更してみたのですが、症状が変わらず…
if(@fitems){以下の処理が表示されていない感じなのですが、もしかして他にも修正すべき点があったり…?
何度も本当に申し訳ないです…
> &get_card_category($item) eq $Fm{'category'};コメントを書く(引用) | スレッド一覧
> に変更してみたのですが、症状が変わらず…
>
> if(@fitems){以下の処理が表示されていない感じなのですが、もしかして他にも修正すべき点があったり…?
途中までは表示できているようなので500エラーではないですが、No.1804で触れているやり方でエラーメッセージを表示させて原因を特定してみてください。(3番目のCGI::Carpを使ったやり方だけで事足りると思います。)
http://www11.big.or.jp/~hazymoon/ownerbbs/treebbs.cgi?log=1804
> > if(@fitems){以下の処理が表示されていない感じなのですが、もしかして他にも修正すべき点があったり…?コメントを書く(引用) | スレッド一覧
>
> 途中までは表示できているようなので500エラーではないですが、No.1804で触れているやり方でエラーメッセージを表示させて原因を特定してみてください。(3番目のCGI::Carpを使ったやり方だけで事足りると思います。)
前回までの投稿でHTMLのhidden要素でどこで定義しているのかが不明な$categoryを使用していたのでそこが原因の可能性もあります。
固定値になっている旨は返信済みなので修正されているかもしれませんが念のため確認しておいたほうが良いです。
度々失礼します…!コメントを書く(引用) | スレッド一覧
コレクションした種類に応じて、ボーナスアイテムを付与したいと考えて、
Sub File In After内を以下のようにしたのですが
(#コレクションボーナスで囲ってある部分だけ追記した感じです)
# Sub File In After #
sub file_in_after{
@rcdlines = &get_user("$Fm{'id'}");
return if $fg ne 'FIBB';
@collines = &get_coll("$Fm{'id'}");
&splititem('iF');
foreach (0 .. $#items) {
($item,$sts,$price,$imaxs,$iimg,$yoya) = split(/△/,$items[$_]);
$filebag = 1;
if ($Fm{"$_"}) {
my $tmpflg=0;
foreach $tmp (@fitems) {
($tmpitem,$tmpsts) = split(/△/,$tmp);
if ($tmpitem eq $item) {$tmpflg=1;}
}
if (!$tmpflg) {
$fco++;
push (@fitems,"$item△$sts");
push (@msg,"$itemをファイルに入れました。");
$fbg .= "$item△$sts";
$filebag = 0;
#コレクションボーナス
#はじめてコレクションした
if($fco == 1){
&splititem('i');
push(@items,"はじめてコレクション△00000100010000Hb-NOCOOK-Wi△0△1△N_16x16/2011-12-23_5-014.gif"); &joinitem('i');
push(@msg,"<IMG src=../wakiyaku/itmimg/N_etc/2011-12-23_1-166.gif>はじめてコレクションしたボーナスとして、<IMG src=../wakiyaku/itmimg/N_16x16/2011-12-23_5-014.gif>はじめてコレクションを手に入れた!");
}
#5種コレクションした
elsif($fco == 13){
&splititem('i');
push(@items,"5種コレクション△00000100010000Hb-NOCOOK-Wi△0△1△N_16x16/2011-12-23_5-014.gif"); &joinitem('i');
push(@msg,"<IMG src=../wakiyaku/itmimg/N_etc/2011-12-23_1-166.gif>5種コレクションしたボーナスとして、<IMG src=../wakiyaku/itmimg/sonota/hit.gif>5種コレクションを手に入れた!");
}
#コレクションボーナス
} else { push (@msg,"既に「$item」はファイル内に存在します。") }
}
if ($filebag) { push(@newitems,$items[$_]); }
}
@items = @newitems; &joinitem('iF');
$fg = ''; &userout; &fileout;
}
これだと、文字は出るのですがアイテムが付与されず…
さらに今さっき気づいたのですが、
これだと一度に10種コレクション登録した場合等々にボーナスがもらえないな…とか…
コレクション数ボーナスを受け取ったか受け取ってないかを判定して、受け取ってなかったら入手させるべきなのかもなのですが…(いろいろややこしそうで…汗)
お知恵を貸して頂けたら幸いです…!
> これだと、文字は出るのですがアイテムが付与されず…コメントを書く(引用) | スレッド一覧
splititemとjoinitemはすでに存在するので追加した部分では必要ありません。
@itemsは後ろのほうで@newitemsを代入することで更新しているので、アイテムを追加する場合は@itemsではなく@newitemsに追加する必要があります。
> これだと一度に10種コレクション登録した場合等々にボーナスがもらえないな…とか…
>
> コレクション数ボーナスを受け取ったか受け取ってないかを判定して、受け取ってなかったら入手させるべきなのかもなのですが…(いろいろややこしそうで…汗)
新しいパラメータを用意して………というようなことを考えたのですが、コードを見直したところ1枚ずつ処理(カウントアップして毎回判定、かつ減少することがない)しているようなので気にしなくて良さそうです。
ありがとうございます!ありがとうございます!コメントを書く(引用) | スレッド一覧
無事にできました!!良かった…
そして、一度に10種コレクション登録した場合等々にボーナスがもらえない…とか思ってたのは自分のとりこし苦労だったみたいで逆に良かったです…(ホッ)
先ほど確認して、きちんと入手できることを確認しました!
大感謝です!!!うう、良かった…