/** * メインカテゴリーの取得. * * @param boolean $count_check 登録商品数をチェックする場合はtrue * @return array $arrMainCat メインカテゴリーの配列を返す */ function lfGetMainCat($count_check = false) { $objQuery = new SC_Query_Ex(); $col = '*'; $from = 'dtb_category left join dtb_category_total_count ON dtb_category.category_id = dtb_category_total_count.category_id'; // メインカテゴリーとその直下のカテゴリーを取得する。 $where = 'level <= 2 AND del_flg = 0'; // 登録商品数のチェック if ($count_check) { $where .= ' AND product_count > 0'; } $objQuery->setOption('ORDER BY rank DESC'); $arrRet = $objQuery->select($col, $from, $where); // メインカテゴリーを抽出する。 $arrMainCat = array(); foreach ($arrRet as $cat) { if ($cat['level'] != 1) { continue; } // 子カテゴリーを持つかどうかを調べる。 $arrChildrenID = SC_Utils_Ex::sfGetUnderChildrenArray($arrRet, 'parent_category_id', 'category_id', $cat['category_id']); $cat['has_children'] = count($arrChildrenID) > 0; $arrMainCat[] = $cat; } return $arrMainCat; }
/** * Page のアクション. * * @return void */ function action() { $objDb = new SC_Helper_DB_Ex(); $objFormParam = new SC_FormParam_Ex(); // 入力パラメーター初期化 $this->initParam($objFormParam); $objFormParam->setParam($_POST); $objFormParam->convParam(); switch ($this->getMode()) { // カテゴリー登録/編集実行 case 'edit': $category_id = $objFormParam->getValue('category_id'); if ($category_id == '') { $this->doRegister($objFormParam); } else { $this->doEdit($objFormParam); } break; // 入力ボックスへ編集対象のカテゴリ名をセット // 入力ボックスへ編集対象のカテゴリ名をセット case 'pre_edit': $this->doPreEdit($objFormParam); break; // カテゴリ削除 // カテゴリ削除 case 'delete': $this->doDelete($objFormParam, $objDb); break; // 表示順を上へ // 表示順を上へ case 'up': $this->doUp($objFormParam); break; // 表示順を下へ // 表示順を下へ case 'down': $this->doDown($objFormParam); break; // XXX 使われていないコード? // XXX 使われていないコード? case 'moveByDnD': // DnDしたカテゴリと移動先のセットを分解する $keys = explode("-", $_POST['keySet']); if ($keys[0] && $keys[1]) { $objQuery = new SC_Query_Ex(); $objQuery->begin(); // 移動したデータのrank、level、parent_category_idを取得 $rank = $objQuery->get('rank', "dtb_category", "category_id = ?", array($keys[0])); $level = $objQuery->get('level', "dtb_category", "category_id = ?", array($keys[0])); $parent = $objQuery->get("parent_category_id", "dtb_category", "category_id = ?", array($keys[0])); // 同一level内のrank配列を作成 $objQuery->setOption("ORDER BY rank DESC"); if ($level == 1) { // 第1階層の時 $arrRet = $objQuery->select('rank', "dtb_category", "level = ?", array($level)); } else { // 第2階層以下の時 $arrRet = $objQuery->select('rank', "dtb_category", "level = ? AND parent_category_id = ?", array($level, $parent)); } for ($i = 0; $i < sizeof($arrRet); $i++) { $rankAry[$i + 1] = $arrRet[$i]['rank']; } // 移動したデータのグループ内データ数 $my_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $keys[0]); if ($rankAry[$keys[1]] > $rank) { // データが今の位置より上がった時 $up_count = $rankAry[$keys[1]] - $rank; $decAry = $objQuery->select("category_id", "dtb_category", "level = ? AND rank > ? AND rank <= ?", array($level, $rank, $rankAry[$keys[1]])); foreach ($decAry as $value) { // 上のグループから減算 $this->lfDownRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $value["category_id"], $my_count); } // 自分のグループに加算 $this->lfUpRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $keys[0], $up_count); } else { if ($rankAry[$keys[1]] < $rank) { // データが今の位置より下がった時 $down_count = 0; $incAry = $objQuery->select("category_id", "dtb_category", "level = ? AND rank < ? AND rank >= ?", array($level, $rank, $rankAry[$keys[1]])); foreach ($incAry as $value) { // 下のグループに加算 $this->lfUpRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $value["category_id"], $my_count); // 合計減算値 $down_count += $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $value["category_id"]); } // 自分のグループから減算 $this->lfDownRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $keys[0], $down_count); } } $objQuery->commit(); } break; // カテゴリツリークリック時 // カテゴリツリークリック時 case 'tree': break; // CSVダウンロード // CSVダウンロード case 'csv': // CSVを送信する $objCSV = new SC_Helper_CSV_Ex(); $objCSV->sfDownloadCsv("5", "", array(), "", true); exit; break; default: break; } $parent_category_id = $objFormParam->getValue('parent_category_id'); // 空の場合は親カテゴリを0にする if (empty($parent_category_id)) { $parent_category_id = 0; } // 親カテゴリIDの保持 $this->arrForm['parent_category_id'] = $parent_category_id; // カテゴリ一覧を取得 $this->arrList = $this->findCategoiesByParentCategoryId($parent_category_id); // カテゴリツリーを取得 $this->arrTree = $objDb->sfGetCatTree($parent_category_id); // ぱんくずの生成 $arrBread = array(); $objDb->findTree($this->arrTree, $parent_category_id, $arrBread); $this->tpl_bread_crumbs = SC_Utils_Ex::jsonEncode($arrBread); }