バージョン選択

フォーラム

メニュー

オンライン状況

153 人のユーザが現在オンラインです。 (147 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 153
もっと...

サイト内検索

質問 > フロント機能 > カート情報の受け渡しについて

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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: カート情報の受け渡しについて
うまくいってよかったです

メッセージを入力出来るところでの文字チェックだけは気をつけてくださいね
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は90,451名です
総投稿数は110,415件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1695
8
red
1571
9
mcontact
1378
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.