&$row) { switch ($row['type']) { case 'News': $page = Qs_SiteMap::findFirst(array(), array('type' => 'News_', 'idGroup' => 1)); $row['url'] = $page['url'] . '/' . $row['id']; break; default: break; } Qs_Text_Mark::setWordSplitters(array()); $row['searchContent'] = $row['introduction'] . ' | ' . $row['searchContent']; $row['searchContent'] = Qs_Text_Mark::markSearchWords($row['searchContent'], trim($_REQUEST['query'])); $row['title'] = Qs_Text_Mark::markSearchWords($row['title'], trim($_REQUEST['query'])); } return true; } public function getListSelect($options = array()) { $query = $this->_filter['query']; $newsSelect = $this->_db->select() ->from($this->_getPair('News', false), array('id', 'title', 'introduction', 'searchContent', 'image', 'type' => new Zend_Db_Expr('"News"'))); $anyWordResultNews = clone $newsSelect; $simpleResultNews = clone $newsSelect; Qs_Db_Filter::match($newsSelect, $this->_filterFields, $query, true); Qs_Db_Filter::match($anyWordResultNews, $this->_filterFields, $query); Qs_Db_Filter::where($simpleResultNews, $this->_filterFields, $query); $this->select->reset()->union(array( $newsSelect, $anyWordResultNews, $simpleResultNews, )); $this->_prepareListOptions($options); return $this->select; } public function getList($options = array()) { $stmt = $this->getListStatement($options); $list = $stmt->fetchAll(); $this->_prepareList($list); if (is_array($list) && count($list)) { $session = new Qs_Session_Namespace('JC_SEARCH'); $session->flagContent = true; } return $list; } public function getPaginatorAdapter() { $select = $this->_getSelect()->reset(Zend_Db_Select::LIMIT_COUNT)->reset(Zend_Db_Select::LIMIT_OFFSET); return $select; } protected function _filterWhere(Zend_Db_Select $select) { if (!empty($this->_filterFields) && array_key_exists('query', $this->_filter)) { Qs_Db_Filter::where($select, $this->_filterFields, $this->_filter['query']); } return $select; } }