私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇1861:
カードコレクションでのページ切り替え [YOUME] 08/17 18:11

 └◇1862:Re:カードコレクションでのページ切り替え [moon] 08/17 20:47
  └◇1863:Re[2]:カードコレクションでのページ切り替え [YOUME] 08/18 09:41
   └◇1864:Re[3]:カードコレクションでのページ切り替え [moon] 08/18 20:08
    └◇1865:Re[4]:カードコレクションでのページ切り替え [YOUME] 08/19 08:32
     └◇1866:Re[5]:カードコレクションでのページ切り替え [YOUME] 08/26 10:57
      └◇1867:Re[6]:カードコレクションでのページ切り替え [YOUME] 08/26 11:57
       └◇1868:Re[7]:カードコレクションでのページ切り替え [moon] 08/26 20:32
        └◇1869:Re[8]:カードコレクションでのページ切り替え [moon] 08/26 21:13
         └◇1870:Re[9]:カードコレクションでのページ切り替え [YOUME] 09/01 10:30
          └◇1871:Re[10]:カードコレクションでのページ切り替え [moon] 09/01 13:13
           └◇1872:Re[11]:カードコレクションでのページ切り替え [YOUME] 09/27 08:15
            └◇1873:Re[12]:カードコレクションでのページ切り替え [moon] 09/27 09:34
             └◇1874:Re[13]:カードコレクションでのページ切り替え [YOUME] 09/27 19:25
              └◇1875:Re[14]:カードコレクションでのページ切り替え [moon] 09/27 21:11<-last


1861● カードコレクションでのページ切り替え[ YOUME ] 2015 08/17 18:11
お世話になっております、YOUMEです。

# Sub Collection #内のデータを、プレイヤーリストのように、ある一定の数ごとにページ切り替えできるようにしたいと考えているのですが、プレイヤーリストを見ても、どう行えば良いのか全く分からず…

できれば、カードをカテゴリ分けして、そのカテゴリごとにページ切り替えしたいと考えていたりもします…!


【第1弾】【第2弾】【第3弾】・・・
みたいな感じで、カテゴリは今後も増やしていきたいと思っており…

この場合、カードにカテゴリ分けする何らかの数値を追加しないといけなくなりますでしょうか…?

ただコレクション表示画面内だけで分けたいだけだったりも…

moonさんのお知恵をお借りできたら助かります…!
コメントを書く(引用) | スレッド一覧


1862● Re:カードコレクションでのページ切り替え[ moon ] 2015 08/17 20:47
> # Sub Collection #内のデータを、プレイヤーリストのように、ある一定の数ごとにページ切り替えできるようにしたいと考えているのですが、プレイヤーリストを見ても、どう行えば良いのか全く分からず…

ページ番号もしくは開始位置さえ渡せればsub collectionの「(4/25)修正」とコメントが付いているほうのforeachを以下のようにすれば良いはずです。
なお、すべて表示とカテゴリ分けは考慮していません。
  # $startに開始位置(0〜)が入っているものとする
  if(@fitems){
    $start = $start < 0 ? 0 : $start > $#fitems ? $#fitems : $start; # 開始位置を調整
    $end = $start + 20; # 終了位置、1ページ最大20件の場合
    $end = $end > $#fitems ? $#fitems : $end; # 終了位置を調整
    foreach $items (@fitems[$start .. $end]){ # $startから$endの範囲をループさせる
      # ループ内の処理
    }
  }

> できれば、カードをカテゴリ分けして、そのカテゴリごとにページ切り替えしたいと考えていたりもします…!
>
>
> 【第1弾】【第2弾】【第3弾】・・・
> みたいな感じで、カテゴリは今後も増やしていきたいと思っており…
>
> この場合、カードにカテゴリ分けする何らかの数値を追加しないといけなくなりますでしょうか…?

アイテムのステータスに持たせるか、以前の画像ファイル名の時のようにコード上にハッシュ等で持たせるか、という方法が考えられます。
ハッシュで持たせる方法としては、以下のように定義すれば見た目は複雑ですが画像ファイル名と一緒に扱えます。
  %card_name_hash = (
    'カード名1' => {
      'image' => '画像ファイル名1',
      'category' => 'カテゴリーA',
    },
    'カード名2' => {
      'image' => '画像ファイル名2',
      'category' => 'カテゴリーB',
    },
    'カード名n' => {
      'image' => '画像ファイル名n',
      'category' => 'カテゴリーX',
    },
  );
  # カード名1の画像ファイル名「$card_name_hash{'カード名1'}->{'image'}」
  # カード名1のカテゴリー「$card_name_hash{'カード名1'}->{'category'}」
コメントを書く(引用) | スレッド一覧


1863● Re[2]:カードコレクションでのページ切り替え[ YOUME ] 2015 08/18 09:41
おはようございます!

試しにページ切り替えができるようにしてみようと思ったのですが分からない事が…

># $startに開始位置(0〜)が入っているものとする

$startに開始位置(0〜)を入れる方法が分からず…
これは別の場所に何かを追加した方が良いのでしょうか?


># ループ内の処理

ここの部分に、
---------------------------------
($item,$sts) = split(/△/,$items); # (4/25)修正
$idd = int(substr($sts,7,1));
$pc = int(substr($sts,0,4));
if ($sts =~ /C0/) {$cde1 = "<font color=red>火</font>";}
if ($sts =~ /C1/) {$cde1 = "<font color=blue>水</font>";}
if ($sts =~ /C2/) {$cde1 = "<font color=yellow>雷</font>";}
if ($sts =~ /C3/) {$cde1 = "<font color=blown>土</font>";}
if ($sts =~ /C4/) {$cde1 = "<font color=green>風</font>";}
if ($sts =~ /C5/) {$cde1 = "<font color=gray>天</font>";}
if ($sts =~ /C6/) {$cde1 = "<font color=#8C008C>冥</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=powderblue>空</font>";}
#カード画像表示
print qq|<tr><td><hr><img src="|, &get_card_image_path($item), qq|"><br><b>$item</b> 【攻:$idd、属:$cde1】</td></tr> \n|;
#カード画像表示
---------------------------------
までの処理を入れる感じであってますでしょうか?


> ハッシュで持たせる方法としては、以下のように定義すれば見た目は複雑ですが画像ファイル名と一緒に扱えます。
>   %card_name_hash = (
>     'カード名1' => {
>       'image' => '画像ファイル名1',
>       'category' => 'カテゴリーA',
>     },
>     'カード名2' => {
>       'image' => '画像ファイル名2',
>       'category' => 'カテゴリーB',
>     },
>     'カード名n' => {
>       'image' => '画像ファイル名n',
>       'category' => 'カテゴリーX',
>     },
>   );
>   # カード名1の画像ファイル名「$card_name_hash{'カード名1'}->{'image'}」
>   # カード名1のカテゴリー「$card_name_hash{'カード名1'}->{'category'}」

教えて頂いたこの方法でカテゴリ分けしていきたいなと思うのですが、その場合、どうリンクさせれば良いのか分からず…

いつも分からない事ばかりで本当に申し訳ないです…
コメントを書く(引用) | スレッド一覧


1864● Re[3]:カードコレクションでのページ切り替え[ moon ] 2015 08/18 20:08
> $startに開始位置(0〜)を入れる方法が分からず…
> これは別の場所に何かを追加した方が良いのでしょうか?

URLのクエリ部分に含める(sos2.cgi?start=0)かPOSTデータの中身として渡してください。

> ># ループ内の処理
>
> ここの部分に、
> ---------------------------------
略...
> ---------------------------------
> までの処理を入れる感じであってますでしょうか?

はい、そうです。

> 教えて頂いたこの方法でカテゴリ分けしていきたいなと思うのですが、その場合、どうリンクさせれば良いのか分からず…

例えば、以下のようにgrepで条件に合うものだけ抜き出すようにするとカテゴリーAだけの@fitemsになります。
@fitems = grep {
    ($item, $sts) = split(/△/, $_); # カード名とステータスに分割
    $card_name_hash{$item}->{'category'} eq 'カテゴリーA'; # カテゴリーが「カテゴリーA」かどうか
} @fitems;
コメントを書く(引用) | スレッド一覧


1865● Re[4]:カードコレクションでのページ切り替え[ YOUME ] 2015 08/19 08:32
おはようございます!

なるほど…!
教えて頂いた内容を元に考えて試してみます!
(また聞きに来てしまうかもですが…汗)

ありがとうございます!
コメントを書く(引用) | スレッド一覧


1866● Re[5]:カードコレクションでのページ切り替え[ YOUME ] 2015 08/26 10:57
おはようございます!

まずはループだけでも…と自分なりに試してはみたのですが、全く上手くゆかず…以下が現状の状態で、

# Sub Collection #

中略

require 'cardimg.pl';

if(@fitems){
    $start = $start < 0 ? 0 : $start > $#fitems ? $#fitems : $start; # 開始位置を調整
    $end = $start + 20; # 終了位置、1ページ最大20件の場合
    $end = $end > $#fitems ? $#fitems : $end; # 終了位置を調整
    foreach $items (@fitems[$start .. $end]){ # $startから$endの範囲をループさせる

#    @fitems = grep {
#    ($item,$sts) = split(/△/, $_);# カード名とステータスに分割
#    $card_name_hash{$item}->{'category'} eq '使い魔'; #カテゴリーが「カテゴリーA」かどうか
#    } @fitems;

($item,$sts) = split(/△/,$items);
$idd = int(substr($sts,11,3));
$pc = int(substr($sts,0,8));
if ($sts =~ /C0/) {$cde1 = "<font color=red>火</font>";}
if ($sts =~ /C1/) {$cde1 = "<font color=blue>水</font>";}
if ($sts =~ /C2/) {$cde1 = "<font color=yellow>雷</font>";}
if ($sts =~ /C3/) {$cde1 = "<font color=blown>土</font>";}
if ($sts =~ /C4/) {$cde1 = "<font color=green>風</font>";}
if ($sts =~ /C5/) {$cde1 = "<font color=gray>天</font>";}
if ($sts =~ /C6/) {$cde1 = "<font color=#8C008C>冥</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=powderblue>空</font>";}
print qq|<tr><td><img src="|, &get_card_image_path($item), qq|"><br><b>【$cde1】$item</b>\n|;
print qq|<IMG src=story/img/lin.gif border=0></td></tr>\n|;
}
}

これだとループする部分のデータが表示されず…


> URLのクエリ部分に含める(sos2.cgi?start=0)かPOSTデータの中身として渡してください。

という部分も、本当にお恥ずかしいのですがどうすれば分からず…
コレクションファイルの呼び出し部分が

&input('radio','mode','collection','',"コレクションを見る<br>\n")if $mysp =~ /Cf/;

なので、これをどうにかするのかな?と思いつつ…
悩みに悩んだのですが余計に分からなくなってしまいました…

お手数をおかけしてしまい恐縮なのですが、お知恵を貸して頂けたら幸いです…!
コメントを書く(引用) | スレッド一覧


1867● Re[6]:カードコレクションでのページ切り替え[ YOUME ] 2015 08/26 11:57
申し訳ないです!訂正です!汗

> これだとループする部分のデータが表示されず…
↑別の場所の原因でした;

ただ、カテゴリも分けられない状態のままで、
ついでにカード画像が出なくなり…
ソースを見ると

<img src="cardimg/HASH(0x9d2a930)">

こんな感じの表示になっていました…
コメントを書く(引用) | スレッド一覧


1868● Re[7]:カードコレクションでのページ切り替え[ moon ] 2015 08/26 20:32
> <img src="cardimg/HASH(0x9d2a930)">
>
> こんな感じの表示になっていました…

以前作成したsub get_card_image_pathの内容が新しい%card_name_hashに合うように変更されていないのだと思います。
  my $image_file = exists($card_name_hash{$name}) ? $card_name_hash{$name}:'2011-12-23_1-246.gif';
    ↓
  my $image_file = exists($card_name_hash{$name}) ? $card_name_hash{$name}->{'image'} : '2011-12-23_1-246.gif';
    もしくは、より厳密に
  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';
とすれば良いと思います。
なお、カテゴリーに対しても同じようなサブルーチンを用意したほうが「$card_name_hash{$name}->{'category'}」のようなものを毎回書かなくて良くなるので楽になると思います。

> > URLのクエリ部分に含める(sos2.cgi?start=0)かPOSTデータの中身として渡してください。
>
> という部分も、本当にお恥ずかしいのですがどうすれば分からず…
> コレクションファイルの呼び出し部分が
>
> &input('radio','mode','collection','',"コレクションを見る<br>\n")if $mysp =~ /Cf/;
>
> なので、これをどうにかするのかな?と思いつつ…
> 悩みに悩んだのですが余計に分からなくなってしまいました…

オリジナルのsos2のリストページにはページ移動用のリンクがありますがあれと同じことです。
Aタグで実現するのであれば以下のようなHTMLが出力されるようにすれば良いです。(sos2.cgiのパスや表示テキストは適当です。)
---- ここから ----
<a href="sos2.cgi?mode=collection&start=0">0から</a>&nbsp;
<a href="sos2.cgi?mode=collection&start=20">20から</a>&nbsp;
<a href="sos2.cgi?mode=collection&start=40">40から</a>
---- ここまで ----
そうすれば$Fm{'start'}で値が取得できますので「my $start = int($Fm{'start'});」とでもすれば$startが作成できます。
コメントを書く(引用) | スレッド一覧


1869● Re[8]:カードコレクションでのページ切り替え[ moon ] 2015 08/26 21:13
> オリジナルのsos2のリストページにはページ移動用のリンクがありますがあれと同じことです。
> Aタグで実現するのであれば以下のようなHTMLが出力されるようにすれば良いです。(sos2.cgiのパスや表示テキストは適当です。)

コレクションは個々のデータのためIDとパスワードを渡すのでしたね。
そうするとA要素だとまずいので、代わりにSELECT要素で選択してボタンでsubmitする、などの方法で実現してください。
コメントを書く(引用) | スレッド一覧


1870● Re[9]:カードコレクションでのページ切り替え[ YOUME ] 2015 09/01 10:30
教えて頂いた事を参考に、いろいろ試してみたのですが上手くいかず…

現状は以下な感じです…
-----------------------------------------
▼Sub Collection内

〜中略〜

require 'cardimg.pl';

#ループ処理
if(@fitems){
    $start = $start < 0 ? 0 : $start > $#fitems ? $#fitems : $start; # 開始位置を調整
    $end = $start + 5; # 終了位置
    $end = $end > $#fitems ? $#fitems : $end; # 終了位置を調整
    foreach $items (@fitems[$start .. $end]){ # $startから$endの範囲をループさせる
#ループ処理
#カテゴリ
    @fitems = grep {
    ($item,$sts) = split(/△/, $_);# カード名とステータスに分割
    $card_name_hash{$item}->{'category'} eq 'カテゴリーA'; #カテゴリーが「カテゴリーA」かどうか
    $card_name_hash{$item}->{'category'} eq 'カテゴリーB';
    $card_name_hash{$item}->{'category'} eq 'カテゴリーC';
    } @fitems;
#カテゴリ
($item,$sts) = split(/△/,$items);
$idd = int(substr($sts,11,3));
$pc = int(substr($sts,0,8));
if ($sts =~ /C0/) {$cde1 = "<font color=red>火</font>";}
if ($sts =~ /C1/) {$cde1 = "<font color=blue>水</font>";}
if ($sts =~ /C2/) {$cde1 = "<font color=yellow>雷</font>";}
if ($sts =~ /C3/) {$cde1 = "<font color=blown>土</font>";}
if ($sts =~ /C4/) {$cde1 = "<font color=green>風</font>";}
if ($sts =~ /C5/) {$cde1 = "<font color=gray>天</font>";}
if ($sts =~ /C6/) {$cde1 = "<font color=#8C008C>冥</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=powderblue>空</font>";}
#カード画像表示
print qq|<tr><td><img src="|, &get_card_image_path($item), qq|"><br><b>【$cde1】$item</b>\n|;
print qq|<IMG src=story/img/lin.gif border=0></td></tr>\n|;
#カード画像表示
}
}
print qq|<TR><TD>集めた数:<b>$fco</b>種</TD></TR>|;
print qq|</table>|;

-----------------------------------------
▼player_data内

print qq|<form method="$method" action="$cgiurl" target="_blank">\n|;
print qq|<input type="hidden" name="name" value="$nm"><input type="hidden" name="id" value="$id"><input type=hidden name=pass value="$ps">\n|;

if ($mysp =~ /Cf/){
&input('radio','mode','collection','',"コレクションを見る<br>\n");
print qq|   カテゴリー:\n|;
print qq|<select name="category">\n|;
print qq|<option value="カテゴリーA" selected>カテゴリーA\n|;
print qq|<option value="カテゴリーB">カテゴリーB\n|;
print qq|<option value="カテゴリーC">カテゴリーC\n|;
print qq|</select><br>\n|;
}

    &OKbuttoninform('n');
    &form('end');
-----------------------------------------
カテゴリごとに表示させ、かつカテゴリ内で5枚ずつページ切り替えしたいなと考えたのですが…

現状だと複数種類のカードを所持していても1種類しかカードが表示されない状態になってしまい…

お知恵を貸して頂けたら幸いです…!
コメントを書く(引用) | スレッド一覧


1871● Re[10]:カードコレクションでのページ切り替え[ moon ] 2015 09/01 13:13
> カテゴリごとに表示させ、かつカテゴリ内で5枚ずつページ切り替えしたいなと考えたのですが…
>
> 現状だと複数種類のカードを所持していても1種類しかカードが表示されない状態になってしまい…

「@fitems = grep 〜」は$startと$endに影響を与える必要があるので「if(@fitems)」よりも前に行ってください。
あと、grepの結果は最後に評価された値で決まるので比較処理を並べるのではなく渡されてきたカテゴリー($Fm{'category'})との比較を行うだけで良いです。
コメントを書く(引用) | スレッド一覧


1872● Re[11]:カードコレクションでのページ切り替え[ YOUME ] 2015 09/27 08:15
おはようございます!
入院したりでバタバタしてしまって中途半端なとこで止まってしまっていましたが、やっと体調が落ち着いてきたので戻ってきましたー!

いろいろ試したり考えたりしたのですが、

player_data内で

#コレクションファイル
if ($mysp =~ /Cf/){
&input('radio','mode','collection','',"コレクションを見る<br>\n");
print qq|   カテゴリー:\n|;
print qq|<select name="category">\n|;
print qq|<option value="カテゴリA" selected>カテゴリA\n|;
print qq|<option value="カテゴリB">カテゴリB\n|;
print qq|<option value="カテゴリC">カテゴリC\n|;
print qq|</select><br>\n|;
}
#コレクションファイル

こんな感じにして、ここで選択したカテゴリだけを、表示させたいと思うのですが方法が全く分からず…
そもそもこの指定の仕方で良いのかどうかも不安ではあるのですが…汗

現在のSub Collectionの中は、

# Sub Collection #
sub collection {
@rcdlines = &get_user("$Fm{'id'}");
@collines = &get_coll("$Fm{'id'}");
&header;
&splititem('F');

…中略…

require 'cardimg.pl'; # ループ中で毎回requireするのは無駄なので場所はforeach以前が良い

#カテゴリ
    @fitems = grep {
    ($item,$sts) = split(/△/, $_);# カード名とステータスに分割
    $card_name_hash{$item}->{'category'} eq 'カテゴリーA'; #カテゴリーが「カテゴリーA」かどうか
    $card_name_hash{$item}->{'category'} eq 'カテゴリーB';
    $card_name_hash{$item}->{'category'} eq 'カテゴリーC';
    } @fitems;
#カテゴリ

        foreach $items (@fitems) {
($item,$sts) = split(/△/,$items);
$idd = int(substr($sts,11,3));
$pc = int(substr($sts,0,8));
if ($sts =~ /C0/) {$cde1 = "<font color=red>火</font>";}
if ($sts =~ /C1/) {$cde1 = "<font color=blue>水</font>";}
if ($sts =~ /C2/) {$cde1 = "<font color=yellow>雷</font>";}
if ($sts =~ /C3/) {$cde1 = "<font color=blown>土</font>";}
if ($sts =~ /C4/) {$cde1 = "<font color=green>風</font>";}
if ($sts =~ /C5/) {$cde1 = "<font color=gray>天</font>";}
if ($sts =~ /C6/) {$cde1 = "<font color=#8C008C>冥</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=powderblue>空</font>";}
#カード画像表示
print qq|<tr><td><img src="|, &get_card_image_path($item), qq|"><br><b>【$cde1】$item</b>\n|;
print qq|<IMG src=story/img/lin.gif border=0></td></tr>\n|;
#カード画像表示
}
…中略…

こんな感じになっているのですが、これだとカテゴリ分けもされずコレクションしたカードの先頭の1枚しか表示されない感じで…

player_data内で選択されたカテゴリだけを表示させる場合、どのような記述が必要なのか、どうしても分からず…汗

いつも頼ってしまって申し訳ないです…
ご教授いただけたら幸いです!
コメントを書く(引用) | スレッド一覧


1873● Re[12]:カードコレクションでのページ切り替え[ moon ] 2015 09/27 09:34
> こんな感じにして、ここで選択したカテゴリだけを、表示させたいと思うのですが方法が全く分からず…
> そもそもこの指定の仕方で良いのかどうかも不安ではあるのですが…汗

それで良いと思います。

選択したカテゴリだけを表示するのは前回の返信で書いた
> > あと、grepの結果は最後に評価された値で決まるので比較処理を並べるのではなく渡されてきたカテゴリー($Fm{'category'})との比較を行うだけで良いです。
のことであり、
> #カテゴリ
>     @fitems = grep {
>     ($item,$sts) = split(/△/, $_);# カード名とステータスに分割
>     $card_name_hash{$item}->{'category'} eq 'カテゴリーA'; #カテゴリーが「カテゴリーA」かどうか
>     $card_name_hash{$item}->{'category'} eq 'カテゴリーB';
>     $card_name_hash{$item}->{'category'} eq 'カテゴリーC';
>     } @fitems;
> #カテゴリ
この部分の「$card_name_hash〜」の3行を「$card_name_hash{$item}->{'category'} eq $Fm{'category'};」にするということです。

あと、
> …中略…
>
> require 'cardimg.pl'; # ループ中で毎回requireするのは無駄なので場所はforeach以前が良い
>
> #カテゴリ
略...
> #カテゴリ
>
>         foreach $items (@fitems) {
上記を見た限り、
・「foreach $items (@fitems[$start .. $end]){」が「foreach $items (@fitems) {」に戻っている。
・「require 'cardimg.pl';」と「#カテゴリ 〜 #カテゴリ」が
  > if(@fitems){
  >   $start = $start < 0 ? 0 : $start > $#fitems ? $#fitems : $start; # 開始位置を調整
  >   $end = $start + 5; # 終了位置
  >   $end = $end > $#fitems ? $#fitems : $end; # 終了位置を調整
  の前ではない?

> こんな感じになっているのですが、これだとカテゴリ分けもされずコレクションしたカードの先頭の1枚しか表示されない感じで…

1種類(カテゴリーC)だけしか表示されないのはわかりますが、1枚しか表示されないというのは提示されたコードをざっと見ただけでは原因がわかりませんでした。
コメントを書く(引用) | スレッド一覧


1874● Re[13]:カードコレクションでのページ切り替え[ YOUME ] 2015 09/27 19:25
ご解説ありがとうございます!

早速、以下のようにしてみたのですが、これであっていますでしょうか…?
(Sub Collection内の全てになります)

# Sub Collection #
sub collection {
@rcdlines = &get_user("$Fm{'id'}");
@collines = &get_coll("$Fm{'id'}");
&header;
&splititem('F');

print qq|<center><b>+$nmのコレクション+</b><br>\n|;
print qq|<TABLE border="0" cellspacing="0" cellpadding="0"><TBODY><TR><TD valign="bottom"><FONT color="#897a76" size="1"><IMG src="img/F2_001.gif" width="9" height="9"></FONT></TD><TD valign="bottom"><FONT color="#897a76" size="1"><IMG src="img/F2_002.gif" width="130" height="9"><IMG src="img/e-icon_004.gif" width="16" height="16"><IMG src="img/F2_002.gif" width="130" height="9"></FONT></TD><TD valign="bottom"><FONT color="#897a76" size="1"><IMG src="img/F2_003.gif" width="9" height="9"></FONT></TD></TR><TR><TD background="img/F2_008.gif" align="middle"><FONT size="1"><IMG src="img/kuroko.gif" width="3" height="3"></FONT></TD><TD bgcolor="#cac4b0" width="276">|;
print qq|<table>|;
require 'cardimg.pl'; # ループ中で毎回requireするのは無駄なので場所はforeach以前が良い

#カテゴリ
    @fitems = grep {
    ($item,$sts) = split(/△/, $_);# カード名とステータスに分割
    $card_name_hash{$item}->{'category'} eq $Fm{'category'};
    } @fitems;
#カテゴリ

#ループ処理
if(@fitems){
    $start = $start < 0 ? 0 : $start > $#fitems ? $#fitems : $start; # 開始位置を調整
    $end = $start + 3; # 終了位置、1ページ最大20件の場合
    $end = $end > $#fitems ? $#fitems : $end; # 終了位置を調整

    foreach $items (@fitems[$start .. $end]){ # $startから$endの範囲をループさせる
#ループ処理

($item,$sts) = split(/△/,$items);
$idd = int(substr($sts,11,3));
$pc = int(substr($sts,0,8));
if ($sts =~ /C0/) {$cde1 = "<font color=red>火</font>";}
if ($sts =~ /C1/) {$cde1 = "<font color=blue>水</font>";}
if ($sts =~ /C2/) {$cde1 = "<font color=yellow>雷</font>";}
if ($sts =~ /C3/) {$cde1 = "<font color=blown>土</font>";}
if ($sts =~ /C4/) {$cde1 = "<font color=green>風</font>";}
if ($sts =~ /C5/) {$cde1 = "<font color=gray>天</font>";}
if ($sts =~ /C6/) {$cde1 = "<font color=#8C008C>冥</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=powderblue>空</font>";}
#カード画像表示
print qq|<tr><td><img src="|, &get_card_image_path($item), qq|"><br><b>【$cde1】$item</b>\n|;
print qq|<IMG src=story/img/lin.gif border=0></td></tr>\n|;
#カード画像表示
}
}
print qq|<TR><TD>集めた数:<b>$fco</b>種</TD></TR>|;
print qq|</table>|;
print qq|</TD><TD background="img/F2_004.gif" align="middle"><FONT size="1"><IMG src="img/kuroko.gif" width="3" height="3"></FONT></TD></TR><TR><TD><FONT color="#897a76" size="1"><IMG src="img/F2_007.gif" width="9" height="9"></FONT></TD><TD><FONT color="#897a76" size="1"><IMG src="img/F2_006.gif" width="276" height="9"></FONT></TD><TD><FONT color="#897a76" size="1"><IMG src="img/F2_005.gif" width="9" height="9"></FONT></TD></TR></TBODY></TABLE></center>\n|;
}

ただこれだと、どのカテゴリを選択しても、カードが1枚も表示されず…
他にも何か追記等々しなくてはいけないのかなと思いつつも解決策が分からず…

何度も聞きにきてしまって申し訳ないです…
コメントを書く(引用) | スレッド一覧


1875● Re[14]:カードコレクションでのページ切り替え[ moon ] 2015 09/27 21:11
コードをすべて見たわけではありませんが、

> 早速、以下のようにしてみたのですが、これであっていますでしょうか…?

前回返信した内容については意図通りに修正されていると思います。

> ただこれだと、どのカテゴリを選択しても、カードが1枚も表示されず…

どこが原因なのかはprintで変数の値を出力するなどしてデバッグしてください。
例えば、「@fitems = grep 〜;」の上下で「print 'fitems=', scalar(@fitems);」を実行。
  → grep前が0件なら、ファイル上で0件もしくは&splititem('F');が間違っている可能性がある。
    → ファイルとsub splititemを確認。
  → grep前が1件以上でgrep後が0件なら、%card_name_hashの定義が間違っているか$Fm{'category'}が正しく渡されてきていない可能性がある。
    → 「print 'category=', $Fm{'category'};」を実行。
      → 意図した値なら、$Fm{'category'}は正しく渡ってきているということなので%card_name_hashの定義を確認。
      → 意図しない値なら、select要素として出力させている部分のHTMLを確認。
このようにして、変数の値がどこでどのように変化していくのかを把握しておいたほうが良いです。

あと、$startに初期値が設定されていないのでページ選択ができないですね。
ページ選択する場合はNo.1868と1869で返信した内容を参考にしてください。
コメントを書く(引用) | スレッド一覧

CGIROOM