/** * Index * * @param array $options : { * * } * @return array */ public function index($options) { $result = ['nest' => null, 'category' => null, 'articles' => null, 'pageNavigation' => null, 'nextpage' => null]; $print = explode(',', $options['print_data']); // get nests if ($options['nest_id']) { $result['nest'] = Spawn::item(['table' => Spawn::getTableName('nest'), 'where' => 'id=\'' . $options['nest_id'] . '\'', 'debug' => false]); $result['nest'] = $result['nest'] ? $result['nest'] : null; if (isset($result['nest']['srl'])) { $result['nest']['json'] = Util::jsonToArray($result['nest']['json'], false, true); } else { return ['state' => 'error', 'message' => 'not found nest data']; } // get categories list if ($result['nest']['json']['useCategory'] && $this->searchKeyInArray($print, 'category')) { $result['category'] = Spawn::items(['table' => Spawn::getTableName('category'), 'where' => 'nest_srl=' . (int) $result['nest']['srl'], 'field' => 'srl,name', 'order' => 'turn', 'sort' => 'asc']); $cnt_all = Spawn::count(['table' => Spawn::getTableName('article'), 'where' => 'app_srl=' . $options['app_srl'] . ' and nest_srl=' . (int) $result['nest']['srl']]); if (count($result['category'])) { $check_active = false; $index = [['srl' => 0, 'name' => 'All', 'count' => $cnt_all, 'active' => false]]; foreach ($result['category'] as $k => $v) { $cnt = $cnt_all > 0 ? Spawn::count(['table' => Spawn::getTableName('article'), 'where' => 'category_srl=' . (int) $v['srl']]) : 0; if ($options['category_srl'] == (int) $v['srl']) { $check_active = true; } $index[] = ['srl' => (int) $v['srl'], 'name' => $v['name'], 'count' => $cnt, 'active' => $options['category_srl'] == (int) $v['srl']]; } if (!$check_active) { $index[0]['active'] = true; } $result['category'] = $index; } } } // get articles // init paginate require_once __GOOSE_PWD__ . 'core/classes/Paginate.class.php'; $options['page'] = $options['page'] > 1 ? $options['page'] : 1; $count = $options['count']; $scale = $options['pageScale']; $params = ['keyword' => $_GET['keyword'] ? $_GET['keyword'] : '']; $nest_srl = $options['nest_id'] ? isset($result['nest']['srl']) ? $result['nest']['srl'] : -1 : null; $where = 'app_srl=' . $options['app_srl']; $where .= $nest_srl ? ' and nest_srl=' . $nest_srl : ''; $where .= $options['category_srl'] ? ' and category_srl=' . (int) $options['category_srl'] : ''; $where .= $_GET['keyword'] ? ' and (title LIKE "%' . $_GET['keyword'] . '%" or content LIKE "%' . $_GET['keyword'] . '%")' : ''; // get total article $total = Spawn::count(['table' => Spawn::getTableName('article'), 'where' => $where]); // set paginate instance $paginate = new Paginate($total, $_GET['page'], $params, $count, $scale); // set limit $limit = $paginate->offset . ',' . $paginate->size; // get articles $result['articles'] = Spawn::items(['table' => Spawn::getTableName('article'), 'field' => 'srl,nest_srl,category_srl,hit,json,regdate,title', 'where' => $where, 'limit' => $limit, 'sort' => 'desc', 'order' => 'srl']); // adjustment articles if ($this->searchKeyInArray($print, 'article')) { foreach ($result['articles'] as $k => $v) { if (isset($v['regdate'])) { $result['articles'][$k]['regdate'] = Util::convertDate($v['regdate']); } if (isset($v['modate'])) { $result['articles'][$k]['modate'] = Util::convertDate($v['modate']); } if (isset($v['category_srl'])) { $category = Spawn::item(['table' => Spawn::getTableName('category'), 'where' => 'srl=' . (int) $v['category_srl']]); $result['articles'][$k]['category_name'] = isset($category['name']) ? $category['name'] : ''; } $result['articles'][$k]['json'] = Util::jsonToArray($v['json'], false, true); } } // set paginate if ($this->searchKeyInArray($print, 'nav_paginate')) { $result['pageNavigation'] = $paginate->createNavigationToObject(); } // set nextpage if ($this->searchKeyInArray($print, 'nav_more')) { $nextPaginate = new Paginate($total, $options['page'] + 1, $params, $count, $scale); $limit = $nextPaginate->offset . ',' . $nextPaginate->size; $nextArticles = Spawn::items(['table' => Spawn::getTableName('article'), 'field' => 'srl', 'where' => $where, 'limit' => $limit, 'sort' => 'desc', 'order' => 'srl']); $result['nextpage'] = count($nextArticles) ? $options['page'] + 1 : null; } $result['nest'] = $this->searchKeyInArray($print, 'nest') ? $result['nest'] : null; $result['articles'] = $this->searchKeyInArray($print, 'article') ? $result['articles'] : null; $result['state'] = 'success'; return $result; }