• ベストアンサー

while繰り返し処理で買い物かごカテゴリ階層表示作成

買い物かごのカテゴリ階層表示作成を下記のようにしたいのですが 例) ・カテゴリ1   ・サブカテゴリ1     ・サブサブカテゴリ1     ・サブサブカテゴリ2   ・サブカテゴリ2   ・サブカテゴリ3 ・カテゴリ2 while処理のメインカテゴリ生成内でwhile処理メインカテゴリサブカテゴリ生成内でwhile処理サブカテゴリ該当サブサブカテゴリ作成です。 現在、下記のような状態となっております。 ・カテゴリ1   ・サブカテゴリ1     ・サブサブカテゴリ1     ・サブサブカテゴリ2   ・サブカテゴリ1   ・サブカテゴリ2   ・サブカテゴリ1   ・サブカテゴリ2   ・サブカテゴリ3 ・カテゴリ2 該当サブカテゴリには3つ配列変数があります。 while処理でサブカテゴリ1内の該当サブサブカテゴリ1と2を 出力後、サブカテゴリ1がまた出力されます。サブカテゴリ1と2を 出力後、またサブカテゴリ1、2、3と出力します。 メインカテゴリは正常表示です。 1回のwhile処理に1個ずつ増やして出力しています。 出力する変数の場所を変えると、サブカテゴリは正常表示になり 今度はサブサブカテゴリが表示されなくなります。 サブカテゴリのwhile処理の計算方法がちがうのでしょうか? ご教授お願いいたします。

  • x01ht
  • お礼率47% (10/21)
  • Perl
  • 回答数8
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.8

補足ありがとうございます。#5のソースを2箇所修正します。 1つ目は、私が追加した部分なんですが、計算式が間違っていました。失礼しました。 2つ目は、$ITEMOPTION2 と $ITEMOPTION3 を $ITEMCATE_SELECT に追加する部分ですが、IF文の中に有り、サブサブカテゴリが無い場合に通過しません。この時追加すべき $ITEMOPTION2 が追加されません。この代入をIF文の外に出す必要があります。 #5のソースの8行目 >$count2_offset[$i+1] = @temp2; $count2_offset[$i+1] = $count2_offset[$i] + @temp2; #5のソースの58行目~61行目 >$ITEMCATE_SELECT = "$ITEMCATE_SELECT$ITEMOPTION2$ITEMOPTION3"; >} > >$count2++; } $ITEMCATE_SELECT = "$ITEMCATE_SELECT$ITEMOPTION2$ITEMOPTION3"; $count2++; 以上です。 補足していただいた入力データで簡単にチェックしましたが、正常に動いていると思います。ご確認ください。

x01ht
質問者

お礼

venzou 様 ご多忙の中、ご回答いただきありがとうございます。 正常に動いております。 感謝の気持ちでいっぱいです。 心より感謝申し上げます。 venzou様のように、短時間でスクリプトを作成、修正、改造できる ように励みたいと思います。 お礼の投稿で質問をするのは大変恐縮ですが venzou様はperlやその他のプログラムをどのようにして 学ばれたのでしょうか。是非、知りたいです。 私は独学で書籍や他のスクリプトを改造しながらですが まだまだです。基礎的な事柄を再徹底して学んでいきたいと 思っております。 何卒、宜しくお願いいたします。

その他の回答 (7)

回答No.7

#2です。 軽く巻き戻ります。 こんな感じにすればシンプルに書けると思いますが・・・ 空のカテゴリの場合、"サブカテゴリ2**サブカテゴリ3"という様に 空であるという事が判れば、空判定で 対応可能だと思います。 --------------------------------------------------------- $ITEMCATE = 'カテゴリ1*カテゴリ2'; $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2*サブカテゴリ3'; $ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3*サブサブカテゴリ4'; @ITEMCATE = split(/\*/,$ITEMCATE); @ITEMCATE2 = split(/\*/,$ITEMCATE2); @ITEMCATE3 = split(/\*/,$ITEMCATE3); for $cate_a (@ITEMCATE){ @cate = split(/\%/,$cate_a); for $cate_b ( @cate ){ if( $cate_b eq "" ){ next; } print $cate_b . "\n"; $cate2_a = shift(@ITEMCATE2); @cate2 = split(/\%/,$cate2_a); for $cate2_b ( @cate2 ){ if( $cate2_b eq "" ){ next; } print " " . $cate2_b . "\n"; $cate3_a = shift(@ITEMCATE3); @cate3 = split(/\%/, $cate3_a); for $cate3_b (@cate3){ if( $cate3_b eq "" ){ next; } print "  " . $cate3_b . "\n"; } } } } ----------------------------------------------------------- 思いっきり巻き戻ります。 元々、カテゴリ、サブカテゴリ、サブサブカテゴリに 親子関係を持っていないので、表示する際に複雑になっています。 簡単な方法としては、表示階層をそのままデータとして持たせる方法とか 親子関係でデータを持たせて表示の時に上手く表示させる方法などがあります。 表示をそのまま持たせる方法 -------------------------- $ITEMCATE[0]="カテゴリ1,,"; $ITEMCATE[1]=",サブカテゴリ1,"; $ITEMCATE[2]=",,サブサブカテゴリ1"; $ITEMCATE[3]=",,サブサブカテゴリ2"; $ITEMCATE[4]=",サブカテゴリ2,"; $ITEMCATE[5]=",,サブサブカテゴリ3"; $ITEMCATE[6]="カテゴリ2,,"; $ITEMCATE[7]=",サブカテゴリ3,"; $ITEMCATE[8]=",,サブサブカテゴリ4"; カンマ区切りで表示のまま配列に保存 表示はそのままループで回して、空の所をインデントにする -------------------------- 親子関係を持たせてる方法(表示方法) -------------------------- $ITEMCATE[0] = "カテゴリ1,サブカテゴリ1,サブサブカテゴリ1"; $ITEMCATE[1] = "カテゴリ1,サブカテゴリ1,サブサブカテゴリ2"; $ITEMCATE[2] = "カテゴリ1,サブカテゴリ2,サブサブカテゴリ3"; $ITEMCATE[3] = "カテゴリ2,サブカテゴリ3,サブサブカテゴリ4"; %CATE_MASTER; #親子関係を連想配列に入れる(キーとして) for $cate (@ITEMCATE) { ($cate1, $cate2, $cate3) = split(/,/, $cate); $CATE_MASTER{$cate1}{$cate2}{$cate3} = 1; } foreach $cate1 ( keys(%CATE_MASTER) ){ print $cate1 . "\n"; foreach $cate2 ( keys(%{$CATE_MASTER{$cate1}}) ){ print "  " . $cate2 . "\n"; foreach $cate3 ( keys(%{$CATE_MASTER{$cate1}{$cate2}}) ){ print "    " . $cate3 . "\n"; } } } --------------------------

x01ht
質問者

お礼

ご回答ありがとうございます。 なるほど、表示階層をそのまま持たせる方法もあるのですね。 参考にしてみます。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.6

>$ITEMCATE = 'カテゴリ1*カテゴリ2'; >$ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2*サブカテゴリ3'; >$ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3*サブサブカテゴリ4'; このデータで検証した時には、おっしゃられている不具合は出ませんでした。$ITEMCATE3の内容の私の解釈が間違っているのかもしれません。サブサブカテゴリの内容が無い場合の事を考慮していませんでした。 不具合の結果のみ書かれても検証できませんので、その時の入力データを補足してください。 $ITEMCATE; $ITEMCATE2; $ITEMCATE3;

x01ht
質問者

お礼

ご回答いただきありがとうございます。 サブサブカテゴリ登録時の*の自動表示は別のカテゴリ登録スクリプトの 問題ですので、今回の処理と別件です。すみません。後で見直してみます。 サブサブカテゴリに登録し、保存されているtxtファイルの $ITEMCATE3 =;に直接*を入力した場合に#6の補足内容になります。 何卒、宜しくお願いいたします。

x01ht
質問者

補足

ご回答ありがとうございます。ご連絡が遅くなり大変申し訳ありません。 不具合の結果時点のデータ入力になります。 $ITEMCATE = 'カテゴリ1*カテゴリ2'; $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2%サブカテゴリ3*サブカテゴリ4%サブカテゴリ5%サブカテゴリ6'; $ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3%サブサブカテゴリ4'; 上記で実行した場合下記のように表示したいのですが ・カテゴリ1   ・サブカテゴリ1     ・サブサブカテゴリ1     ・サブサブカテゴリ2   ・サブカテゴリ2     ・サブサブカテゴリ3     ・サブサブカテゴリ4   ・サブカテゴリ3 ・カテゴリ2   ・サブカテゴリ4   ・サブカテゴリ5   ・サブカテゴリ6 現在のところ、サブサブカテゴリを*で区切ると 次のサブカテゴリ2の下ではなくカテゴリ2該当のサブサブカテゴリ4に 表示されます。 また下記のように登録した場合 $ITEMCATE = 'カテゴリ1*カテゴリ2*カテゴリ3*カテゴリ4'; $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2%サブカテゴリ3*サブカテゴリ4%サブカテゴリ5%サブカテゴリ6**'; $ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3%サブサブカテゴリ4'; サブカテゴリの該当はカテゴリ1と2までしかないのでサブカテゴリ6の 後には*が入ります。 また、サブカテゴリを下記のように登録した場合(サブカテゴリ3の後に**) $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2%サブカテゴリ3**サブカテゴリ4%サブカテゴリ5%サブカテゴリ6'; カテゴリ2には該当サブカテゴリ登録なしになり サブカテゴリ4、5、6はカテゴリ3の該当になります。 ここまでは正常なのですが、 サブサブカテゴリを下記のようにすると $ITEMCATE3 = 'サブサブカテゴリ1*サブサブカテゴリ2*サブサブカテゴリ3%サブサブカテゴリ4'; サブサブカテゴリ2の該当がサブカテゴリ2ではなくカテゴリ2該当の サブカテゴリに下に表示されます。またサブカテゴリの数が サブサブカテゴリよりも多いときはサブサブカテゴリ登録データ内に 自動で*が表示されません。 いろいろ試したのですが サブサブカテゴリwhlie処理内の比較演算子で[$count3]を[$count2]に 変更したら if($ITEMCATE3[$count2] ne "" and $in{'itemcate3'} eq $ITEMCATE3[$count3]) elsif($ITEMCATE3[$count2] ne "" and $in{'itemcate3'} ne $ITEMCATE3[$count3]) 表示結果は下記のようになりました。 ・カテゴリ1   ・サブカテゴリ1     ・サブサブカテゴリ1     ・サブサブカテゴリ2   ・サブカテゴリ2   ・サブカテゴリ3 サブカテゴリ2の下に繰り返し表示されていたサブサブカテゴリ1が なくなりました。 しかし、サブカテゴリ2該当されるサブサブカテゴリ3と4は カテゴリ2のサブカテゴリ4の下に表示されサブカテゴリ6は 登録しているのに表示されません。 何卒、ご教授お願いいたします。   

  • venzou
  • ベストアンサー率71% (311/435)
回答No.5

#1、4です。追加補足ありがとうございます。問題点をいくつか発見しました。 >$ITEMOPTION2 = ""; この初期化がループの外にありましたが、中に入れる必要があります。 サブカテゴリが必要以上に繰り返されたのはこの為です。 >@ITEMCATE3 = split(/\%/, @ITEMCATE3[$count]); ここですが、$countではダメですね。サブカテゴリが先頭から幾つ目に当たるのか計算して入れる必要があります。 また、@ITEMCATE3 の内容が書き換えられてしまうので、2回目以降のループでおかしくなります。 以下、発見した問題を修正したソースです、これで試してみてください。 sub form { #サブカテゴリが先頭から幾つ目に当たるのか計算するための前処理 @temp = split(/\*/, $ITEMCATE2); $count2_offset[0] = 0; for($i = 0;$i < @temp; $i++){ @temp2 = split(/\%/, $temp[$i]); $count2_offset[$i+1] = @temp2; } $count = 0; while($count < @ITEMCATE) { if("$ITEMCATE[$count]" ne "" and $in{'itemcate'} eq "$ITEMCATE[$count]") { $ITEMCATE_SEARCH = "$ITEMCATE_SEARCH<OPTION selected>$ITEMCATE[$count]"; if($in{'mod'} eq '' or $in{'mod'} eq 'kyefind') { $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1><B><<</FONT> <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>$ITEMCATE[$count]</B></FONT></A><BR>\ \ <FONT size=-1>・</FONT><A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&mod=newfind&reverse=$in{'reverse'}\"><FONT size=-1>新着</FONT></A>"; } else { $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1>・</FONT> <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>$ITEMCATE[$count]</FONT></A><BR>\ \ <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&mod=newfind&reverse=$in{'reverse'}\"><FONT size=-1><B><<新着</B></FONT></A>"; } @ITEMCATE2 = split(/\%/, $ITEMCATE2[$count]); if($ITEMCATE2[0] ne "") { $count2 = 0; while($count2 < @ITEMCATE2) { $ITEMOPTION2 = ""; #ここで初期化が必要 if($ITEMCATE2[$count2] ne "" and $in{'itemcate2'} eq $ITEMCATE2[$count2]) { $ITEMOPTION2 = "$ITEMOPTION2<BR>\ \ <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&itemcate2=$ITEMCATE2[$count2]&reverse=$in{'reverse'}\"><FONT size=-1><B><<$ITEMCATE2[$count2]</B></FONT></A>"; } elsif($ITEMCATE2[$count2] ne "" and $in{'itemcate2'} ne $ITEMCATE2[$count2]) { $ITEMOPTION2 = "$ITEMOPTION2<BR>\ \ <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&itemcate2=$ITEMCATE2[$count2]&reverse=$in{'reverse'}\"><FONT size=-1>・$ITEMCATE2[$count2]</FONT></A>"; } $ITEMOPTION3 = ""; @ITEMCATE3 = split(/\*/, $ITEMCATE3); #初期化が必要 @ITEMCATE3 = split(/\%/, $ITEMCATE3[$count2_offset[$count]+$count2]); #$countではダメ if($ITEMCATE3[0] ne "") { $count3= 0; while($count3 < @ITEMCATE3) { if($ITEMCATE3[$count3] ne "" and $in{'itemcate3'} eq $ITEMCATE3[$count3]) { $ITEMOPTION3 = "$ITEMOPTION3<BR>\ \ \ <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&itemcate2=$ITEMCATE2[$count2]&itemcate3=$ITEMCATE3[$count3]&reverse=$in{'reverse'}\"><FONT size=-1><B><<$ITEMCATE3[$count3]</B></FONT></A>"; } elsif($ITEMCATE3[$count3] ne "" and $in{'itemcate3'} ne $ITEMCATE3[$count3]) { $ITEMOPTION3 = "$ITEMOPTION3<BR>\ \ \ <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&itemcate2=$ITEMCATE2[$count2]&itemcate3=$ITEMCATE3[$count3]&reverse=$in{'reverse'}\"><FONT size=-1>・$ITEMCATE3[$count3]</FONT></A>"; } $count3++; } $ITEMCATE_SELECT = "$ITEMCATE_SELECT$ITEMOPTION2$ITEMOPTION3"; } $count2++; } } } if("$ITEMCATE[$count]" ne "" and $in{'itemcate'} ne "$ITEMCATE[$count]") { $ITEMCATE_SEARCH = "$ITEMCATE_SEARCH<OPTION>$ITEMCATE[$count]"; $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1>・</FONT> <A href=\"./goods.cgi?itemcate=$ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>$ITEMCATE[$count]</FONT></A>"; } $count++; } }

x01ht
質問者

お礼

ご回答ありがとうございます。 実行結果ですが下記のようになりました。 ・カテゴリ1   ・サブカテゴリ1     ・3 ・カテゴリ2 サブサブカテゴリが3の要素の数が表示されました。 3以降の表示はカテゴリ2の表示になりました。 >$ITEMOPTION2 = ""; 上記をループ内に入れるとサブカテゴリの表示の繰り返しは 消えましたが、今度はサブサブカテゴリが繰り替えされ カテゴリ2以降のサブカテゴリの最後が表示されなくなりました。 $ITEMOPTION2 = "";だけをループ内に入れた実行結果例) ・カテゴリ1   ・サブカテゴリ1     ・サブサブカテゴリ1     ・サブサブカテゴリ2   ・サブカテゴリ2     ・サブサブカテゴリ1 #ここには該当するサブサブカテゴリを登録していませんが、サブサブカテゴリ1が表示されます。   ・サブカテゴリ3     ・サブサブカテゴリ1 #同様 ・カテゴリ2   ・サブカテゴリ4     ・サブサブカテゴリ3     ・サブサブカテゴリ4   ・サブカテゴリ5     ・サブサブカテゴリ4 #ここでは該当するサブサブカテゴリを登録していませんが、今度はサブサブカテゴリ4(2番目)が表示されます。   ・サブカテゴリ6 #ここは登録していますが表示されませんでした。 大変恐れ入りますが、ご教授お願いいたします。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.4

#1です、ソース拝見しました。 今回補足して頂いた中で、気になる点は・・・ >@ITEMCATE2 = split(/\%/, @ITEMCATE2[$count]); この部分で、最初に入っていた@ITEMCATE2の内容が無くなりますが、大丈夫ですか? >@ITEMCATE3 = split(/\%/, @ITEMCATE3[$count]); 同様に、最初に入っていた@ITEMCATE3の内容が無くなります。 >if(@ITEM3[0] ne "") @ITEM3[0] この変数はここでしか使われていません。 サブサブカテゴリの処理がかなり怪しい気がします。(^^; 部分的なソースなので、ハッキリとした事は分かりませんでした。 下記を補足頂ければ、もう少し詳しい回答が書けると思います。 >@ITEMCATE = split(/\*/, $ITEMCATE); #他のファイルから読込 >@ITEMCATE2 = split(/\*/, $ITEMCATE2); #他のファイルから読込 >@ITEMCATE3 = split(/\*/, $ITEMCATE3); #他のファイルから読込 の具体的な内容。 sub form を呼び出している部分のソース。 HTMLを出力している部分のソース。

x01ht
質問者

補足

ご回答いただきありがとうございます。 >if(@ITEM3[0] ne "") @ITEMCATE3[0]の間違いです。すみません。 >@ITEMCATE = split(/\*/, $ITEMCATE); #他のファイルから読込 >@ITEMCATE2 = split(/\*/, $ITEMCATE2); #他のファイルから読込 >@ITEMCATE3 = split(/\*/, $ITEMCATE3); #他のファイルから読込 上記は別のカテゴリ登録cgiスクリプトで登録し読み込んでいます。 登録後、txtファイルに下記のように記載さます。 例) $ITEMCATE = 'カテゴリ1*カテゴリ2'; $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2*サブカテゴリ3'; $ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3*サブサブカテゴリ4'; *は階層を下にさげます。%は同階層内で表示です。 sub form内の各カテゴリwhail処理に入る前に splitで配列しています。同階層内で表示する為に%でくぎっています。 >@ITEMCATE2 = split(/\%/, @ITEMCATE2[$count]); 上記例を出力した結果を下記のようにできればと思っています。 ・カテゴリ1   ・サブカテゴリ1     ・サブサブカテゴリ1     ・サブサブカテゴリ2   ・サブカテゴリ2     ・サブサブカテゴリ3 ・カテゴリ2   ・サブカテゴリ3     ・サブサブカテゴリ4 HTMLを出力している部分は下記です。 $ITEMCATE_SELECT 上記記載でカテゴリ階層が表示されるようになっています。 HTMLを出力後の最初の表示はカテゴリ1と2が表示されるだけなっています。カテゴリ1をクリックするとカテゴリ1に該当する下位サブカテゴリとサブサブカテゴリが表示されます。 カテゴリ2の部分をクリックするとカテゴリ1部分だけの表示になり カテゴリ2に該当する下位カテゴリが表示されるようになります。 サブサブカテゴリwhail処理後のスクリプトですが $ITEMCATE_SELECT = "$ITEMCATE_SELECT$ITEMOPTION2$ITEMOPTION3"; #$ITEMCATE_SELECTに各カテゴリ表示内容を代入 $count2++; # サブカテゴリwhile処理に1追加 } } } # 下記はクリックした該当カテゴリ以外を表示します。$ITEMCATE_SEARCHは検索用です。 if("@ITEMCATE[$count]" ne "" and $in{'itemcate'} ne "@ITEMCATE[$count]") { $ITEMCATE_SEARCH = "$ITEMCATE_SEARCH<OPTION>@ITEMCATE[$count]"; $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1>・</FONT> <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>@ITEMCATE[$count]</FONT></A>"; } $count++; # カテゴリwhail処理に1追加 } } この後、HTML出力になります。 $ITEMCATE_SELECT 上記変数名でカテゴリ一覧が表示され該当カテゴリをクリックすると 下位カテゴリが表示されます。 大変、恐縮ですが、ご教授お願いいたします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

いろんなところが変. とりあえず, 配列とスカラーの違いは理解すること.

回答No.2

まず、どの様な配列を用意されているかと 表示処理をどの様に書かれているかという事を 示していただけないと、回答のしようがないと思います。 まぁ、一番思い当たるのは それぞれのwhile内で同一の変数を使っているんじゃないかな という事ですかね。 それも結果を見ただけでは判断しかねるわけですが・・・

  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

ソースがないと分かりません。 ソースを補足してください。

x01ht
質問者

補足

ソースです。 @ITEMCATE = split(/\*/, $ITEMCATE); #他のファイルから読込 @ITEMCATE2 = split(/\*/, $ITEMCATE2); #他のファイルから読込 @ITEMCATE3 = split(/\*/, $ITEMCATE3); #他のファイルから読込 sub form { $count = 0; while($count < @ITEMCATE) { if("@ITEMCATE[$count]" ne "" and $in{'itemcate'} eq "@ITEMCATE[$count]") { $ITEMCATE_SEARCH = "$ITEMCATE_SEARCH<OPTION selected>@ITEMCATE[$count]"; if($in{'mod'} eq '' or $in{'mod'} eq 'kyefind') { $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1><B><<</FONT> <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>@ITEMCATE[$count]</B></FONT></A><BR>\ \ <FONT size=-1>・</FONT><A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&mod=newfind&reverse=$in{'reverse'}\"><FONT size=-1>新着</FONT></A>"; } else { $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1>・</FONT> <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>@ITEMCATE[$count]</FONT></A><BR>\ \ <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&mod=newfind&reverse=$in{'reverse'}\"><FONT size=-1><B><<新着</B></FONT></A>"; } $ITEMOPTION2 = ""; @ITEMCATE2 = split(/\%/, @ITEMCATE2[$count]); if(@ITEMCATE2[0] ne "") { $count2 = 0; while($count2 < @ITEMCATE2) { if(@ITEMCATE2[$count2] ne "" and $in{'itemcate2'} eq @ITEMCATE2[$count2]) { $ITEMOPTION2 = "$ITEMOPTION2<BR>\ \ <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&itemcate2=@ITEMCATE2[$count2]&reverse=$in{'reverse'}\"><FONT size=-1><B><<@ITEMCATE2[$count2]</B></FONT></A>"; } elsif(@ITEMCATE2[$count2] ne "" and $in{'itemcate2'} ne @ITEMCATE2[$count2]) { $ITEMOPTION2 = "$ITEMOPTION2<BR>\ \ <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&itemcate2=@ITEMCATE2[$count2]&reverse=$in{'reverse'}\"><FONT size=-1>・@ITEMCATE2[$count2]</FONT></A>"; } $ITEMOPTION3 = ""; @ITEMCATE3 = split(/\%/, @ITEMCATE3[$count]); if(@ITEM3[0] ne "") { $count3= 0; while($count3 < @ITEMCATE3) { if(@ITEMCATE3[$count2] ne "" and $in{'itemcate3'} eq @ITEMCATE3[$count3]) { $ITEMOPTION3 = "$ITEMOPTION3<BR>\ \ \ <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&itemcate2=@ITEMCATE2[$count2]&itemcate3=@ITEMCATE3[$count3]&reverse=$in{'reverse'}\"><FONT size=-1><B><<@ITEMCATE3[$count3]</B></FONT></A>"; } elsif(@ITEMCATE3[$count2] ne "" and $in{'itemcate3'} ne @ITEMCATE3[$count3]) { $ITEMOPTION3 = "$ITEMOPTION3<BR>\ \ \ <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&itemcate2=@ITEMCATE2[$count2]&itemcate3=@ITEMCATE3[$count3]&reverse=$in{'reverse'}\"><FONT size=-1>・@ITEMCATE3[$count3]</FONT></A>"; } $count3++; } $ITEMCATE_SELECT = "$ITEMCATE_SELECT$ITEMOPTION2$ITEMOPTION3"; } $count2++; } } } if("@ITEMCATE[$count]" ne "" and $in{'itemcate'} ne "@ITEMCATE[$count]") { $ITEMCATE_SEARCH = "$ITEMCATE_SEARCH<OPTION>@ITEMCATE[$count]"; $ITEMCATE_SELECT = "$ITEMCATE_SELECT<BR><FONT size=-1>・</FONT> <A href=\"./goods.cgi?itemcate=@ITEMCATE[$count]&reverse=$in{'reverse'}\"><FONT size=-1>@ITEMCATE[$count]</FONT></A>"; } $count++; } } 何卒、よろしくお願いいたします。

関連するQ&A

  • Movable Typeでサブカテゴリの階層化表示

    Movable Type 3.171-ja を使っています。カテゴリの表示について教えてください。 複数のカテゴリに、幾つかの階層をもったサブカテゴリを設定し、それぞれにエントリーがあります。 現時点では、サブカテゴリを無視して、エントリーがあるカテゴリのみ表示しているのですが、サブカテゴリを意識した階層化表示にする事ができないかな。。と、考えています。 Movable Typeのタグだけを利用して、下記の様な表示を作る事はできないでしょうか? カテゴリ1 (エントリーの数) └カテゴリ1-1 (エントリーの数) |└エントリー1-1-1 |└エントリー1-1-2 |└エントリー1-1-3 └カテゴリ1-2 (エントリーの数) |└カテゴリ1-2-1 (エントリーの数) ||└エントリー1-2-1-1 ||└エントリー1-2-1-2 ||└エントリー1-2-1-3 |└カテゴリ1-2-2 (エントリーの数) ||└カテゴリ1-2-2-1 (エントリーの数) |||└エントリー1-2-2-1 |||└エントリー1-2-2-2 |||└エントリー1-2-2-3 ||└エントリー1-2-2-1 ||└エントリー1-2-2-2 ||└エントリー1-2-2-3 |└エントリー1-2-1 |└エントリー1-2-2 |└エントリー1-2-3 └カテゴリ1-3 (エントリーの数) |└エントリー1-3-1 |└エントリー1-3-2 |└エントリー1-3-3 カテゴリ2 (エントリーの数) └エントリー2-1 └エントリー2-2 └エントリー2-3 宜しくお願いします。

  • movable type 深い階層カテゴリーを大量に作る

    MT3.2です。 MTに関してはかなり素人です。 カテゴリー・サブカテゴリーを作成するにあたり、通常は MTの管理画面にて手動にて作成してゆきますが、 なんらかのリストのインポートなどで(当然その元リスト自体は 作成済みとする)深い階層(サブカテゴリ)までを反映した 状態をMT上に作ることはできないのでしょうか? (各エントリーでサブカテゴリーをいくつも登録しリストを インポートするという方法だと、存在しないカテゴリーは 自動で作成されるものの階層構造の再現まではできない) やはりデーターベースうんぬんになってくるのでしょうか。 はたまた、java scriptやphp・cgi関連を絡めないと かなり厳しいなのでしょうか。 ↓これくらいをしたい。 ・総エントリー数   約  10000 ・トップカテゴリー数 約  10~20  これより枝分かれし、最高15~20階層ほどのカテゴリーで  末端のカテゴリー数 約    300 ・総カテゴリー数   約   1000 などというムチャなものを想定。 あまりにも分かっていない質問でもうしわけありません。 ネット上で色々調べましたがどうもよくわかりませんでした。

  • PHPでcsv内のデータをカテゴリ・サブカテゴリ別で表示させたい

    sample.csvの中身が、 [製品名・カテゴリ・サブカテゴリ] であるとして、 これをカテゴリ・サブカテゴリ別で表示させたいのですが、 いまいちどのようにしたらいいのかわかりません。 csvの中身のカテゴリ・サブカテゴリは何個あるか分からない状況で、 それぞれのカテゴリ・サブカテゴリに一致した製品を表示していくということがしたいです。 要はcsvの中身を添付ファイルのように表示させていきたいです。 foreachでcsvを分解し、カテゴリのみの配列を新たに作成。 その配列をさらにforeachで回し、、、、 などいろいろしてみたのですが、どうにもこうにもできません。 質問内容が支離滅裂かもしれませんが、 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • txtファイル読込みで関連させる方法

    サブサブカテゴリ登録フォームで悩んでいます。前回、私のソース記載部分が間違っていましたので再度投稿させていただきます。 下記のtxtファイル内容をカテゴリ登録フォームで読み込みます。 $ITEMCATE = 'カテゴリ1*カテゴリ2*カテゴリ3'; $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2*サブカテゴリ3*'; $ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3'; (*は階層を下げます。%は同階層内で下げます) 現在は下記のソース(ITEMCATE部分は省略)で @SUBCATE = split(/\*/, $ITEMCATE2);#*で区切る $count = 0; while(@SUBCATE[$count]) { if(@SUBCATE[$count] eq $in{'cate2'}) { $NO = $count; last; } $count++; } @SUBSUBCATE = split(/\*/, $ITEMCATE3);#*で区切る $ITEM3CATEOP = ""; $count = 0; while($count < @ITEMCATE3) { $ITEM3CATEOP .= "<OPTION>@ITEMCATE3[$count]"; $count++; } 上記ソース内容の関連性は*で区切る為、下記のようになります。 サブカテゴリ1%サブカテゴリ2は サブサブカテゴリ1%サブサブカテゴリ2と関連。 下記のように関連させる点で悩んでいます。↓ サブカテゴリ1%サブカテゴリ2は サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3と関連させる方法。 ご教授お願いいたします。

  • カテゴリ登録で関連させる方法

    カテゴリ→サブカテゴリ→サブサブカテゴリを関連させる登録スクリプトでサブカテゴリとサブサブカテゴリが関連させる方法を教えてください。 読み込みtxtファイル↓ $ITEMCATE = 'カテゴリ1*カテゴリ2*カテゴリ3'; $ITEMCATE2 = 'サブカテゴリ1%サブカテゴリ2*サブカテゴリ3*'; $ITEMCATE3 = 'サブサブカテゴリ1%サブサブカテゴリ2*サブサブカテゴリ3'; *は階層を下にさげます。%は同階層内で表示です。 サブカテゴリ1の下位にサブサブカテゴリ1と2は関連するのですが、サブサブカテゴリ3はサブカテゴリ2ではなくサブカテゴリ3の関連になります。 サブカテゴリを登録するスクリプト↓(正常) @ITEMCATE = split(/\*/,$ITEMCATE); $count =0; while(@ITEMCATE[$count]) { $count++; } $MAX = $count-1; @ITEMCATE2 = split(/\*/,$ITEMCATE2); @ITEMCATE2[$in{'NO'}] = $in{'SUBCATE'}; $ITEMCATE2 = @ITEMCATE2[0]; $count = 1; while($count <= $MAX) { $ITEMCATE2 .= "\*@ITEMCATE2[$count]"; $count++; } サブサブカテゴリを登録するスクリプト↓(うまくいきません) @ITEMCATE = split(/\*/,$ITEMCATE); $count =0; while(@ITEMCATE[$count]) { $count++; } $MAX = $count-1; @ITEMCATE2 = split(/\*/,$ITEMCATE2); @ITEMCATE2[$in{'NO'}] = $in{'SUBCATE'}; $ITEMCATE2 = @ITEM2[0]; $count = 1; while($count <= $MAX) { $ITEMCATE2 .= "\*@ITEMCATE2[$count]"; $count++; } $MAX = $count-1; @ITEMCATE3 = split(/\*/,$ITEMCATE3); @ITEMCATE3[$in{'NO'}] = $in{'SUBSUBCATE'}; $ITEMCATE3 = @ITEMCATE3[0]; $count = 1; while($count <= $MAX) { $ITEMCATE3 .= "\*@ITEMCATE3[$count]"; $count++; } ご教授おねがいたします。

  • whileでの繰り返し表示

    すみません。C の初心者です。 while()で下記の内容を作成しようと しているのですが、putchar()を使わず 作成すると言う相談です。 また、prinrf()を使わないで 実行例が出来るのでしょうか? ※10が入力され場合の実行の時 ********** ←10個 0または負の値が入力されると、「*」は表示せず、改行のみを表示すること。 基本的事で恐縮ですが、初心者に分かり易く教えて下さい。

  • 特定のフォルダを階層下まで表示を変えたい

    ほかのカテゴリで質問したのですが回答がありませんでした。 すべてのフォルダではなく、ある特定のフォルダの表示だけを階層下まで「詳細」に変更したいのです。 すべてのフォルダですとWindowsの処理で可能ですし、階層下までをしなくてもいいのなら、WSHで下のように書いて、その中へフォルダをドラッグしたらできました。 '----------------------------------------------------- Set objShell = WScript.CreateObject("WScript.Shell") objShell.SendKeys "{ENTER}" WScript.Sleep 200 objShell.SendKeys "%V" WScript.Sleep 200 objShell.SendKeys "^D" WScript.Sleep 200 objShell.SendKeys "%{f4}" '---------------------------------------- どなたか、階層下まで同じ処理をする方法か、それともそのような処理ができるフリーソフトをご存知ないでしょうか?

  • accessのルックアップを階層表示できないか

    ACCESSの勉強をはじめています。データ入力の便利な機能としてルックアップを使っています。ルックアップする商品が数十件以上になると、一覧の中から該当品を探すことが大変になります。商品をカテゴリー別に分類して、メニューコマンドのように階層化表示ができると便利だと思います。そんなことがACCESSでできるのかどうか、ご存知の方がいらしたらどうぞお教えください。いつも的確で、しかも迅速に答えていただけるので感謝しています。今回もどうぞよろしくお願いします。

  • MovableType 各カテゴリーページでそのカテゴリーに属するエントリーだけを表示したい

    はじめまして。 只今、MovableType3.35でウェブサイトを作成しています。 ご質問の内容は.... カテゴリーページに飛んだ時に表示されるカテゴリー一覧を、 メインカテゴリーとそのメインカテゴリーに属するエントリーだけが そのメインカテゴリー表示の下に追加されるようにしたいのです。 ※わかりにく説明で申し訳ございません、下記に簡単に説明いたします。 例えば、トップページのカテゴリーに 【カテゴリーA】 【カテゴリーB】 【カテゴリーC】   とある時、 【カテゴリーA】のページに行くと・・・ --------------------------------------- 【カテゴリーA】  カテゴリーAに属するエントリー1  カテゴリーAに属するエントリー2  カテゴリーAに属するエントリー3 【カテゴリーB】 【カテゴリーC】 --------------------------------------- このように表示され、 カテゴリーBのページに行くと・・・・ --------------------------------------- 【カテゴリーA】 【カテゴリーB】  カテゴリーBに属するエントリー1  カテゴリーBに属するエントリー2  カテゴリーBに属するエントリー3 【カテゴリーC】 --------------------------------------- という風に表示させたいのです。 現在、トップページは基本の3カラム構造で、左側にカテゴリーを 上から下に並べており、そちらのソースが下の通りになります。 ---------------------------------------------------------------- <MTIfArchiveTypeEnabled archive_type="Category"> <div id="category-archives"> <MTTopLevelCategories> <MTSubCatIsFirst><ul></MTSubCatIsFirst> <MTIfNonZero tag="MTCategoryCount"> <li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"> <$MTCategoryDescription$></a> <MTElse><li><$MTCategoryDescription$></MTElse> </MTIfNonZero><MTSubCatsRecurse></li> <MTSubCatIsLast></ul></MTSubCatIsLast> </MTTopLevelCategories> </div> </MTIfArchiveTypeEnabled> ---------------------------------------------------------------- トップページのカテゴリーをクリックした先のページを 現在カテゴリーアーカイブ上で作成しようと上のソースをいじって 色々試してみましたが、上手くいきません。 全ての各カテゴリーの下にそのカテゴリーに属するエントリーを表示 させる事はできたのですが、今いるカテゴリーページのエントリー だけを表示させる事がどうもよくわかりません。 何卒、ご指導・ご鞭撻宜しくお願い致します。

  • 【EXCELマクロ】サブフォルダ内のファイル名一覧

    いつもお世話になります。 マクロ初心者です。 ファイル名の一覧を取得するマクロを、他サイトを参考に作成しました。 構造は以下のようになっておりました。 C:\test\ファイル  ├1234-5678.pdf  ├1234-5679.pdf  ├1234-5680.pdf ・ ・ ・ これについては、下記のコードでファイル名を取得することができました。 Sub ファイル一覧() フォルダ = "C:\test\ファイル" ファイル名 = Dir(フォルダ & "\*.*") 行 = 2 Range("A2:A1000").Clear Do While ファイル名 <> "" Cells(行, 1).Value = Left(ファイル名, 9) 行 = 行 + 1 ファイル名 = Dir() Loop End Sub Sheet1のA列に以下のように表示されます。 1234-5678 1234-5679 1234-5680 ・ ・ ・ ところが今回、ファイルをフォルダで分類することになってしまいました。 以下のような構造です。 C:\test\ファイル  └カテゴリ1   └サブカテゴリ1-1    ├1234-5678.pdf    └1234-5679.pdf  └カテゴリ2   └サブカテゴリ2-1    └1234-5680.pdf   └サブカテゴリ2-2    └1234-5681.pdf ・ ・ ・ 望む結果としては、フォルダ名は表示させず、 上記と同様、A列にファイル名のみを表示したいと思っています。 1234-5678 1234-5679 1234-5680 1234-5681 ・ ・ ・ フォルダ名にワイルドカードを用いればいいかと思うのですが、どうにも上手くいきません。 ※PDFファイルを置く階層は、すべて カテゴリ→サブカテゴリ 以下(2階層)です。 ※ファイル名の文字数はすべて同一です。 どのようにコードを変更すれば上手くいくでしょうか。 アドバイスだけでもいただけると幸いです。 長々とごめんなさい。よろしくお願いいたします。

専門家に質問してみよう