Ignore:
Timestamp:
2007/10/24 14:01:35 (19 years ago)
Author:
nanasess
Message:

複数カテゴリ対応

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/class/helper/SC_Helper_DB.php

    r16527 r16546  
    211211                // ROOTカテゴリIDの取得 
    212212                $arrRet = $this->sfGetParents($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id); 
    213                 $root_id = $arrRet[0]; 
     213                $root_id = isset($arrRet[0]) ? $arrRet[0] : ""; 
    214214            } else { 
    215215                // ROOTカテゴリIDをなしに設定する 
     
    337337                $main_image_path = IMAGE_SAVE_DIR . basename($objPage->arrProductsClass[$cnt]["main_image"]); 
    338338                if(file_exists($main_image_path)) { 
    339                     list($image_width, $image_height) = getimagesize($main_image_path); 
     339                    list($image_width, $image_height) = getimagesize($main_image_path); 
    340340                } else { 
    341                     $image_width = 0; 
    342                     $image_height = 0; 
     341                    $image_width = 0; 
     342                    $image_height = 0; 
    343343                } 
    344344 
    345345                $objPage->arrProductsClass[$cnt]["tpl_image_width"] = $image_width + 60; 
    346                 $objPage->arrProductsClass[$cnt]["tpl_image_height"] = $image_height + 80; 
     346                $objPage->arrProductsClass[$cnt]["tpl_image_height"] = $image_height + 80; 
    347347                // 価格の登録 
    348348                if ($arrData['price02'] != "") { 
     
    556556        // 商品が属するカテゴリIDを縦に取得 
    557557        $objQuery = new SC_Query(); 
    558         $arrCatID = sfGetParents($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id); 
     558        $arrCatID = $this->sfGetParents($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id); 
    559559        $ConbName = ""; 
    560560 
     
    652652    function sfGetLevelCatList($parent_zero = true) { 
    653653        $objQuery = new SC_Query(); 
    654         $col = "category_id, category_name, level"; 
     654        $col = "category_id, parent_category_id, category_name, level"; 
    655655        $where = "del_flg = 0"; 
    656656        $objQuery->setoption("ORDER BY rank DESC"); 
     
    670670 
    671671            $arrOutput[$cnt] = ""; 
    672             /* 
    673             for($n = 1; $n < $arrRet[$cnt]['level']; $n++) { 
    674                 $arrOutput[$cnt].= " "; 
    675             } 
    676             */ 
    677             for($cat_cnt = 0; $cat_cnt < $arrRet[$cnt]['level']; $cat_cnt++) { 
    678                 $arrOutput[$cnt].= CATEGORY_HEAD; 
    679             } 
    680             $arrOutput[$cnt].= $arrRet[$cnt]['category_name']; 
    681         } 
     672 
     673            // 子カテゴリから親カテゴリを検索 
     674            $parent_category_id = $arrRet[$cnt]['parent_category_id']; 
     675            for($cat_cnt = $arrRet[$cnt]['level']; $cat_cnt > 1; $cat_cnt--) { 
     676 
     677                foreach ($arrRet as $arrCat) { 
     678                    // 親が見つかったら順番に代入 
     679                    if ($arrCat['category_id'] == $parent_category_id) { 
     680 
     681                        $arrOutput[$cnt] = CATEGORY_HEAD 
     682                            . $arrCat['category_name'] . $arrOutput[$cnt]; 
     683                        $parent_category_id = $arrCat['parent_category_id']; 
     684                    } 
     685                } 
     686            } 
     687            $arrOutput[$cnt].= CATEGORY_HEAD . $arrRet[$cnt]['category_name']; 
     688        } 
     689 
    682690        return array($arrValue, $arrOutput); 
    683691    } 
    684692 
    685693    /** 
    686      * 選択中のカテゴリを取得する. 
     694     * 選択中の商品のカテゴリを取得する. 
    687695     * 
    688696     * @param integer $product_id プロダクトID 
    689697     * @param integer $category_id カテゴリID 
    690      * @return integer 選択中のカテゴリID 
    691      * 
    692      */ 
    693     function sfGetCategoryId($product_id, $category_id) { 
    694  
    695         if(!$this->g_category_on)   { 
     698     * @return array 選択中の商品のカテゴリIDの配列 
     699     * 
     700     */ 
     701    function sfGetCategoryId($product_id, $category_id = 0) { 
     702 
     703        if(!$this->g_category_on) { 
    696704            $this->g_category_on = true; 
    697705            $category_id = (int) $category_id; 
    698706            $product_id = (int) $product_id; 
    699707            if(SC_Utils_Ex::sfIsInt($category_id) && $this->sfIsRecord("dtb_category","category_id", $category_id)) { 
    700                 $this->g_category_id = $category_id; 
     708                $this->g_category_id = array($category_id); 
    701709            } else if (SC_Utils_Ex::sfIsInt($product_id) && $this->sfIsRecord("dtb_products","product_id", $product_id, "status = 1")) { 
    702710                $objQuery = new SC_Query(); 
    703711                $where = "product_id = ?"; 
    704                 $category_id = $objQuery->get("dtb_products", "category_id", $where, array($product_id)); 
     712                $category_id = $objQuery->getCol("dtb_product_categories", "category_id", "product_id = ?", array($product_id)); 
    705713                $this->g_category_id = $category_id; 
    706714            } else { 
    707                 // 不正な場合は、0を返す。 
    708                 $this->g_category_id = 0; 
     715                // 不正な場合は、空の配列を返す。 
     716                $this->g_category_id = array(); 
    709717            } 
    710718        } 
    711719        return $this->g_category_id; 
     720    } 
     721 
     722    /** 
     723     * 商品をカテゴリの先頭に追加する. 
     724     * 
     725     * @param integer $category_id カテゴリID 
     726     * @param integer $product_id プロダクトID 
     727     * @return void 
     728     */ 
     729    function addProductBeforCategories($category_id, $product_id) { 
     730 
     731        $sqlval = array("category_id" => $category_id, 
     732                        "product_id" => $product_id); 
     733 
     734        $objQuery = new SC_Query(); 
     735 
     736        // 現在の商品カテゴリを取得 
     737        $arrCat = $objQuery->select("product_id, category_id, rank", 
     738                                    "dtb_product_categories", 
     739                                    "category_id = ?", 
     740                                    array($category_id)); 
     741 
     742        $max = 0; 
     743        foreach ($arrCat as $val) { 
     744            // 同一商品が存在する場合は登録しない 
     745            if ($val["product_id"] == $product_id) { 
     746                return; 
     747            } 
     748            // 最上位ランクを取得 
     749            $max = ($max > $val["rank"]) ? $val["rank"] : $max; 
     750        } 
     751        $sqlval["rank"] = $max; 
     752        $objQuery->insert("dtb_product_categories", $sqlval); 
     753    } 
     754 
     755    /** 
     756     * 商品をカテゴリの末尾に追加する. 
     757     * 
     758     * @param integer $category_id カテゴリID 
     759     * @param integer $product_id プロダクトID 
     760     * @return void 
     761     */ 
     762    function addProductAfterCategories($category_id, $product_id) { 
     763        $sqlval = array("category_id" => $category_id, 
     764                        "product_id" => $product_id); 
     765 
     766        $objQuery = new SC_Query(); 
     767 
     768        // 現在の商品カテゴリを取得 
     769        $arrCat = $objQuery->select("product_id, category_id, rank", 
     770                                    "dtb_product_categories", 
     771                                    "category_id = ?", 
     772                                    array($category_id)); 
     773 
     774        $min = 0; 
     775        foreach ($arrCat as $val) { 
     776            // 同一商品が存在する場合は登録しない 
     777            if ($val["product_id"] == $product_id) { 
     778                return; 
     779            } 
     780            // 最下位ランクを取得 
     781            $min = ($min < $val["rank"]) ? $val["rank"] : $min; 
     782        } 
     783        $sqlval["rank"] = $min; 
     784        $objQuery->insert("dtb_product_categories", $sqlval); 
     785    } 
     786 
     787    /** 
     788     * 商品をカテゴリから削除する. 
     789     * 
     790     * @param integer $category_id カテゴリID 
     791     * @param integer $product_id プロダクトID 
     792     * @return void 
     793     */ 
     794    function removeProductByCategories($category_id, $product_id) { 
     795        $sqlval = array("category_id" => $category_id, 
     796                        "product_id" => $product_id); 
     797        $objQuery = new SC_Query(); 
     798        $objQuery->delete("dtb_product_categories", 
     799                          "category_id = ? AND product_id = ?", $sqlval); 
     800    } 
     801 
     802    /** 
     803     * 商品カテゴリを更新する. 
     804     * 
     805     * @param array $arrCategory_id 登録するカテゴリIDの配列 
     806     * @param integer $product_id プロダクトID 
     807     * @return void 
     808     */ 
     809    function updateProductCategories($arrCategory_id, $product_id) { 
     810        $objQuery = new SC_Query(); 
     811 
     812        // 現在のカテゴリ情報を取得 
     813        $arrCurrentCat = $objQuery->select("product_id, category_id, rank", 
     814                                           "dtb_product_categories", 
     815                                           "product_id = ?", 
     816                                           array($product_id)); 
     817 
     818        // 登録するカテゴリ情報と比較 
     819        foreach ($arrCurrentCat as $val) { 
     820 
     821            // 登録しないカテゴリを削除 
     822            if (!in_array($val["category_id"], $arrCategory_id)) { 
     823                $this->removeProductByCategories($val["category_id"], $product_id); 
     824            } 
     825        } 
     826 
     827        // カテゴリを登録 
     828        foreach ($arrCategory_id as $category_id) { 
     829            $this->addProductBeforCategories($category_id, $product_id); 
     830        } 
    712831    } 
    713832 
     
    727846        //各カテゴリ内の商品数を数えて格納 
    728847        $sql = " INSERT INTO dtb_category_count(category_id, product_count, create_date) "; 
    729         $sql .= " SELECT T1.category_id, count(T2.category_id), now() FROM dtb_category AS T1 LEFT JOIN dtb_products AS T2 "; 
    730         $sql .= " ON T1.category_id = T2.category_id  "; 
    731         $sql .= " WHERE T2.del_flg = 0 AND T2.status = 1 "; 
     848        $sql .= " SELECT T1.category_id, count(T2.category_id), now() "; 
     849        $sql .= " FROM dtb_category AS T1 LEFT JOIN dtb_product_categories AS T2"; 
     850        $sql .= " ON T1.category_id = T2.category_id "; 
     851        $sql .= " LEFT JOIN dtb_products AS T3"; 
     852        $sql .= " ON T2.product_id = T3.product_id"; 
     853        $sql .= " WHERE T3.del_flg = 0 AND T3.status = 1 "; 
    732854        $sql .= " GROUP BY T1.category_id, T2.category_id "; 
    733855        $objQuery->query($sql); 
     
    846968        $objQuery = new SC_Query(); 
    847969        $col = $pid_name . "," . $id_name; 
    848          $arrData = $objQuery->select($col, $table); 
     970        $arrData = $objQuery->select($col, $table); 
    849971 
    850972        $arrParents = array(); 
     
    9521074            $up_id = $objQuery->get($table, $colname, $where, array($uprank)); 
    9531075            // ランク入れ替えの実行 
    954             $sqlup = "UPDATE $table SET rank = ?, update_date = Now() WHERE $colname = ?"; 
     1076            $sqlup = "UPDATE $table SET rank = ? WHERE $colname = ?"; 
    9551077            $objQuery->exec($sqlup, array($rank + 1, $id)); 
    9561078            $objQuery->exec($sqlup, array($rank, $up_id)); 
     
    9881110            $down_id = $objQuery->get($table, $colname, $where, array($downrank)); 
    9891111            // ランク入れ替えの実行 
    990             $sqlup = "UPDATE $table SET rank = ?, update_date = Now() WHERE $colname = ?"; 
     1112            $sqlup = "UPDATE $table SET rank = ? WHERE $colname = ?"; 
    9911113            $objQuery->exec($sqlup, array($rank - 1, $id)); 
    9921114            $objQuery->exec($sqlup, array($rank, $down_id)); 
     
    10111133        // 自身のランクを取得する 
    10121134        $rank = $objQuery->get($tableName, "rank", "$keyIdColumn = ?", array($keyId)); 
    1013         $max = $objQuery->max($tableName, "rank", $where); 
     1135        $max = $objQuery->max($tableName, "rank", $where, array($keyId)); 
    10141136 
    10151137        // 値の調整(逆順) 
     
    10261148 
    10271149        // 指定した順位の商品から移動させる商品までのrankを1つずらす 
    1028         $sql = "UPDATE $tableName SET rank = $term, update_date = NOW() WHERE rank BETWEEN ? AND ? AND del_flg = 0"; 
     1150        $sql = "UPDATE $tableName SET rank = $term WHERE rank BETWEEN ? AND ?"; 
    10291151        if($where != "") { 
    10301152            $sql.= " AND $where"; 
     
    10351157 
    10361158        // 指定した順位へrankを書き換える。 
    1037         $sql  = "UPDATE $tableName SET rank = ?, update_date = NOW() WHERE $keyIdColumn = ? AND del_flg = 0 "; 
     1159        $sql  = "UPDATE $tableName SET rank = ? WHERE $keyIdColumn = ? "; 
    10381160        if($where != "") { 
    10391161            $sql.= " AND $where"; 
     
    10701192        if(!$delete) { 
    10711193            // ランクを最下位にする、DELフラグON 
    1072             $sqlup = "UPDATE $table SET rank = 0, del_flg = 1, update_date = Now() "; 
     1194            $sqlup = "UPDATE $table SET rank = 0, del_flg = 1 "; 
    10731195            $sqlup.= "WHERE $colname = ?"; 
    10741196            // UPDATEの実行 
Note: See TracChangeset for help on using the changeset viewer.