質問 > フロント機能 > SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
infobitz |
投稿日時: 2012/4/24 17:24
対応状況: −−−
|
半人前 登録日: 2010/2/23 居住地: 投稿: 12 |
SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい EC-CUBEの送料無料カスタマイズで対処法を考えております。
やりたいことと対処法は下記のとおりなのですが、SC_CartSession.phpから商品ステータスを取得する方法が分からず、頓挫しております。 アドバイスを頂ければ幸いです。 よろしくお願いします。 ■やりたいこと 商品ステータスに「送料無料(idは6)」を設定している商品のみを購入の場合、送料を0円にしたいです。 ■対処法 SC_CartSession.php 内の function calculate において、カート内の商品一覧から商品ステータスの情報を取得し、id6が全てチェックされている場合のみ、合計送料を0円にする EC-CUBE 2.11.5 サーバーOS Linux s117 2.6.23.16-smp #3 SMP Sat May 1 16:58:37 JST 2010 i686 DBサーバー PostgreSQL 8.2.4 |
ゲスト |
投稿日時: 2012/4/24 20:58
対応状況: −−−
|
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい dtb_products_classに対し
product_class_idからproduct_idを取り出して、 dtb_product_statusに対し product_idからproduct_status_idを配列($arrProduct_status...とか)として取り出して、 $arrProduct_status[$j]が「6」だったら $this->cartSession[$productTypeId][$i]['product_status] = $arrProduct_status[$j]; として、
の部分に、 $this->cartSession[$productTypeId][$i]['product_status] が全て「6」だったら $results['deliv_fee'] = 0; を追加する、、、とか。。。 ↓をみながら、追ってみました、故、方針として合っているのかは、自信は無いです。。。 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=9123&forum=10&post_id=44346#forumpost44346 http://www.kudzilla.com/~hic/eccube-dev/test_code/grade/front/SC_CartSession_Ex.rtf ID/PWD : hic/Ringo p.s. 初め、product_idを、tpl側から突っ込もうと、考えましたが、 myページからの再発注で、ややこしくなりそうなので、 その時点で、考えるのを、止めました。 |
|
infobitz |
投稿日時: 2012/4/26 17:30
対応状況: −−−
|
半人前 登録日: 2010/2/23 居住地: 投稿: 12 |
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい Ringo様
さっそくのお返事ありがとうございます。 その後、自力で色々といじってみたのですが、基本的なことが分かっておらず苦労しております。 流れとしましては、 $cartItems = $this->getCartList($productTypeId); で、カート内データを取得した後、 $max = $this->getMax($productTypeId); その後、$iでループ for($i = 0; $i <= $max; $i++) { その中のproduct_class_idを使ってdtb_products_classからproduct_idの一覧を取り出す。 取り出したproduct_idを使ってdtb_product_statusからproduct_status_idの配列を$arrProduct_statusとして取り出す。 こんなイメージでしょうか? 例:カート内の1つめのデータ $i = 0 $arrProduct_status[$j] => 1,2,6 最も基本的なdtb_products_classからデータを取り出す方法は、こんな感じで良いのでしょうか? $product_id = $objQuery->select("product_id","dtb_products_class","product_class_id = ?",array($this->cartSession[$productTypeId][$i]['productsClassId'])); 基本から勉強したいと思います。 宜しくお願い致します。 |
ゲスト |
投稿日時: 2012/4/26 19:13
対応状況: −−−
|
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい 流れとしては、小生の意図した流れと同じなので、良いと思いますが、「じっ」と見ますと、
infobitz様は、 $cartItems = $this->getCartList($productTypeId); 後の、$cartItemsのレベルで、思考されている。 小生は、 cartSessionのレベルで、思考している。 の、食い違いが分かります。 故、現在は、
と、cartSessionと$cartItemsが、同一レベルで扱われているので、データが渡らない状態です。 今回の案件は、$cartItemsのレベルで、送料判定を行うので、infobitz様の方が良いと思います。 ので、where句へは、 $this->cartSession[$productTypeId][$i]['productsClassId'] ではなくて、 $cartItemsから取り出した productsClassId となります。 まずは、$cartItemsから、productsClassId を取り出してみてください。 ($cartItemsからproductsClassIdが取れるかは、小生も、確認してみます。) |
|
ゲスト |
投稿日時: 2012/4/27 8:32
対応状況: −−−
|
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい 探ってみました。
|
|
infobitz |
投稿日時: 2012/4/27 16:25
対応状況: −−−
|
半人前 登録日: 2010/2/23 居住地: 投稿: 12 |
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい Ringo 様
ありがとうございます。 ご享受頂いた情報を元に、以下の部分を作成してみました。 // 送料無料チェック2 $objQuery = new SC_Query_Ex(); $cartItems = $this->getCartList($productTypeId); $max = $this->getMax($productTypeId); for($i = 0; $i <= $max -1 ; $i++) { $product_id = $objQuery->select("product_id","dtb_products_class","product_class_id = ?",array($cartItems[$i][productsClass][product_class_id])); $arrProduct_status = $objQuery->select("product_status_id","dtb_product_status","product_id = ?",$product_id[0][product_id]); var_dump($arrProduct_status); } また、この時点でdumpの結果を見ると下記のようになりました。 array(3) { [0]=> array(1) { ["product_status_id"]=> string(1) "4" } [1]=> array(1) { ["product_status_id"]=> string(1) "6" } [2]=> array(1) { ["product_status_id"]=> string(1) "7" } } array(1) { [0]=> array(1) { ["product_status_id"]=> string(1) "6" } } array(3) { [0]=> array(1) { ["product_status_id"]=> string(1) "4" } [1]=> array(1) { ["product_status_id"]=> string(1) "6" } [2]=> array(1) { ["product_status_id"]=> string(1) "7" } } 商品がカゴに3つ入った状態です。 それぞれの商品のproduct_status_idは、下記のようになっております。 商品1 4,6,7 商品2 6 商品3 4,6,7 今の状態ですが、配列$arrProduct_statusの中に、さらに配列が入り、それぞれのarray[0]の中にproduct_status_idが入っていると考えれば良いのでしょうか。 この後、配列の中に"6"があるかを調べたいのですが、in_arrayを使うと全てNULLと判定されています。 配列内配列が原因だと思うのですが、よく分かっておりません。 配列の使いかたをもう少し勉強する必要がありそうです。 |
ゲスト |
投稿日時: 2012/4/27 22:22
対応状況: −−−
|
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい 引用:
今の状態ですが、配列$arrProduct_statusの中に、さらに配列が入り、それぞれのarray[0]の中にproduct_status_idが入っていると考えれば良いのでしょうか。 「array[0]の中」は、dumpの表示上、そう見えるだけです。 というか、そういうふうには、見えない,見ない、、、ですが、、、(^^; これが、連想配列なので、in_arrayでは取り出せないです。 なので、今回の場合は、$iの内側で、$jを回して取り出します。 ちなみに、$jのmax値は、countで得ます。 |
|
infobitz |
投稿日時: 2012/4/28 13:03
対応状況: −−−
|
半人前 登録日: 2010/2/23 居住地: 投稿: 12 |
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい Ringo様
なるほどそういう風に見えるだけ(そもそもそうは見ない^^;)だったわけですね 了解いたしました。 下記のコードをfunction isDelivFreeに追加することで一応想定通りの挙動になりました。 ループ周りの処理がかなり汚い感じがしますが一応動いております。 Ringo様のお陰で少しは理解が進んだとおもいます。 本当にありがとうございました。 これからも勉強していきますのでよろしくお願い致します。 // 送料無料チェック2 $objQuery = new SC_Query_Ex(); $cartItems = $this->getCartList($productTypeId); $max = count($cartItems); $k = 0; for($i = 0; $i <= $max -1 ; $i++) { $product_id = $objQuery->select("product_id","dtb_products_class","product_class_id = ?",array($cartItems[$i][productsClass][product_class_id])); $arrProduct_status = $objQuery->select("product_status_id","dtb_product_status","product_id = ?",array($product_id[0][product_id])); $max2 = count($arrProduct_status); if($arrProduct_status[$i]["product_status_id"] == NULL){$k = 1; break;} for($j = 0; $j <= $max2 ; $j++) { if($arrProduct_status[$j]["product_status_id"] == 6){ $k = 0; $j = $max2; break; }else{ $k = 1; } } } if ($k == 0) { return true; } |
ゲスト |
投稿日時: 2012/4/29 16:47
対応状況: −−−
|
Re: SC_CartSession.php から商品ステータスの情報を取得する方法を教えて下さい product_id、、、ですが、$cartItemsの中に居ました。。。m(..)m
あと、phpでの配列ですが、、、phpでは、foreach、、、 後々の為にも、習得されることをお薦めします。 http://php.net/manual/ja/control-structures.foreach.php |
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |