質問 > その他 > 2.11j系 商品規格マトリックス表示について |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
greanpice |
投稿日時: 2013/10/13 13:49
対応状況: −−−
|
長老 登録日: 2011/7/12 居住地: 投稿: 180 |
2.11j系 商品規格マトリックス表示について お世話になります。
eccube2.11.5を使用しておりますが、 商品詳細画面での規格のプルダウン表示を一覧表の表示にしたいのですが、やり方がいまいちわからず、苦戦しています。 どなたかご教授いただければ幸いです。 どうぞよろしくお願いいたします。 |
nekochan |
投稿日時: 2013/10/13 21:49
対応状況: −−−
|
常連 登録日: 2011/6/17 居住地: 千葉県 投稿: 41 |
Re: 2.11j系 商品規格マトリックス表示について [EC-CUBE]2.11.5
[レンタルサーバー]ファーストサーバー [OS]Linux [データベース]MySQL5.0 [WEBサーバ]Apache2.2 返信でなくてごめんなさい。 私も同じ問題で困っています。どなたか教えてください。 おおよそは、EC-Cube 公式完全ガイド(翔泳社)のp233のやり方でできますが、もう一工夫が必要のようです。翔泳社のサポートサイトにある2.12用のソースをダウンロードし、その中から、『規格のテーブル表示』に関する部分を抜きだし、2.11.5の下記二つのファイルの該当箇所に貼りつけました。 data/class/pages/products/LC_Page_Products_Detail.php data/Smarty/templates/default/products/detail.tpl <問題点> ほぼ、これで出来ているのですが、お客さんが、うっかりどのラジオボタンにもチェックを入れず、「カゴに入れる」ボタンを押してしまった場合、『※ 規格を選択してください』という、アラーム画面になります。ここで買いたい規格選択のラジオボタンにチェックを入れて「カゴに入れる」ボタンを押せば、商品はカゴに入り、画面は元の商品詳細画面に戻るはずです。ところが、実際には「ご指定のページはございません。」というエラーページに遷移してしまいます(商品はカゴに入っています)。元の商品詳細画面に戻すにはどういう風に修正すればよろしいでしょうか? pHP未熟者で、自力修正できません。お分かりになる方教えてください。 data/class/pages/products/LC_Page_Products_Detail.php への追加コード 3箇所有ります。 (1)1箇所目 * Page のプロセス. * * @return void */ function process() { //この下の部分を追加 if (!empty($_POST["class"])) { $splited_class = explode("_", $_POST["class"]); $_REQUEST["product_class_id"] = $splited_class[0]; $_REQUEST["classcategory_id1"] = $splited_class[1]; $_REQUEST["classcategory_id2"] = $splited_class[2]; } parent::process(); $this->action(); $this->sendResponse(); } //追加ここまで /** * Page のAction. * * @return void */ (2)2箇所目 // 規格1が設定されている $this->tpl_classcat_find1 = $objProduct->classCat1_find[$product_id]; // 規格2が設定されている $this->tpl_classcat_find2 = $objProduct->classCat2_find[$product_id]; //以下の1行を追加 $this->classTable = $this->getClassDataForTable($product_id); $this->tpl_stock_find = $objProduct->stock_find[$product_id]; $this->tpl_product_class_id = $objProduct->classCategories[$product_id]['__unselected']['__unselected']['product_class_id']; $this->tpl_product_type = $objProduct->classCategories[$product_id]['__unselected']['__unselected']['product_type']; (3)3箇所目 /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } //以下を追加 function getClassDataForTable($product_id) { $this->arrProductsClass = $this->lfGetProductsClass($product_id); $this->arrClassCat2 = array(); $classTable = array(); // 規格1、2が設定されている場合は規格1×規格2の配列を作成 if ($this->tpl_classcat_find1 == true && $this->tpl_classcat_find2 == true) { foreach ($this->arrProductsClass as $productsClass) { $key1 = $productsClass["classcategory_id1"]; $this->arrClassCat1[$key1] = $productsClass["classcategory_name1"]; $key2 = $productsClass["classcategory_id2"]; $this->arrClassCat2[$key2] = $productsClass["classcategory_name2"]; } $x = 0; // x軸 $y = 0; // y軸 // 規格1行を作成 $classTable[$x][$y] = ""; $x++; foreach ($this->arrClassCat1 as $key1 => $value1) { if ($value1 != "選択してください") { $classTable[$x][$y] = $value1; $x++; } } $x = 0; $y++; // 規格2列を作成 foreach ($this->arrClassCat2 as $key2 => $value2) { $classTable[$x][$y] = $value2; $y++; } $x = 1; $y = 1; // マトリックスを作成 foreach ($this->arrClassCat1 as $key1 => $value1) { if ($value1 != "選択してください") { foreach ($this->arrClassCat2 as $key2 => $value2) { $classTable[$x][$y]["value"] = null; // 選択した項目かチェック if ($key1 == $_REQUEST["classcategory_id1"] && $key2 == $_REQUEST["classcategory_id2"]) { $classTable[$x][$y]["checked"] = "checked"; } // 商品の規格IDを取得 foreach ($this->arrProductsClass as $productsClass) { if ($productsClass["classcategory_id1"] == $key1 && $productsClass["classcategory_id2"] == $key2) { // 在庫チェック if ($productsClass["stock_unlimited"] != 1 && $productsClass["stock"] == 0) { $classTable[$x][$y]["value"] = null; } else { if (!empty($productsClass["product_class_id"])) { $classTable[$x][$y]["value"] = $productsClass["product_class_id"]. "_". $key1. "_". $key2; } else { $classTable[$x][$y]["value"] = null; } } } } $y++; } $x++; } } } else if ($this->tpl_classcat_find1 == true && $this->tpl_classcat_find2 == false) { foreach ($this->arrProductsClass as $productsClass) { $key1 = $productsClass["classcategory_id1"]; $this->arrClassCat1[$key1] = $productsClass["classcategory_name1"]; } $x = 0; // x軸 $y = 0; // y軸 foreach ($this->arrClassCat1 as $key1 => $value1) { $classTable[$x][$y] = $value1; $x++; } $x = 0; $y++; // マトリックスを作成 foreach ($this->arrClassCat1 as $key => $value) { $classTable[$x][$y]["value"] = null; // 選択した項目かチェック if ($key == $_REQUEST["classcategory_id1"]) { $classTable[$x][$y]["checked"] = "checked"; } // 商品の規格IDを取得 foreach ($this->arrProductsClass as $productsClass) { if ($productsClass["classcategory_id1"] == $key) { // 在庫チェック if ($productsClass["stock_unlimited"] != 1 && $productsClass["stock"] == 0) { $classTable[$x][$y]["value"] = null; } else { $classTable[$x][$y]["value"] = $productsClass["product_class_id"]. "_". $key; } } } $x++; } } return $classTable; } //以上追加終わり /* プロダクトIDの正当性チェック */ function lfCheckProductId($admin_mode,$product_id) { // 管理機能からの確認の場合は、非公開の商品も表示する。 if (isset($admin_mode) && $admin_mode == 'on') { data/Smarty/templates/default/products/detail.tpl への追加 <!--▼買い物かご--> <div class="cart_area clearfix"> <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="<!--{$tpl_product_id}-->" /> <input type="hidden" name="product_class_id" value="<!--{$tpl_product_class_id}-->" id="product_class_id" /> <input type="hidden" name="favorite_product_id" value="" /> <!--{if $tpl_stock_find}--> //以下に規格テーブル部分を追加(元のプルダウンリスト部分は削除) <!--{if $tpl_classcat_find1 && $tpl_classcat_find2}--> <!--{$tpl_class_name1|h}--> × <!--{$tpl_class_name2|h}--> <!--{if $arrErr.classcategory_id1 != ""}--> <br /><span class="attention">※ 規格を選択してください</span><br> <!--{/if}--> <table> <!--{foreach from=$classTable key="key" item="value" name="dummy"}--> <tr> <!--{foreach from=$value key="key2" item="value2" name="dummy2"}--> <!--{if $key == 0 || $key2 == 0}--> <td><!--{$value2}--></td> <!--{else}--> <!--{if $value2.value != null}--> <td><input type="radio" name="class" value="<!--{$value2.value}-->" <!--{$value2.checked}-->></td> <!--{else}--> <td>-</td> <!--{/if}--> <!--{/if}--> <!--{/foreach}--> </tr> <!--{/foreach}--> </table> <!--{elseif $tpl_classcat_find1}--> <!--{$tpl_class_name1|h}--> <!--{if $arrErr.classcategory_id1 != ""}--> <br /><span class="attention">※ 規格を選択してください</span><br> <!--{/if}--> <table> <!--{foreach from=$classTable key="key" item="value" name="dummy"}--> <tr> <!--{foreach from=$value key="key2" item="value2" name="dummy2"}--> <!--{if $key2 == 0}--> <td><!--{$value2}--></td> <!--{else}--> <!--{if $value2.value != null}--> <td><input type="radio" name="class" value="<!--{$value2.value}-->" <!--{$value2.checked}-->></td> <!--{else}--> <td>-</td> <!--{/if}--> <!--{/if}--> <!--{/foreach}--> </tr> <!--{/foreach}--> </table> <!--{/if}--> //以上追加終わり <!--★数量★--> <dl class="quantity"> |
k-kuwahara |
投稿日時: 2013/10/31 20:54
対応状況: −−−
|
長老 登録日: 2013/4/16 居住地: Tokyo 投稿: 175 |
Re: 2.11j系 商品規格マトリックス表示について nekochan様
こちら、「data/logs/」以下のerror.logに、何かヒントとなるようなエラーが出力されていないでしょうか? もし未確認ならば、こちらを見ると何か分かるかもしれません。 こちら、参考意見までとさせていただきます。 以上、よろしくお願い致します。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |