[Svn-src-all:1303] [version-2_5-dev 20192] 商品並び替え機能のリファクタリング FIXME のあった部分はとりあえずそのまま放置

Yammy admin @ mail.ec-cube.net
2011年 2月 18日 (金) 14:20:51 JST


Subversion committed to /home/svn/open 20192
http://svn.ec-cube.net/open_trac/changeset/20192
┌────────────────────────────┐
│更新者 :  Yammy                                        │
│更新日時:  2011-02-18 14:20:51 +0900 (金, 18  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
商品並び替え機能のリファクタリング FIXME のあった部分はとりあえずそのまま放置
refs #970


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php

変更: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php	2011-02-18 05:03:46 UTC (rev 20191)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php	2011-02-18 05:20:51 UTC (rev 20192)
@@ -78,72 +78,35 @@
         // 通常時は親カテゴリを0に設定する。
         $this->arrForm['parent_category_id'] =
             isset($_POST['parent_category_id']) ? $_POST['parent_category_id'] : 0;
+        $this->arrForm['product_id'] =
+            isset($_POST['product_id']) ? $_POST['product_id'] : '';
 
         switch($this->getMode()) {
         case 'up':
-            $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['parent_category_id']);
-            $objDb->sfRankUp("dtb_product_categories", "product_id", $_POST['product_id'], $where);
+            $this->lfRankUp($objDb, $this->arrForm['parent_category_id'], $this->arrForm['product_id']);
             break;
         case 'down':
-            $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['parent_category_id']);
-            $objDb->sfRankDown("dtb_product_categories", "product_id", $_POST['product_id'], $where);
+            $this->lfRankDown($objDb, $this->arrForm['parent_category_id'], $this->arrForm['product_id']);
             break;
         case 'move':
-            $key = "pos-".$_POST['product_id'];
-            $input_pos = mb_convert_kana($_POST[$key], "n");
-            if(SC_Utils_Ex::sfIsInt($input_pos)) {
-                $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['parent_category_id']);
-                $objDb->sfMoveRank("dtb_product_categories", "product_id", $_POST['product_id'], $input_pos, $where);
-            }
+            $this->lfRankMove($objDb, $this->arrForm['parent_category_id'], $this->arrForm['product_id']);
             break;
         case 'tree':
             // カテゴリの切替は、ページ番号をクリアする。
             $this->tpl_pageno = "";
             break;
-
         case 'renumber':
-            $sql = <<< __EOS__
-                UPDATE dtb_product_categories
-                SET
-                    rank =
-                        (
-                            SELECT COUNT(*)
-                            FROM dtb_product_categories t_in
-                            WHERE t_in.category_id = dtb_product_categories.category_id
-                                AND (
-                                    t_in.rank < dtb_product_categories.rank
-                                    OR (
-                                        t_in.rank = dtb_product_categories.rank
-                                        AND t_in.product_id < dtb_product_categories.product_id
-                                    )
-                                )
-                        ) + 1
-                WHERE dtb_product_categories.category_id = ?
-__EOS__;
-            $objQuery->query($sql, array($_POST['parent_category_id']));
+            $this->lfRenumber($this->arrForm['parent_category_id']);
             break;
-
         default:
             break;
         }
 
         $this->arrTree = $objDb->sfGetCatTree($this->arrForm['parent_category_id']);
-        $this->arrProductsList =
-            $this->lfGetProduct($this->arrForm['parent_category_id']);
+        $this->arrProductsList = $this->lfGetProduct($this->arrForm['parent_category_id']);
         $arrBread = array();
         $objDb->findTree($this->arrTree, $this->arrForm['parent_category_id'], $arrBread);
-        $this->breadcrumbs = "ホーム";
-        // TODO JSON で投げて, フロント側で処理した方が良い?
-        for ($i = count($arrBread) - 1; $i >= 0; $i--) {
-            // フロント側で &gt; へエスケープするため, ここでは > を使用
-            if ($i === count($arrBread) - 1) {
-                $this->breadcrumbs .= ' > ';
-            }
-            $this->breadcrumbs .= $arrBread[$i]['category_name'];
-            if ($i > 0) {
-                $this->breadcrumbs .= ' > ';
-            }
-        }
+        $this->breadcrumbs = $this->lfGetBreadcrumbs($arrBread);
     }
 
     /**
@@ -183,5 +146,73 @@
         $arrRet = $objQuery->select($col, $table, $where, array($category_id));
         return $arrRet;
     }
+
+    /*
+     * 商品の数値指定での並び替え実行
+     */
+    function lfRenumber($parent_category_id) {
+        $objQuery = new SC_Query();
+
+        $sql = <<< __EOS__
+            UPDATE dtb_product_categories
+            SET
+                rank =
+                    (
+                        SELECT COUNT(*)
+                        FROM dtb_product_categories t_in
+                        WHERE t_in.category_id = dtb_product_categories.category_id
+                            AND (
+                                t_in.rank < dtb_product_categories.rank
+                                OR (
+                                    t_in.rank = dtb_product_categories.rank
+                                    AND t_in.product_id < dtb_product_categories.product_id
+                                )
+                            )
+                    ) + 1
+            WHERE dtb_product_categories.category_id = ?
+__EOS__;
+        $arrRet = $objQuery->query($sql, array($parent_category_id));
+        return $arrRet;
+    }
+
+    function lfRankUp(&$objDb, $parent_category_id, $product_id) {
+        $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($parent_category_id);
+        $objDb->sfRankUp("dtb_product_categories", "product_id", $product_id, $where);
+    }
+
+    function lfRankDown(&$objDb, $parent_category_id, $product_id) {
+        $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($parent_category_id);
+        $objDb->sfRankDown("dtb_product_categories", "product_id", $product_id, $where);
+    }
+
+    function lfRankMove(&$objDb, $parent_category_id, $product_id) {
+        $key = "pos-".$product_id;
+        $input_pos = mb_convert_kana($_POST[$key], "n");
+        if(SC_Utils_Ex::sfIsInt($input_pos)) {
+            $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($parent_category_id);
+            $objDb->sfMoveRank("dtb_product_categories", "product_id", $product_id, $input_pos, $where);
+        }
+    }
+
+
+    function lfGetBreadcrumbs($arrBread) {
+        $breadcrumbs = "ホーム";
+        // TODO JSON で投げて, フロント側で処理した方が良い?
+        for ($i = count($arrBread) - 1; $i >= 0; $i--) {
+            // フロント側で &gt; へエスケープするため, ここでは > を使用
+            if ($i === count($arrBread) - 1) {
+                $breadcrumbs .= ' > ';
+            }
+            $breadcrumbs .= $arrBread[$i]['category_name'];
+            if ($i > 0) {
+                $breadcrumbs .= ' > ';
+            }
+        }
+
+        return $breadcrumbs;
+    }
+
+
+
 }
 ?>




Svn-src-all メーリングリストの案内