Ignore:
Timestamp:
2010/09/20 20:40:27 (14 years ago)
Author:
nanasess
bzr:base-revision:
svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18814
bzr:committer:
Kentaro Ohkouchi <nanasess@fsm.ne.jp>
bzr:file-ids:

data/Smarty/templates/default/admin/products/product_class.tpl 15732@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Fadmin%2Fproducts%2Fproduct_class.tpl
data/class/SC_Initial.php 16506@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2FSC_Initial.php
data/class/SC_Product.php 18277@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2Fclass%2FSC_Product.php
data/class/SC_Query.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2FSC_Query.php
data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php 15123@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fdb%2Fdbfactory%2FSC_DB_DBFactory_MYSQL.php
data/class/helper/SC_Helper_CSV.php 15535@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_CSV.php
data/class/helper/SC_Helper_DB.php 15176@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_DB.php
data/class/pages/admin/contents/LC_Page_Admin_Contents_RecommendSearch.php 15661@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fcontents%2FLC_Page_Admin_Contents_RecommendSearch.php
data/class/pages/admin/customer/LC_Page_Admin_Customer.php 15568@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fcustomer%2FLC_Page_Admin_Customer.php
data/class/pages/admin/mail/LC_Page_Admin_Mail.php 15640@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fmail%2FLC_Page_Admin_Mail.php
data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php 15654@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fmail%2FLC_Page_Admin_Mail_Preview.php
data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php 17293@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2Fclass%2Fpages%2Fadmin%2Forder%2FLC_Page_Admin_Order_ProductSelect.php
data/class/pages/admin/products/LC_Page_Admin_Products.php 15342@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fproducts%2FLC_Page_Admin_Products.php
data/class/pages/admin/products/LC_Page_Admin_Products_Product.php 15342@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fproducts%2FLC_Page_Admin_Products_Product.php
data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php 15559@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fproducts%2FLC_Page_Admin_Products_ProductClass.php
data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php 15526@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fproducts%2FLC_Page_Admin_Products_ProductRank.php
data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php 15557@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fproducts%2FLC_Page_Admin_Products_ProductSelect.php
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Best5.php 15367@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Ffrontparts%2Fbloc%2FLC_Page_FrontParts_Bloc_Best5.php
data/class/pages/mypage/LC_Page_Mypage_Favorite.php 17162@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2Fclass%2Fpages%2Fmypage%2FLC_Page_Mypage_Favorite.php
data/class/pages/products/LC_Page_Products_Detail.php 15154@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fproducts%2FLC_Page_Products_Detail.php
data/class/pages/products/LC_Page_Products_List.php 15154@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fproducts%2FLC_Page_Products_List.php
data/class/pages/rss/LC_Page_Rss_Products.php 16193@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Frss%2FLC_Page_Rss_Products.php
data/class/pages/shopping/LC_Page_Shopping_Complete.php 15223@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fshopping%2FLC_Page_Shopping_Complete.php
data/class/util/SC_Utils.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Futil%2FSC_Utils.php
data/install.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Finstall.php
data/require_classes.php 18500@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fversion-2_4-dev%2Fdata%2Frequire_classes.php
html/admin/require.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Fadmin%2Frequire.php
html/handle_error.php 18500@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fversion-2_4-dev%2Fhtml%2Fhandle_error.php
html/install/index.php 16809@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Findex.php
html/install/sql/create_table_mysql.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fcreate_table_mysql.sql
html/install/sql/create_table_pgsql.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fcreate_table_pgsql.sql
html/install/sql/create_view.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fcreate_view.sql
html/install/sql/drop_table.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fdrop_table.sql
html/install/sql/drop_view.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fdrop_view.sql
html/install/sql/insert_data.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Finsert_data.sql
html/require.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Frequire.php
test/class/page/LC_Page_Admin_Products_ProductClass_Test.php lc_page_admin_produc-20100910101923-ux7d8xbbsd4inq1c-1
bzr:mapping-version:
v4
bzr:merge:

nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
nanasess@fsm.ne.jp-20100920113958-9zux6qc07fmrp1fp
bzr:revno:
2298
bzr:revprop:branch-nick:
branches/version-2_5-dev
bzr:root:
branches/version-2_5-dev
bzr:text-parents:

data/Smarty/templates/default/admin/products/product_class.tpl ohkouchi@loop-az.jp-20100614082324-fsyp4ss6t8s1l9hk
data/class/SC_Initial.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18795 ohkouchi@loop-az.jp-20100910102335-0e7jvlwqa13j60hg
data/class/SC_Product.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/class/SC_Query.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18813 ohkouchi@loop-az.jp-20100910102335-0e7jvlwqa13j60hg
data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php ohkouchi@loop-az.jp-20100826072347-bdrmnk0g8b3llidi
data/class/helper/SC_Helper_CSV.php ohkouchi@loop-az.jp-20100825073846-mzg8ka4y21o1nk6o
data/class/helper/SC_Helper_DB.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/contents/LC_Page_Admin_Contents_RecommendSearch.php ohkouchi@loop-az.jp-20100803084717-9sbbuk4o59x5sio4
data/class/pages/admin/customer/LC_Page_Admin_Customer.php ohkouchi@loop-az.jp-20100803084717-9sbbuk4o59x5sio4
data/class/pages/admin/mail/LC_Page_Admin_Mail.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18798 nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php ohkouchi@loop-az.jp-20100803084717-9sbbuk4o59x5sio4
data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php ohkouchi@loop-az.jp-20100820090626-dkyj2ngdh7vklaow
data/class/pages/admin/products/LC_Page_Admin_Products.php ohkouchi@loop-az.jp-20100826014156-g12l1o38gsj73acs
data/class/pages/admin/products/LC_Page_Admin_Products_Product.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php ohkouchi@loop-az.jp-20100614082857-g3n9wn9zakpc7a0m
data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php ohkouchi@loop-az.jp-20100820090626-dkyj2ngdh7vklaow
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Best5.php ohkouchi@loop-az.jp-20100614082857-g3n9wn9zakpc7a0m
data/class/pages/mypage/LC_Page_Mypage_Favorite.php ohkouchi@loop-az.jp-20100803050621-j3gswdse0qsqamvw
data/class/pages/products/LC_Page_Products_Detail.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/class/pages/products/LC_Page_Products_List.php ohkouchi@loop-az.jp-20100910102335-0e7jvlwqa13j60hg
data/class/pages/rss/LC_Page_Rss_Products.php ohkouchi@loop-az.jp-20100614082857-g3n9wn9zakpc7a0m
data/class/pages/shopping/LC_Page_Shopping_Complete.php ohkouchi@loop-az.jp-20100819104758-beubop5hq0pwdqhx
data/class/util/SC_Utils.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18812 ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/install.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/require_classes.php ohkouchi@loop-az.jp-20100803111301-u8ph4za35y4il0dh
html/admin/require.php ohkouchi@loop-az.jp-20100917043318-0tabp11gm7myhq3v ohkouchi@loop-az.jp-20100917043051-klyair2x9gha0ike
html/handle_error.php ohkouchi@loop-az.jp-20100917043318-0tabp11gm7myhq3v ohkouchi@loop-az.jp-20100917043051-klyair2x9gha0ike
html/install/index.php ohkouchi@loop-az.jp-20100827013725-2fv0j8mz17eczvmd
html/install/sql/create_table_mysql.sql ohkouchi@loop-az.jp-20100825073846-mzg8ka4y21o1nk6o
html/install/sql/create_table_pgsql.sql ohkouchi@loop-az.jp-20100825073846-mzg8ka4y21o1nk6o
html/install/sql/create_view.sql ohkouchi@loop-az.jp-20100910102335-0e7jvlwqa13j60hg
html/install/sql/drop_table.sql ohkouchi@loop-az.jp-20100825073846-mzg8ka4y21o1nk6o
html/install/sql/drop_view.sql ohkouchi@loop-az.jp-20100818061055-lqje64n4qlsd2ke9
html/install/sql/insert_data.sql ohkouchi@loop-az.jp-20100825073846-mzg8ka4y21o1nk6o
html/require.php ohkouchi@loop-az.jp-20100917043318-0tabp11gm7myhq3v ohkouchi@loop-az.jp-20100917043051-klyair2x9gha0ike
bzr:text-revisions:

data/Smarty/templates/default/admin/products/product_class.tpl ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/class/SC_Product.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/class/helper/SC_Helper_CSV.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/contents/LC_Page_Admin_Contents_RecommendSearch.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/customer/LC_Page_Admin_Customer.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/products/LC_Page_Admin_Products.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Best5.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/mypage/LC_Page_Mypage_Favorite.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/products/LC_Page_Products_Detail.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/products/LC_Page_Products_List.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
data/class/pages/rss/LC_Page_Rss_Products.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/class/pages/shopping/LC_Page_Shopping_Complete.php nanasess@fsm.ne.jp-20100920101522-xuj8voqfwpoh4ajv
data/require_classes.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/index.php ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/sql/create_table_mysql.sql ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/sql/create_table_pgsql.sql ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/sql/create_view.sql ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/sql/drop_table.sql ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/sql/drop_view.sql ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
html/install/sql/insert_data.sql ohkouchi@loop-az.jp-20100917110247-1czbf0nui8rcj7ht
test/class/page/LC_Page_Admin_Products_ProductClass_Test.php ohkouchi@loop-az.jp-20100910102335-0e7jvlwqa13j60hg
bzr:timestamp:
2010-09-20 20:39:58.994999886 +0900
bzr:user-agent:
bzr2.1.1+bzr-svn1.0.2
svn:original-date:
2010-09-20T11:39:58.995000Z
Message:

規格まわりの内部構成変更に伴う修正(#781)

  • 規格のデータ構造を木構造へ変更
  • 商品検索ロジックを SC_Product クラスへできるだけ集約
  • 以下の VIEW を削除
    • vw_category_count;
    • vw_product_class;
    • vw_products_nonclass;
    • vw_cross_products_class;
    • vw_cross_class;
    • vw_download_class;
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/SC_Product.php

    r18701 r18815  
    4242    var $classCat2_find; 
    4343    var $classCats1; 
    44      
    45     function SC_Product($arrProductId = null) { 
    46         $objDb = new SC_Helper_DB_Ex(); 
    47          
    48         // 規格名一覧 
    49         $this->arrClassName = $objDb->sfGetIDValueList("dtb_class", "class_id", "name"); 
    50         // 規格分類名一覧 
    51         $this->arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name"); 
    52         $this->arrClassCatName[''] = '選択してください'; 
    53          
    54         if (!is_null($arrProductId)) { 
    55             $this->setProductId($arrProductId); 
    56         } 
    57     } 
    58  
    59     function setProductId($arrProductId) { 
    60          
    61         // 商品規格情報の取得 
    62         $rows = $this->lfGetProductsClass($arrProductId); 
    63          
     44 
     45    /** 
     46     * SC_Queryインスタンスに設定された検索条件をもとに商品IDの配列を取得する. 
     47     * 
     48     * 検索条件は, SC_Query::getWhere() 関数で設定しておく必要があります. 
     49     * 
     50     * @param SC_Query $objQuery SC_Query インスタンス 
     51     * @param array $arrVal 検索パラメータの配列 
     52     * @return array 商品IDの配列 
     53     */ 
     54    function findProductIds(&$objQuery, $arrVal = array()) { 
     55        $table = <<< __EOS__ 
     56                 dtb_products AS alldtl 
     57            JOIN dtb_product_categories AS T2 
     58              ON alldtl.product_id = T2.product_id 
     59            JOIN dtb_category 
     60              ON T2.category_id = dtb_category.category_id 
     61__EOS__; 
     62        // SC_Query::getCol() ではパフォーマンスが出ない 
     63        $results = $objQuery->select('alldtl.product_id', $table, "", $arrVal, 
     64                                     MDB2_FETCHMODE_ORDERED); 
     65        foreach ($results as $val) { 
     66            $resultValues[] = $val[0]; 
     67        } 
     68        return array_unique($resultValues); 
     69    } 
     70 
     71    /** 
     72     * SC_Queryインスタンスに設定された検索条件をもとに商品一覧の配列を取得する. 
     73     * 
     74     * 主に SC_Product::findProductIds() で取得した商品IDを検索条件にし, 
     75     * SC_Query::setOrder() や SC_Query::setLimitOffset() を設定して, 商品一覧 
     76     * の配列を取得する. 
     77     * 
     78     * @param SC_Query $objQuery SC_Query インスタンス 
     79     * @param array $arrVal 検索パラメータ(ソート条件)の配列 
     80     * @return array 商品一覧の配列 
     81     */ 
     82    function lists(&$objQuery, $arrVal = array()) { 
     83        $col = <<< __EOS__ 
     84             product_id 
     85            ,product_code_min 
     86            ,product_code_max 
     87            ,name 
     88            ,comment1 
     89            ,comment2 
     90            ,comment3 
     91            ,main_list_comment 
     92            ,main_image 
     93            ,main_list_image 
     94            ,price01_min 
     95            ,price01_max 
     96            ,price02_min 
     97            ,price02_max 
     98            ,stock_min 
     99            ,stock_max 
     100            ,stock_unlimited_min 
     101            ,stock_unlimited_max 
     102            ,deliv_date_id 
     103            ,status 
     104            ,del_flg 
     105            ,update_date 
     106__EOS__; 
     107        return $objQuery->select($col, $this->alldtlSQL($objQuery->where), 
     108                                 "", $arrVal); 
     109    } 
     110 
     111    /** 
     112     * 商品詳細を取得する. 
     113     * 
     114     * @param integer $productId 商品ID 
     115     * @return array 商品詳細情報の配列 
     116     */ 
     117    function getDetail($productId) { 
     118        $objQuery =& SC_Query::getSingletonInstance(); 
     119        $result = $objQuery->select("*", $this->alldtlSQL("product_id = ?"), 
     120                                    "product_id = ?", 
     121                                    array($productId, $productId)); 
     122        return $result[0]; 
     123    } 
     124 
     125    /** 
     126     * 商品IDに紐づく商品規格を自分自身に設定する. 
     127     * 
     128     * 引数の商品IDの配列に紐づく商品規格を取得し, 自分自身のフィールドに 
     129     * 設定する. 
     130     * 
     131     * @param array $arrProductId 商品ID の配列 
     132     * @return void 
     133     */ 
     134    function setProductsClassByProductIds($arrProductId) { 
     135 
     136        foreach ($arrProductId as $productId) { 
     137            $rows[$productId] = $this->getProductsClassFullByProductId($productId); 
     138        } 
     139 
    64140        $arrProductsClass = array(); 
    65         foreach ($rows as $row) { 
    66             $productId = $row['product_id']; 
    67             $arrProductsClass[$productId][] = $row; 
    68         } 
    69         unset($rows); 
    70          
    71         foreach ($arrProductsClass as $productId => $arrProductClass) { 
     141        foreach ($rows as $productId => $arrProductClass) { 
    72142            $classCats1 = array(); 
    73143            $classCats1[''] = '選択してください'; 
    74              
     144 
    75145            // 規格1クラス名 
    76146            $this->className1[$productId] = 
    77                 isset($this->arrClassName[$arrProductClass[0]['class_id1']]) 
    78                 ? $this->arrClassName[$arrProductClass[0]['class_id1']] 
     147                isset($arrProductClass[0]['class_name1']) 
     148                ? $arrProductClass[0]['class_name1'] 
    79149                : ''; 
    80150 
    81151            // 規格2クラス名 
    82152            $this->className2[$productId] = 
    83                 isset($this->arrClassName[$arrProductClass[0]['class_id2']]) 
    84                 ? $this->arrClassName[$arrProductClass[0]['class_id2']] 
     153                isset($arrProductClass[0]['class_name2']) 
     154                ? $arrProductClass[0]['class_name2'] 
    85155                : ''; 
    86              
     156 
    87157            // 規格1が設定されている 
    88             $this->classCat1_find[$productId] = ($arrProductClass[0]['classcategory_id1'] != '0'); 
     158            $this->classCat1_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id1'])); 
    89159            // 規格2が設定されている 
    90             $this->classCat2_find[$productId] = ($arrProductClass[0]['classcategory_id2'] != '0'); 
     160            $this->classCat2_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id2'])); 
    91161 
    92162            $this->stock_find[$productId] = false; 
     
    97167                $productsClass2 = $productsClass['classcategory_id2']; 
    98168                $classCategories[$productsClass1]['']['name'] = '選択してください'; 
    99  
    100169                // 在庫 
    101170                $stock_find_class = ($productsClass['stock_unlimited'] || $productsClass['stock'] > 0); 
    102                  
    103                 $classCategories[$productsClass1][$productsClass2]['name'] = $this->arrClassCatName[$productsClass2] 
    104                     . ($stock_find_class ? '' : ' (品切れ中)'); 
    105                  
     171 
     172                $classCategories[$productsClass1][$productsClass2]['name'] = $productsClass['name2'] . ($stock_find_class ? '' : ' (品切れ中)'); 
     173 
    106174                $classCategories[$productsClass1][$productsClass2]['stock_find'] = $stock_find_class; 
    107                  
     175 
    108176                if ($stock_find_class) { 
    109177                    $this->stock_find[$productId] = true; 
     
    111179 
    112180                if (!in_array($classcat_id1, $classCats1)) { 
    113                     $classCats1[$productsClass1] = $this->arrClassCatName[$productsClass1] 
     181                    $classCats1[$productsClass1] = $productsClass['name1'] 
    114182                        . ($productsClass2 == 0 && !$stock_find_class ? ' (品切れ中)' : ''); 
    115183                } 
    116                  
     184 
    117185                // 価格 
    118186                $classCategories[$productsClass1][$productsClass2]['price01'] 
     
    120188                    ? number_format(SC_Helper_DB_Ex::sfPreTax($productsClass['price01'])) 
    121189                    : ''; 
    122                  
     190 
    123191                $classCategories[$productsClass1][$productsClass2]['price02'] 
    124192                    = strlen($productsClass['price02']) 
    125193                    ? number_format(SC_Helper_DB_Ex::sfPreTax($productsClass['price02'])) 
    126194                    : ''; 
    127                  
     195 
    128196                // ポイント 
    129197                // XXX sfPrePoint() の第4パラメータは、処理にバグがあるため現状省略している。(http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=3540&forum=1&post_id=13853#forumpost13853) 
    130198                $classCategories[$productsClass1][$productsClass2]['point'] 
    131199                    = SC_Utils_Ex::sfPrePoint($productsClass['price02'], $productsClass['point_rate']); 
    132                  
     200 
    133201                // 商品コード 
    134202                $classCategories[$productsClass1][$productsClass2]['product_code'] = $productsClass['product_code']; 
    135203            } 
    136              
     204 
    137205            $this->classCategories[$productId] = $classCategories; 
    138              
     206 
    139207            // 規格1 
    140208            $this->classCats1[$productId] = $classCats1; 
     
    142210    } 
    143211 
    144     /* 商品規格情報の取得 */ 
    145     function lfGetProductsClass($arrProductId) { 
    146         $arrProductId = (Array) $arrProductId; 
    147          
    148         if (empty($arrProductId)) { 
     212    /** 
     213     * 複数の商品IDに紐づいた, 商品規格を取得する. 
     214     * 
     215     * @param array $productIds 商品IDの配列 
     216     * @return array 商品規格の配列 
     217     */ 
     218    function getProductsClassByProductIds($productIds = array()) { 
     219        if (empty($productIds)) { 
    149220            return array(); 
    150221        } 
    151          
    152         // 商品規格取得 
    153         $objQuery = new SC_Query(); 
    154         $col = 'product_id, classcategory_id1, classcategory_id2, class_id1, class_id2, stock, stock_unlimited, price01, price02, point_rate, product_code'; 
    155         $table = 'vw_product_class AS prdcls'; 
    156         $where = 'product_id IN (' . implode(', ', array_pad(array(), count($arrProductId), '?')) . ')'; 
    157         $objQuery->setOrder("product_id, rank1 DESC, rank2 DESC"); 
    158         $arrRet = $objQuery->select($col, $table, $where, $arrProductId); 
    159          
    160         return $arrRet; 
     222        $objQuery =& SC_Query::getSingletonInstance(); 
     223        $objQuery->setWhere('product_id IN (' . implode(', ', array_pad(array(), count($productIds), '?')) . ')'); 
     224        $objQuery->setOrder("T2.level DESC"); 
     225        // 末端の規格を取得 
     226        $col = <<< __EOS__ 
     227            T1.product_id, 
     228            T1.stock, 
     229            T1.stock_unlimited, 
     230            T1.price01, 
     231            T1.price02, 
     232            T1.point_rate, 
     233            T1.product_code, 
     234            T1.product_class_id, 
     235            T1.del_flg, 
     236            T2.class_combination_id, 
     237            T2.parent_class_combination_id, 
     238            T2.classcategory_id, 
     239            T2.level, 
     240            T3.name, 
     241            T4.name AS class_name, 
     242            T4.class_id 
     243__EOS__; 
     244        $table = <<< __EOS__ 
     245                      dtb_products_class T1 
     246            LEFT JOIN dtb_class_combination T2 
     247                   ON T1.class_combination_id = T2.class_combination_id 
     248            LEFT JOIN dtb_classcategory T3 
     249                   ON T2.classcategory_id = T3.classcategory_id 
     250            LEFT JOIN dtb_class T4 
     251                   ON T3.class_id = T4.class_id 
     252__EOS__; 
     253        $arrRet = $objQuery->select($col, $table, "", $productIds); 
     254        $levels = array(); 
     255        $parents = array(); 
     256 
     257        foreach ($arrRet as $rows) { 
     258            $levels[] = $rows['level']; 
     259            $parents[] = $rows['parent_class_combination_id']; 
     260        } 
     261        $level = max($levels); 
     262        $parentsClass = array(); 
     263        // 階層分の親を取得 
     264        for ($i = 0; $i < $level -1; $i++) { 
     265            $objQuery =& SC_Query::getSingletonInstance(); 
     266            $objQuery->setWhere('T1.class_combination_id IN (' . implode(', ', array_pad(array(), count($parents), '?')) . ')'); 
     267 
     268            $col = <<< __EOS__ 
     269                T1.class_combination_id, 
     270                T1.classcategory_id, 
     271                T1.parent_class_combination_id, 
     272                T1.level, 
     273                T2.name, 
     274                T3.name AS class_name, 
     275                T3.class_id 
     276__EOS__; 
     277            $table = <<< __EOS__ 
     278                          dtb_class_combination T1 
     279                LEFT JOIN dtb_classcategory T2 
     280                       ON T1.classcategory_id = T2.classcategory_id 
     281                LEFT JOIN dtb_class T3 
     282                       ON T2.class_id = T3.class_id 
     283__EOS__; 
     284 
     285            $arrParents = $objQuery->select($col, $table, "", $parents); 
     286 
     287            unset($parents); 
     288            foreach ($arrParents as $rows) { 
     289                $parents[] = $rows['parent_class_combination_id']; 
     290 
     291                foreach ($arrRet as $child) { 
     292                    if ($child['parent_class_combination_id'] 
     293                        == $rows['class_combination_id']) { 
     294                        $rows['product_id'] = $child['product_id']; 
     295                    } 
     296                } 
     297                $tmpParents[] = $rows; 
     298            } 
     299            $parentsClass = array_merge($parentsClass, $tmpParents); 
     300        } 
     301 
     302        // 末端から枝を作成 
     303        $tmpClass = array_merge($arrRet, $parentsClass); 
     304 
     305        foreach ($tmpClass as $val) { 
     306            $val['class_id' . $val['level']] = $val['class_id']; 
     307            $val['class_name' . $val['level']] = $val['class_name']; 
     308            $val['name' . $val['level']] = $val['name']; 
     309            $val['classcategory_id' . $val['level']] = $val['classcategory_id']; 
     310            $arrProductsClass[] = $val; 
     311        } 
     312 
     313        return $arrProductsClass; 
     314    } 
     315 
     316    /** 
     317     * 商品IDに紐づいた, 商品規格を階層ごとに取得する. 
     318     * 
     319     * @param array $productId 商品IDの配列 
     320     * @return array 階層ごとの商品規格の配列 
     321     */ 
     322    function getProductsClassLevelByProductId($productId) { 
     323        $results = $this->getProductsClassByProductIds(array($productId)); 
     324        foreach ($results as $row) { 
     325            $productsClassLevel["level" . $row['level']][] = $row; 
     326        } 
     327        return $productsClassLevel; 
     328    } 
     329 
     330    /** 
     331     * 商品IDに紐づいた, 商品規格をすべての組み合わせごとに取得する. 
     332     * 
     333     * @param array $productId 商品IDの配列 
     334     * @return array すべての組み合わせの商品規格の配列 
     335     */ 
     336    function getProductsClassFullByProductId($productId) { 
     337        $results = $this->getProductsClassLevelByProductId($productId); 
     338        $productsClass = array(); 
     339        foreach ($results["level1"] as $level1) { 
     340            foreach ($results["level2"] as $level2) { 
     341                if ($level2['parent_class_combination_id'] == $level1['class_combination_id']) { 
     342                    $level1 = array_merge($level1, $level2); 
     343                } 
     344            } 
     345            $productsClass[] = $level1; 
     346        } 
     347        return $productsClass; 
     348    } 
     349 
     350    /** 
     351     * 商品詳細の SQL を取得する. 
     352     * 
     353     * @param string $where 商品詳細の WHERE 句 
     354     * @return string 商品詳細の SQL 
     355     */ 
     356    function alldtlSQL($where = "") { 
     357        $whereCause = ""; 
     358        if (!SC_Utils_Ex::isBlank($where)) { 
     359            $whereCause = " WHERE " . $where; 
     360        } 
     361 
     362        $sql = <<< __EOS__ 
     363            ( 
     364             SELECT dtb_products.product_id, 
     365                    dtb_products.name, 
     366                    dtb_products.maker_id, 
     367                    dtb_products.rank, 
     368                    dtb_products.status, 
     369                    dtb_products.comment1, 
     370                    dtb_products.comment2, 
     371                    dtb_products.comment3, 
     372                    dtb_products.comment4, 
     373                    dtb_products.comment5, 
     374                    dtb_products.comment6, 
     375                    dtb_products.note, 
     376                    dtb_products.file1, 
     377                    dtb_products.file2, 
     378                    dtb_products.file3, 
     379                    dtb_products.file4, 
     380                    dtb_products.file5, 
     381                    dtb_products.file6, 
     382                    dtb_products.main_list_comment, 
     383                    dtb_products.main_list_image, 
     384                    dtb_products.main_comment, 
     385                    dtb_products.main_image, 
     386                    dtb_products.main_large_image, 
     387                    dtb_products.sub_title1, 
     388                    dtb_products.sub_comment1, 
     389                    dtb_products.sub_image1, 
     390                    dtb_products.sub_large_image1, 
     391                    dtb_products.sub_title2, 
     392                    dtb_products.sub_comment2, 
     393                    dtb_products.sub_image2, 
     394                    dtb_products.sub_large_image2, 
     395                    dtb_products.sub_title3, 
     396                    dtb_products.sub_comment3, 
     397                    dtb_products.sub_image3, 
     398                    dtb_products.sub_large_image3, 
     399                    dtb_products.sub_title4, 
     400                    dtb_products.sub_comment4, 
     401                    dtb_products.sub_image4, 
     402                    dtb_products.sub_large_image4, 
     403                    dtb_products.sub_title5, 
     404                    dtb_products.sub_comment5, 
     405                    dtb_products.sub_image5, 
     406                    dtb_products.sub_large_image5, 
     407                    dtb_products.sub_title6, 
     408                    dtb_products.sub_comment6, 
     409                    dtb_products.sub_image6, 
     410                    dtb_products.sub_large_image6, 
     411                    dtb_products.del_flg, 
     412                    dtb_products.creator_id, 
     413                    dtb_products.create_date, 
     414                    dtb_products.update_date, 
     415                    dtb_products.deliv_date_id, 
     416                    dtb_products.down, 
     417                    dtb_products.down_filename, 
     418                    dtb_products.down_realfilename, 
     419                    T4.product_code_min, 
     420                    T4.product_code_max, 
     421                    T4.price01_min, 
     422                    T4.price01_max, 
     423                    T4.price02_min, 
     424                    T4.price02_max, 
     425                    T4.stock_min, 
     426                    T4.stock_max, 
     427                    T4.stock_unlimited_min, 
     428                    T4.stock_unlimited_max, 
     429                    T4.class_count 
     430               FROM dtb_products 
     431               JOIN ( 
     432                       SELECT product_id, 
     433                              MIN(product_code) AS product_code_min, 
     434                              MAX(product_code) AS product_code_max, 
     435                              MIN(price01) AS price01_min, 
     436                              MAX(price01) AS price01_max, 
     437                              MIN(price02) AS price02_min, 
     438                              MAX(price02) AS price02_max, 
     439                              MIN(stock) AS stock_min, 
     440                              MAX(stock) AS stock_max, 
     441                              MIN(stock_unlimited) AS stock_unlimited_min, 
     442                              MAX(stock_unlimited) AS stock_unlimited_max, 
     443                              COUNT(*) as class_count 
     444                         FROM dtb_products_class 
     445                       $whereCause 
     446                     GROUP BY product_id 
     447                     ) AS T4 
     448                 ON dtb_products.product_id = T4.product_id 
     449        ) AS alldtl 
     450__EOS__; 
     451        return $sql; 
    161452    } 
    162453} 
Note: See TracChangeset for help on using the changeset viewer.