みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Smarty? あたくしレベルではカスタマイズできません。HELP!

現在、自力で、テンプレートサイトをカスタマイズ奮闘いたしております。が、ここ数日、全く前に進むことができません。どなたか、ご教授お願いいたします。
オプションが2個の場合、オプション1個目(例 サイズ)横軸、2個目(例 カラー)縦軸 となり、価格表のテーブルが作成されます。
これを《縦横逆表示に!》したいのです。もちろん、それぞれの対象セルの値も・・・
オプションが1個の場合、オプションが0個の場合は、そのままま表示でOK。
オプションが2個の場合のvalueの[0]と[1]を逆で、縦横のタイトルは逆になるのは理解。表の中も逆にしたいので、item[num][num2]をitem[num2][num]にして、逆表示になるもののセル数があわないし、中身が完璧には表示されない・・・ どこをどうすればよいのか途方にくれてます。
下記のHTML?以外の書き換えが必要なのでしょうか?ココ以外はカスタムができない仕様になってます。

以下、元のHTML

<!-- Option(オプション在庫・値段詳細) -->
<div id="Option" align="center">

<div class="product_name" style="margin:10px 0px;">「<{$product.name}>」のオプション詳細情報</div>

<{***** オプションが1個の場合 *****}>
<{if $option_num == 1}>
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<{***** オプション名を表示 *****}>
<{section name=num loop=$option_value[0]}>
<th class="option_cell1"><{$option_value[0][num].name}></th>
<{/section}>
</tr>
<tr>
<{***** 在庫数・値段などを表示 *****}>
<{section name=num loop=$option_item[0]}>
<td class="option_cell2">
<{$option_item[0][num].price}><br />
<{if $option_item[0][num].d_flg == true}>
<{$option_item[0][num].d_stk}>
<{/if}>
</td>
<{/section}>
</tr>
</table>

<{***** オプションが2個の場合 *****}>
<{elseif $option_num == 2}>
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<th class="option_cell1"></th>
<{***** オプション名(一つ目)を表示(横に列挙) *****}>
<{section name=num loop=$option_value[0]}>
<th class="option_cell1"><{$option_value[0][num].name}></th>
<{/section}>
</tr>
<{section name=num loop=$option_value[1]}>
<tr>
<{***** オプション名(一つ目)を表示(縦に列挙) *****}>
<th class="option_cell1"><{$option_value[1][num].name}></th>
<{***** 在庫数・値段などを表示 *****}>
<{section name=num2 loop=$option_item[num]}>
<td class="option_cell2">
<{$option_item[num][num2].price}><br />
<{if $option_item[num][num2].d_flg == true}>
<{$option_item[num][num2].d_stk}>
<{/if}>
</td>
<{/section}>
</tr>
<{/section}>
</table>

<{***** オプションがない場合 *****}>
<{else}>
<div style="margin-bottom:10px;margin-top:10px;">オプション情報がありません。</div>
<{/if}>

<div class="option_btn" style="margin-bottom:10px;margin-top:10px;">
<a href="javascript:window.close();">閉じる</a>
</div>
<br />

</div>

投稿日時 - 2008-03-28 14:51:30

QNo.3902061

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

>しかしながら、《オプションがない場合》が表示されました。
これが表示されるケースは$option_numの値が1または2以外の場合なので、$option_numの値がおかしいのでは??

以下のコードで出力される値をまず確認しましょう。
echo $option_num;
echo "<br />";
print_r($option_item);
echo "<br />";
print_r($option_value);

投稿日時 - 2008-03-31 10:46:13

補足

おはようございます。
貴重なお時間を、本当に有り難うございます。

早速、出力してみました。

echo $option_num; echo "
"; print_r($option_item); echo "
"; print_r($option_value);
1号 5,250円(税込)
...在庫あり 5,250円(税込)
...在庫あり 5,250円(税込)
...在庫あり
echo $option_num; echo "
"; print_r($option_item); echo "
"; print_r($option_value);
2号 5,775円(税込)
...お取寄せ 5,775円(税込)
...お取寄せ 5,775円(税込)
...お取寄せ
echo $option_num; echo "
"; print_r($option_item); echo "
"; print_r($option_value);
3号 5,775円(税込)
...お取寄せ 5,775円(税込)
...お取寄せ 5,775円(税込)
...お取寄せ
echo $option_num; echo "
"; print_r($option_item); echo "
"; print_r($option_value);
D 6,300円(税込)
...お取寄せ 6,300円(税込)
...お取寄せ 6,300円(税込)
...お取寄せ
echo $option_num; echo "
"; print_r($option_item); echo "
"; print_r($option_value);
4号 0円(税込)
...お取寄せ 0円(税込)
...お取寄せ 0円(税込)
...お取寄せ
echo $option_num; echo "
"; print_r($option_item); echo "
"; print_r($option_value);

と出てきました。
私にはちんぷんかんぷんなのですが・・・

上の出力は、別とさせていただいて、以前にご教授いただいたことと、
私なりに、適当な組み合わせで惜しいところまで行ったとこを組み合わせた結果、うまいこと表示されるようになったのですが、構文的に問題があるのかないのか不明です。

【元】

<{***** オプションが2個の場合 *****}>
<{elseif $option_num == 2}>
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<th class="option_cell1"></th>
<{***** オプション名(一つ目)を表示(横に列挙) *****}>
<{section name=num loop=$option_value[0]}>
<th class="option_cell1"><{$option_value[0][num].name}></th>
<{/section}>
</tr>
<{section name=num loop=$option_value[1]}>
<tr>
<{***** オプション名(一つ目)を表示(縦に列挙) *****}>
<th class="option_cell1"><{$option_value[1][num].name}></th>
<{***** 在庫数・値段などを表示 *****}>
<{section name=num2 loop=$option_item[num]}>
<td class="option_cell2">
<{$option_item[num][num2].price}><br />
<{if $option_item[num][num2].d_flg == true}>
<{$option_item[num][num2].d_stk}>
<{/if}>
</td>
<{/section}>
</tr>
<{/section}>
</table>


【カスタム】

<{***** オプションが2個の場合 *****}>
<{elseif $option_num == 2}>
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<th class="option_cell1"></th>
<{***** オプション名(二つ目)を表示(タテに列挙) *****}>
<{section name=num loop=$option_value[1]}>
<th class="option_cell1"><{$option_value[1][num].name}></th>
<{/section}>
</tr>
<{section name=num loop=$option_value[0]}>
<tr>
<{***** オプション名(一つ目)を表示(ヨコに列挙) *****}>
<th class="option_cell1"><{$option_value[0][num].name}></th>
<{***** 在庫数・値段などを表示 *****}>
<{section name=num2 loop=$option_item}>
<td class="option_cell2">
<{$option_item[num2][num].price}><br />
<{if $option_item[num2][num].d_flg == true}>
<{$option_item[num2][num].d_stk}>
<{/if}>
</td>
<{/section}>
</tr>
<{/section}>
</table>

(1)option_value[0]とoption_value[1]を逆に・・・これでタイトルの縦横が変更
(2)option_item[num][num2]を、option_item[num2][num]に変更・・・これで、値の縦横が変更
(3)<{section name=num2 loop=$option_item[num]}>を、<{section name=num2 loop=$option_item}>にして、[num]をなくしてみました。

これで、うまいこと表示されるのですが、(3)のloopは、何も指定しなくても良いのでしょうか?

一応、この書き換えで、オプションが1個のときも、オプションが無い時も、オプションが2個で、それぞれのセル数を変えてもうまく表示はされるのですが・・・

いかんせん、何も理解が無いままのパズル形式の結果なので・・・

投稿日時 - 2008-03-31 11:17:38

テンプレートに値を割り当てられる配列の値を想像してやってみたけど、こんな感じでどうかな??

{***** オプションが2個の場合 *****}
{elseif $option_num == 2}
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<th class="option_cell1"></th>
{***** オプション名(二つ目)を表示(横に列挙) *****}
{section name=num loop=$option_value[1]}
<td class="option_cell1">{$option_value[1][num].name}</td>
{/section}
</tr>
{***** 在庫数・値段などを表示 *****}
{section name=num loop=$option_item[0]}
<tr>
{***** オプション名(一つ目)を表示(縦に列挙) *****}
<td class="option_cell1">{$option_value[0][num].name}</td>
{section name=num2 loop=$option_item}
<td class="option_cell2">
{$option_item[num2][num].price}<br />
{if $option_item[num2][num].d_flg == true}
{$option_item[num2][num].d_stk}
{/if}
</td>
{/section}
</tr>
{/section}
</table>

投稿日時 - 2008-03-28 17:41:13

補足

ご教授、本当にありがとうございます。感謝感謝です。

しかしながら、《オプションがない場合》が表示されました。

ちなみに、私ができた範囲ですと、

オプションの1個目はサイズ(6個)
オプションの2個目はカラー(5個)
とした場合に、

<!-- Option(オプション在庫・値段詳細) -->
<div id="Option" align="center">

<div class="product_name" style="margin:10px 0px;">「<{$product.name}>」のオプション詳細情報</div>

<{***** オプションが1個の場合 *****}>
<{if $option_num == 1}>
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<{***** オプション名を表示 *****}>
<{section name=num loop=$option_value[0]}>
<th class="option_cell1"><{$option_value[0][num].name}></th>
<{/section}>
</tr>
<tr>
<{***** 在庫数・値段などを表示 *****}>
<{section name=num loop=$option_item[0]}>
<td class="option_cell2">
<{$option_item[0][num].price}><br />
<{if $option_item[0][num].d_flg == true}>
<{$option_item[0][num].d_stk}>
<{/if}>
</td>
<{/section}>
</tr>
</table>

<{***** オプションが2個の場合 *****}>
<{elseif $option_num == 2}>
<table class="option_table" border="0" cellpadding="1" cellspacing="1">
<tr>
<th class="option_cell1"></th>
<{***** オプション名(一つ目)を表示(タテに列挙) *****}>
<{section name=num loop=$option_value[1]}>
<th class="option_cell1"><{$option_value[1][num].name}></th>
<{/section}>
</tr>
<{section name=num loop=$option_value[0]}>
<tr>
<{***** オプション名(二つ目)を表示(ヨコに列挙) *****}>
<th class="option_cell1"><{$option_value[0][num].name}></th>
<{***** 在庫数・値段などを表示 *****}>
<{section name=num2 loop=$option_item[0][num]}>
<td class="option_cell2">
<{$option_item[num2][num].price}><br />
<{if $option_item[num2][num].d_flg == true}>
<{$option_item[num2][num].d_stk}>
<{/if}>
</td>
<{/section}>
</tr>
<{/section}>
</table>

<{***** オプションがない場合 *****}>
<{else}>
<div style="margin-bottom:10px;margin-top:10px;">オプション情報がありません。</div>
<{/if}>

<div class="option_btn" style="margin-bottom:10px;margin-top:10px;">
<a href="javascript:window.close();">閉じる</a>
</div>
<br />

</div>

に変更した結果、
《タイトル》
・本来は横に列挙される1個目(6個)が、【タテ】に列挙OK
・本来は縦に列挙される2個目(5個)が、【ヨコ】に列挙OK

《縦&横》のそれぞれの表結果の表示
・それぞれの結果の値の読み込みも【タテ】【ヨコ】逆の値が反映されてる
・しかしながら、表の一番右側に来るタテ一列の値が、表示されない

といった具合なのですが、参考にはならないでしょうか?
プログラムの意味合いもわからなく、適当にはめ込んで言った結果なので・・・
やはり、<th><td>の表組みから変えなければならないのでしょうか・・・

お手上げです。

投稿日時 - 2008-03-28 17:51:57

あなたにオススメの質問