/** * Page のアクション. * * @return void */ public function action() { $objDb = new SC_Helper_DB_Ex(); $objCategory = new SC_Helper_Category_Ex(); $this->tpl_pageno = isset($_POST['pageno']) ? $_POST['pageno'] : ''; // 通常時は親カテゴリを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': $this->lfRankUp($objDb, $this->arrForm['parent_category_id'], $this->arrForm['product_id']); break; case 'down': $this->lfRankDown($objDb, $this->arrForm['parent_category_id'], $this->arrForm['product_id']); break; case 'move': $this->lfRankMove($objDb, $this->arrForm['parent_category_id'], $this->arrForm['product_id']); break; case 'tree': // カテゴリの切替は、ページ番号をクリアする。 $this->tpl_pageno = ''; break; case 'renumber': $this->lfRenumber($this->arrForm['parent_category_id']); break; default: break; } $this->arrTree = $objCategory->getTree(); $this->arrParentID = $objCategory->getTreeTrail($this->arrForm['parent_category_id']); $this->arrProductsList = $this->lfGetProduct($this->arrForm['parent_category_id']); $arrBread = $objCategory->getTreeTrail($this->arrForm['parent_category_id'], FALSE); $this->tpl_bread_crumbs = SC_Utils_Ex::jsonEncode(array_reverse($arrBread)); }
/** * カテゴリツリーの取得. * * @param array $arrParentCategoryId 親カテゴリの配列 * @param boolean $count_check 登録商品数をチェックする場合はtrue * @return array $arrRet カテゴリツリーの配列を返す */ public function lfGetCatTree($arrParentCategoryId, $count_check = false) { $objCategory = new SC_Helper_Category_Ex($count_check); $arrTree = $objCategory->getTree(); $this->arrParentID = array(); foreach ($arrParentCategoryId as $category_id) { $arrParentID = $objCategory->getTreeTrail($category_id); $this->arrParentID = array_merge($this->arrParentID, $arrParentID); $this->root_parent_id[] = $arrParentID[0]; } return $arrTree; }
/** * Page のアクション. * * @return void */ public function action() { $objDb = new SC_Helper_DB_Ex(); $objFormParam = new SC_FormParam_Ex(); $objCategory = new SC_Helper_Category_Ex(); // 入力パラメーター初期化 $this->initParam($objFormParam); $objFormParam->setParam($_POST); $objFormParam->convParam(); switch ($this->getMode()) { // カテゴリ登録/編集実行 case 'edit': $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; // FIXME r19909 によってテンプレートが削除されている // FIXME r19909 によってテンプレートが削除されている case 'moveByDnD': // DnDしたカテゴリと移動先のセットを分解する $keys = explode('-', $_POST['keySet']); if ($keys[0] && $keys[1]) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $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); } elseif ($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); SC_Response_Ex::actionExit(); 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 = $objCategory->getTree(); $this->arrParentID = $objCategory->getTreeTrail($parent_category_id); // ぱんくずの生成 $arrBread = $objCategory->getTreeTrail($this->arrForm['parent_category_id'], FALSE); $this->tpl_bread_crumbs = SC_Utils_Ex::jsonEncode(array_reverse($arrBread)); }