示例#1
0
 /**
  * Действие поиск поста:
  */
 public function searchAction(Application $application, Template $template)
 {
     $session = Session::getInstance();
     $this['form_errors'] = array();
     $this['blog_form'] = array();
     $template->setParameter('title', 'Поиск постов');
     $template->setParameter('board_id', 'news');
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         $validator = new ValidatorHelper($_POST);
         //$validator -> assertExists('query', 'Введите текст запроса');
         $validator->assertLength('query', 80, 'Слишком длинный запрос поиска');
         $validator->assertExists('order', 'Не указан порядок сортировки');
         $validator->assertExists('sort', 'Не указано направление сортировки');
         $this['form_errors'] = $validator->getValidationResults();
         $this['blog_form'] = $_POST;
         if ($validator->isValid()) {
             $search = new SphinxClient();
             $search->SetServer('localhost', 3312);
             switch ($_POST['order']) {
                 default:
                 case 'relevance':
                     $sort = $_POST['sort'] == 'desc' ? '@relevance DESC, created_at DESC, @id DESC' : '@relevance ASC, created_at ASC, @id ASC';
                     $search->SetSortMode(SPH_SORT_EXTENDED, $sort);
                     break;
                 case 'created_at':
                     $sort = $_POST['sort'] == 'desc' ? SPH_SORT_ATTR_DESC : SPH_SORT_ATTR_ASC;
                     $search->SetSortMode($sort, 'created_at');
                     break;
                 case 'updated_at':
                     $sort = $_POST['sort'] == 'desc' ? SPH_SORT_ATTR_DESC : SPH_SORT_ATTR_ASC;
                     $search->SetSortMode($sort, 'updated_at');
                     break;
                 case 'rate':
                     $sort = $_POST['sort'] == 'desc' ? SPH_SORT_ATTR_DESC : SPH_SORT_ATTR_ASC;
                     $search->SetSortMode($sort, 'rate');
                     break;
                 case 'comments':
                     $sort = $_POST['sort'] == 'desc' ? SPH_SORT_ATTR_DESC : SPH_SORT_ATTR_ASC;
                     $search->SetSortMode($sort, 'comments');
                     break;
             }
             $search->SetWeights(array('link' => 50, 'title' => 40, 'text' => 20, 'text_full' => 10));
             $search->SetLimits(0, 60);
             if (isset($_POST['category']) && $_POST['category'] != 0) {
                 $search->SetFilter('category', array($_POST['category']));
             }
             $result = $search->Query($_POST['query'], 'posts');
             if ($result && array_key_exists('matches', $result) && is_array($result['matches'])) {
                 $ids = array_keys($result['matches']);
                 $posts = Blog_BlogPostsModel::GetPostsByIds($ids);
                 $this['posts'] = $posts;
                 $template->setParameter('total', sizeof($result['matches']));
                 $template->setParameter('total_found', $result['total_found']);
             } else {
                 $this['form_errors'] = array('По данному запросу ничего не найдено');
             }
         }
     }
     EventModel::getInstance()->Broadcast('view_search_post');
     return true;
 }
示例#2
0
 /**
  * Поиск постов:
  */
 public function postSearchAction(Application $application, Template $template)
 {
     $template->setParameter('menu', 'posts');
     $template->setParameter('submenu', 'post_search');
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         if (!empty($_POST['id'])) {
             $post = Blog_BlogPostsModel::GetPost($_POST['id']);
             if ($post) {
                 $this['posts'] = array($post);
             }
         } else {
             $search = new SphinxClient();
             $search->SetServer('localhost', 3312);
             $search->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC, created_at DESC, @id DESC');
             $search->SetLimits(0, 60);
             $search->SetWeights(array('title' => 40, 'text' => 20, 'text_full' => 10));
             if (isset($_POST['category'])) {
                 $search->SetFilter('category', $_POST['category']);
             }
             $result = $search->Query($_POST['query'], '*');
             if (is_array($result['matches'])) {
                 $ids = array_keys($result['matches']);
                 $this['posts'] = Blog_BlogPostsModel::GetPostsByIds($ids);
             }
         }
     }
     return true;
 }