中国インターネット事情
このエントリーをはてなブックマークに追加
  • 最新配信
  • RSS

ECcube 無料商品の購入個数を1つのみに制限するハック

カテゴリ : 
プログラム
執筆 : 
chinese-homepage.com 2010-10-25 19:38

ゼロ円商品の購入数に制限を設ける場合の手法です。ゼロ円のサンプル商品を大量に注文されても困りますので。

場所
/data/class/SC_CartSession.php

215行目付近 追加の時に、ゼロ円のものは強制的に1つにしてしまいます。
                    if ($_SESSION[$this->key][$i]['price'] === "0"){
                        $_SESSION[$this->key][$i]['quantity'] = 1;
                    }else{
                        $_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;
            }
        }
        if(!$find) {

           $price ="1";
           if ($classcategory_id1 === "0"){
               $arrProductsClass = array();
               $objQuery = new SC_Query();
               $col = "price02";
               $table = "vw_cross_products_class";
               $where = "product_id = ?";
               $objQuery->setorder("rank1 DESC, rank2 DESC");
               $arrProductsClass = $objQuery->select($col, $table, $where, array($id[0]));
               $price =$arrProductsClass[0]['price02'];
           }else if($classcategory_id1 !== "0"){
               $arrProductsClass = array();
               $objQuery = new SC_Query();
               $col = "price02";
               $table = "vw_cross_products_class";
               $where = "product_id = ? and classcategory_id1 = ?";
               $objQuery->setorder("rank1 DESC, rank2 DESC");
               $arrProductsClass = $objQuery->select($col, $table, $where, array($id[0],$id[1]));
               $price =$arrProductsClass[0]['price02'];
           }else if($classcategory_id2 !== "0"){
               $arrProductsClass = array();
               $objQuery = new SC_Query();
               $col = "price02";
               $table = "vw_cross_products_class";
               $where = "product_id = ? and classcategory_id2 = ?";
               $objQuery->setorder("rank1 DESC, rank2 DESC");
               $arrProductsClass = $objQuery->select($col, $table, $where, array($id[0],$id[2]));
               $price =$arrProductsClass[0]['price02'];
           }

            $_SESSION[$this->key][$max+1]['id'] = $id;

            if ($price === "0"){
               $_SESSION[$this->key][$max+1]['quantity'] = 1;
            }else{
               $_SESSION[$this->key][$max+1]['quantity'] = $quantity;
            }

ここの if ($price === "0"){以下の部分を

            if ($price === "0"){
              $find2 = false;
              for($i = 0; $i <= $max; $i++) {
                if($_SESSION[$this->key][$i]['price'] === "0") {$find2 = true;}
              }

              if(!$find2){
                $_SESSION[$this->key][$max+1]['id'] = $id;
                $_SESSION[$this->key][$max+1]['quantity'] = 1;
                $_SESSION[$this->key][$max+1]['cart_no'] = $this->getNextCartID();
                if(!empty($campaign_id)){
                  $_SESSION[$this->key][$max+1]['campaign_id'] = $campaign_id;
                  $_SESSION[$this->key][$max+1]['is_campaign'] = true;
                }
              }
            }else{
                $_SESSION[$this->key][$max+1]['id'] = $id;
                $_SESSION[$this->key][$max+1]['quantity'] = $quantity;
                $_SESSION[$this->key][$max+1]['cart_no'] = $this->getNextCartID();
               if(!empty($campaign_id)){
                  $_SESSION[$this->key][$max+1]['campaign_id'] = $campaign_id;
                  $_SESSION[$this->key][$max+1]['is_campaign'] = true;
               }
            }

こうすれば、他のゼロ円商品がすでにカートにある場合は、新たなゼロ円商品をカートに追加できません。


323行目付近 if文を追加 個数を増加させません。

    // 個数の増加
    function upQuantity($cart_no) {
        $max = $this->getMax();
        for($i = 0; $i <= $max; $i++) {
            if($_SESSION[$this->key][$i]['cart_no'] == $cart_no) {
                if(strlen($_SESSION[$this->key][$i]['quantity'] + 1) <= INT_LEN) {
            if ($_SESSION[$this->key][$i]['price'] !== "0"){$_SESSION[$this->key][$i]['quantity']++;}
                }
            }
        }
    }

 これで、価格がゼロの時には、購入数が1つに限定されます。
もっと洗練された良い方法があるかもしれません。

なお、不具合については特にチェックしていませんのでよくテストをした方が良いと思われます。
ハックの適用は自己責任でお願いします。 


その他のニュース
中国あちらこちら
上海地下鉄10号...
上海地下鉄10号...
7945 hits   POPLAR
金茂大厦
金茂大厦
7476 hits   POPLAR
浦東国際空港
浦東国際空港
7415 hits   POPLAR
ユニクロ旗艦...
ユニクロ旗艦...
7296 hits   POPLAR
外灘(バンド...
外灘(バンド...
7217 hits   POPLAR
上海環球金融...
上海環球金融...
6846 hits   POPLAR
ブログランキング
にほんブログ村 IT技術ブログへ
 
ニュースカテゴリ
中国ネット基本情報
人気の記事
ニュースのトップへ
中国語サイト制作
ランキング参加中
にほんブログ村 IT技術ブログ Webサイト構築へ
人気ブログランキングへ
プロフィール
後藤(作者)
放浪中国写真集