Index: /branches/version-2_13-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
===================================================================
--- /branches/version-2_13-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php	(revision 23124)
+++ /branches/version-2_13-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php	(revision 23435)
@@ -67,5 +67,4 @@
     public function action()
     {
-        $objDb      = new SC_Helper_DB_Ex();
         $objFormParam = new SC_FormParam_Ex();
         $objCategory = new SC_Helper_Category_Ex();
@@ -87,5 +86,5 @@
             // カテゴリ削除
             case 'delete':
-                $this->doDelete($objFormParam, $objDb);
+                $this->doDelete($objFormParam);
                 break;
             // 表示順を上へ
@@ -194,32 +193,26 @@
      *
      * @param  SC_FormParam $objFormParam
-     * @param  SC_Helper_Db $objDb
-     * @return void
-     */
-    public function doDelete(&$objFormParam, &$objDb)
-    {
+     * @return void
+     */
+    public function doDelete(&$objFormParam)
+    {
+        $objCategory = new SC_Helper_Category_Ex(false);
         $category_id = $objFormParam->getValue('category_id');
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
 
         // 子カテゴリのチェック
-        $where = 'parent_category_id = ? AND del_flg = 0';
-        $exists = $objQuery->exists('dtb_category', $where, array($category_id));
-        if ($exists) {
+        $arrBranch = $objCategory->getTreeBranch($category_id);
+        if (count($arrBranch) > 0) {
             $this->arrErr['category_name'] = '※ 子カテゴリが存在するため削除できません。<br/>';
-
             return;
         }
         // 登録商品のチェック
-        $table = 'dtb_product_categories AS T1 LEFT JOIN dtb_products AS T2 ON T1.product_id = T2.product_id';
-        $where = 'T1.category_id = ? AND T2.del_flg = 0';
-        $exists = $objQuery->exists($table, $where, array($category_id));
-        if ($exists) {
+        $arrCategory = $objCategory->get($category_id);
+        if ($arrCategory['product_count'] > 0) {
             $this->arrErr['category_name'] = '※ カテゴリ内に商品が存在するため削除できません。<br/>';
-
             return;
         }
 
         // ランク付きレコードの削除(※処理負荷を考慮してレコードごと削除する。)
-        $objDb->sfDeleteRankRecord('dtb_category', 'category_id', $category_id, '', true);
+        $objCategory->delete($category_id);
     }
 
Index: /branches/version-2_13-dev/data/class/helper/SC_Helper_Category.php
===================================================================
--- /branches/version-2_13-dev/data/class/helper/SC_Helper_Category.php	(revision 23124)
+++ /branches/version-2_13-dev/data/class/helper/SC_Helper_Category.php	(revision 23435)
@@ -132,3 +132,39 @@
         return $arrTrailID;
     }
+
+    /**
+     * 指定カテゴリーの子孫カテゴリーを取得
+     *
+     * @param int $category_id カテゴリーID
+     * @return array
+     */
+    public function getTreeBranch($category_id) {
+        $arrTree = $this->getTree();
+        $arrTrail = $this->getTreeTrail($category_id, true);
+
+        // ルートから指定カテゴリーまでたどる.
+        foreach ($arrTrail as $parent_id) {
+            $nextTree = array();
+            foreach ($arrTree as $branch) {
+                if ($branch['category_id'] == $parent_id && isset($branch['children'])) {
+                    $nextTree = $branch['children'];
+                }
+            }
+            $arrTree = $nextTree;
+        }
+
+        return $arrTree;
+    }
+
+    /**
+     * カテゴリーの削除
+     *
+     * @param int $category_id カテゴリーID
+     * @return void
+     */
+    public function delete($category_id) {
+        $objDb = new SC_Helper_DB_Ex();
+        // ランク付きレコードの削除(※処理負荷を考慮してレコードごと削除する。)
+        $objDb->sfDeleteRankRecord('dtb_category', 'category_id', $category_id, '', true);
+    }
 }
