質問 > フロント機能 > カート情報の受け渡しについて |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
garudo |
投稿日時: 2011/3/1 20:54
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2011/3/1 居住地: 投稿: 18 |
カート情報の受け渡しについて 【商品詳細ページ】に「メッセージ」というテキストエリアを追加し、【現在のカゴの中】に各商品ごとにメッセージ内容を表示させて注文できるようにしようと思っているのですが、値の受け渡し方法がわからず困っております。
【現在のカゴの中】の表示 |削除 | 商品写真 | 商品名 | 単価 | 個数 | 小計 ------------------------------------------------------- |削除 | 商品写真 | 商品名・メッセージ| | 自分なりに ・LC_Page_Products_Detail.php ・SC_CartSession.php ・LC_Page_Cart.php ・SC_Helper_DB.php ぐらいを修正したらいいのかと思ったのですが、うまくいかず・・・。 最終的にSC_Helper_DB.phpに値が渡れば表示できるというのはわかったのですが・・・。 どなたか、【商品詳細ページ】から【現在のカゴの中】までの表示方法を教えていただけないでしょうか、よろしくお願い致します。 (色んなサイトを参考に自分なりに調べてみましたが使用ファイルが違っていたりなど、ますます混乱して分からなくなってしまいました・・・。) ------------------------------------------------------------------------------------------ [EC-CUBE] 2.4.4 [レンタルサーバ] ローカル環境にて開発 [OS] windows 7 [PHP] PHP 5.2.14 [データベース] PostgreSQL 9.0.2 [WEBサーバ] Apache/2.2.17 (Win32) ------------------------------------------------------------------------------------------ |
red |
投稿日時: 2011/3/1 22:01
対応状況: −−−
|
神 ![]() ![]() 登録日: 2010/2/15 居住地: 東京都 投稿: 1571 |
Re: カート情報の受け渡しについて メッセージは誰が入力するのでしょうか?
どのように修正して、どこがうまくいかなかったかを書いていただけるとここ違うよって指摘しやすいかもしれないです |
garudo |
投稿日時: 2011/3/2 0:24
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2011/3/1 居住地: 投稿: 18 |
Re: カート情報の受け渡しについて 説明不足ですみません。
流れとしては 1.対象商品にのみメッセージを入力できるテキストエリアを表示(フラグで判定:対応済) 2.お客様が商品に入れたいメッセージをテキストエリアに入力し、カートへ 3.【現在のカゴの中】でメッセージ付の商品がある場合はメッセージ内容も表示 4.オーダー 以上の動作を考えています。 もう一度、一からやり直しまして修正した部分が下記の内容となっています。 1.html/user_data/packages/default/detail.tpl内 [追加] <input name="mark_message" type="text" value="" size="20" /> ================================================ 2. data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php内 function process() 内を全てコピー [修正前] ----------------------- // 規格2が設定されていない場合 if(!$this->tpl_classcat_find2) { $classcategory_id2 = '0'; } $objCartSess->setPrevURL($_SERVER['REQUEST_URI']); $objCartSess->addProduct(array($_POST['product_id'], $classcategory_id1, $classcategory_id2), $this->objFormParam->getValue('quantity')); [修正後] ----------------------- // 規格2が設定されていない場合 if(!$this->tpl_classcat_find2) { $classcategory_id2 = '0'; } $mark_message = $_POST['product_id']; //追加部分 $objCartSess->setPrevURL($_SERVER['REQUEST_URI']); $objCartSess->addProduct(array($_POST['product_id'], $classcategory_id1, $classcategory_id2, $mark_message), $this->objFormParam->getValue('quantity')); ================================================ 3. data/class/helper/SC_Helper_DB.php内 function sfTotalCart(&$objPage, $objCartSess, $arrInfo) 内 [修正前] ----------------------- $objPage->arrProductsClass[$cnt]['classcategory_name2'] = $arrClassCatName[$arrData['classcategory_id2']]; [修正後] ----------------------- $objPage->arrProductsClass[$cnt]['classcategory_name2'] = $arrClassCatName[$arrData['classcategory_id2']]; $objPage->arrProductsClass[$cnt]['mark_message'] = $mark_message; //追加部分 ================================================ 4. data/Smarty/templates/default/cart/index.tpl内 表示したい部分に追加 <!--{$arrProductsClass[cnt].mark_message}--> ================================================ 5. data/class/SC_CartSession.php内 [修正前] ----------------------- function addProduct($id, $quantity, $campaign_id = "") { $find = false; $max = $this->getMax(); for($i = 0; $i <= $max; $i++) { if($_SESSION[$this->key][$i]['id'] == $id) { $val = $_SESSION[$this->key][$i]['quantity'] + $quantity; if(strlen($val) <= INT_LEN) { $_SESSION[$this->key][$i]['quantity']+= $quantity; if(!empty($campaign_id)){ $_SESSION[$this->key][$i]['campaign_id'] = $campaign_id; $_SESSION[$this->key][$i]['is_campaign'] = true; } } $find = true; } } [修正後] ※この時点でエラー ----------------------- function addProduct($id, $quantity, $mark_message, $campaign_id = "") { $find = false; $max = $this->getMax(); for($i = 0; $i <= $max; $i++) { $_SESSION[$this->key][$i]['mark_message'] = $mark_message; //追加部分 if($_SESSION[$this->key][$i]['id'] == $id) { $val = $_SESSION[$this->key][$i]['quantity'] + $quantity; if(strlen($val) <= INT_LEN) { $_SESSION[$this->key][$i]['quantity']+= $quantity; if(!empty($campaign_id)){ $_SESSION[$this->key][$i]['campaign_id'] = $campaign_id; $_SESSION[$this->key][$i]['is_campaign'] = true; } } $find = true; } } PHPの知識が少ない為、場違いな事をしているかもしれません・・・。 また、修正に必要なファイルが抜けているかも不明です・・・、こんな状態で投稿してすみません。 |
red |
投稿日時: 2011/3/2 9:32
対応状況: −−−
|
神 ![]() ![]() 登録日: 2010/2/15 居住地: 東京都 投稿: 1571 |
Re: カート情報の受け渡しについて ざっと見た限りでは
5の修正は必要ないです 3を $objPage->arrProductsClass[$cnt]['mark_message'] = $$arrCart[$i]['id'][3]; これで表示はされるかなーと思います〜 ただし、これだけだと買い物完了が出来なくなっちゃってると思うのでこのメッセージを受注詳細データに入れるのか入れないのかでLC_Page_Shopping_Complete.phpのlfReduceStock当たりも修正してください |
garudo |
投稿日時: 2011/3/2 22:23
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2011/3/1 居住地: 投稿: 18 |
Re: カート情報の受け渡しについて red 様
回答頂きありがとうございます。 教えて頂いたとおり修正した所【現在のカゴの中】まで表示する事が出来ました。 ありがとうございます。 あとはご指示して頂いたとおり、現在LC_Page_Shopping_Complete.php内を 修正しているのですがまたもやエラーで進めなくなってしまいました・・・。 1.dtb_order_detailテーブルにカラム名[mark_message]、データ型[text]を追加 2. data/class_extends/page_extends/shopping/LC_Page_Shopping_Complete_Ex.php内 function lfRegistOrderDetail() 内のみコピーして使用 [修正前] ----------------------- $sqlval['point_rate'] = $arrCart[$i]['point_rate']; $sqlval['price'] = $arrCart[$i]['price']; $sqlval['quantity'] = $arrCart[$i]['quantity']; $this->lfReduceStock($objQuery, $arrCart[$i]['id'], $arrCart[$i]['quantity']); // INSERTの実行 $objQuery->insert("dtb_order_detail", $sqlval); [修正後] ----------------------- $sqlval['point_rate'] = $arrCart[$i]['point_rate']; $sqlval['price'] = $arrCart[$i]['price']; $sqlval['quantity'] = $arrCart[$i]['quantity']; $this->lfReduceStock($objQuery, $arrCart[$i]['id'], $arrCart[$i]['quantity'], $arrCart[$i]['id'][3]); // INSERTの実行 $objQuery->insert("dtb_order_detail", $sqlval); その他にも$sqlval['mark_message'] = $arrCart[$i]['id'][3];を追加してみたりと 色々4時間ほど試してみましたが上手くいかず・・・。 なんとか全て上手くいってからご報告しようと頑張ってたのですが無理でした。 お手数をおかけしますが、教えていただけないでしょうか。 |
red |
投稿日時: 2011/3/3 9:24
対応状況: −−−
|
神 ![]() ![]() 登録日: 2010/2/15 居住地: 東京都 投稿: 1571 |
Re: カート情報の受け渡しについて lfReduceStockのなかで
$where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; という部分があり、ここがエラーになってると思います 原因は$arrIDがカスタマイズしていない場合より1項目増えているためです。 例えばですが $sqlval['mark_message'] = array_pop($arrID); とやってやるとエラーがなくなるかと思います〜 |
garudo |
投稿日時: 2011/3/3 19:28
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2011/3/1 居住地: 投稿: 18 |
Re: カート情報の受け渡しについて red 様 返答ありがとうございます。
例を参考に、array_pop()が配列の最後の値を取り除く関数だと知る事ができ、 $arrIDに格納されている値が1つ減らしたらいいのだと思いまして [修正前] ----------------------- function lfReduceStock(&$objQuery, $arrID, $quantity) { $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; $arrRet = $objQuery->select("stock, stock_unlimited", "dtb_products_class", $where, $arrID); [修正後] ----------------------- function lfReduceStock(&$objQuery, $arrID, $quantity) { $arrID = array_pop($arrID); $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; $arrRet = $objQuery->select("stock, stock_unlimited", "dtb_products_class", $where, $arrID); $arrID = array_pop($arrID);の部分を別の変数を作り、array_pop()で減らしたものを$arrIDで返したりなど 色々しましたにしてみたのですが、上手くいきませんでした・・・。 今回、dtb_order_detailへ[メッセージ]を登録する事に対して、前回の私の記述方法が間違っていたと思ったので if($arrData != "") { 〜 省略 〜 $sqlval['price'] = $arrCart[$i]['price']; $sqlval['quantity'] = $arrCart[$i]['quantity']; $sqlval['mark_message'] = $arrCart[$i]['id'][3]; $this->lfReduceStock($objQuery, $arrCart[$i]['id'], $arrCart[$i]['quantity']); と変更をしたのですが、ここの時点で既に間違っているのでしょうか? お忙しい中すみませんが、お返事よろしくお願い致します。 |
red |
投稿日時: 2011/3/3 19:56
対応状況: −−−
|
神 ![]() ![]() 登録日: 2010/2/15 居住地: 東京都 投稿: 1571 |
Re: カート情報の受け渡しについて $sqlval['price'] = $arrCart[$i]['price'];
$sqlval['quantity'] = $arrCart[$i]['quantity']; $sqlval['mark_message'] = $arrCart[$i]['id'][3]; $this->lfReduceStock($objQuery, $arrCart[$i]['id'], $arrCart[$i]['quantity']); これはあってると思います $arrID = array_pop($arrID); $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; $arrRet = $objQuery->select("stock, stock_unlimited", "dtb_products_class", $where, $arrID); ここを array_pop($arrID); $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; $arrRet = $objQuery->select("stock, stock_unlimited", "dtb_products_class", $where, $arrID); としてみるとどうでしょう? |
garudo |
投稿日時: 2011/3/3 23:58
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2011/3/1 居住地: 投稿: 18 |
Re: カート情報の受け渡しについて red 様
回答ありがとうございます。 ご指示頂いたとおり修正しました所、正常に登録できるようになりました。 その後、[受注管理]での修正もなんとかでき、運用に使用できる範囲にまで出来ました。 この件では、約1ヶ月以上も悩み続けていた修正部分でしたので本当に助かりました。 PHPの知識が浅い私にも分かりやすいご説明をして頂きありがとうございました。 |
red |
投稿日時: 2011/3/4 10:29
対応状況: −−−
|
神 ![]() ![]() 登録日: 2010/2/15 居住地: 東京都 投稿: 1571 |
Re: カート情報の受け渡しについて うまくいってよかったです
メッセージを入力出来るところでの文字チェックだけは気をつけてくださいね ![]() |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |