示例#1
0
 public function searchAll($searchTerm)
 {
     $res = array();
     foreach (SearchableModel::getInstances(SearchableModel::FRONTEND_SEARCH_MODEL) as $searchable) {
         $f = $searchable->getSelectFilter($searchTerm);
         $f->setLimit($this->config->get('SEARCH_MODEL_PREVIEW'));
         $res[$searchable->getClassName()] = $this->fetchData($searchable, $f);
     }
     return $res;
 }
示例#2
0
 public function search()
 {
     $request = $this->getRequest();
     $this->query = $request->get('q');
     $cn = trim($request->get('class', ''));
     $to = $request->get('to', 0);
     $from = $request->get('from', 0);
     if (!strlen($cn)) {
         $cn = null;
     }
     $res = array();
     foreach (SearchableModel::getInstances(SearchableModel::FRONTEND_SEARCH_MODEL | SearchableModel::BACKEND_SEARCH_MODEL) as $searchable) {
         if ($cn && $searchable->getClassName() != $cn) {
             continue;
         }
         $searchable->setOption('BACKEND_QUICK_SEARCH', true);
         $f = $searchable->getSelectFilter($this->query);
         $offset = 0;
         if ($cn) {
             $direction = $request->get('direction');
             if ($direction == 'next') {
                 $offset = $to;
             } else {
                 if ($direction == 'previous') {
                     $offset = $from - $this->getLimit() - 1;
                 }
             }
         }
         if ($offset < 0) {
             $offset = 0;
         }
         $f->setLimit($this->getLimit(), $offset);
         $res[$searchable->getClassName()] = $this->fetchData($searchable, $f);
     }
     return new ActionResponse('customResultTemplates', $this->getCustomResultTemplates(), 'query', $this->query, 'result', $res, 'randomToken', md5(time() . mt_rand(1, 9999999999)), 'to', $to, 'from', $from, 'classNames', $this->orderResultBlockKeys(array_keys($res)), 'fullSearch', $cn == '' || $this->request->get('limit') && !$this->request->get('to'));
 }
 public function search()
 {
     $request = $this->getRequest();
     $this->query = $request->get('q');
     $cn = trim($request->get('class', ''));
     $to = $request->get('to', 0);
     $from = $request->get('from', 0);
     if (!strlen($cn)) {
         $cn = null;
     } else {
         $cn = explode(',', $cn);
         if (!is_array($cn)) {
             $cn = null;
         }
     }
     $cnOn = array();
     // include class names. empty for all
     $cnOff = array();
     // exclude class names.
     if ($cn) {
         foreach ($cn as $token) {
             if (substr($token, 0, 1) == '-') {
                 $cnOff[] = substr($token, 1);
             } else {
                 $cnOn[] = $token;
             }
         }
     }
     $res = array();
     $offset = 0;
     if ($cn) {
         $direction = $request->get('direction');
         if ($direction == 'next') {
             $offset = $to;
         } else {
             if ($direction == 'previous') {
                 $offset = $from - $this->getLimit() - 1;
             }
         }
     }
     if ($offset < 0) {
         $offset = 0;
     }
     // deal wirth ARSearchable models
     foreach (SearchableModel::getInstances(SearchableModel::FRONTEND_SEARCH_MODEL | SearchableModel::BACKEND_SEARCH_MODEL, true) as $searchable) {
         $searchableClassName = $searchable->getClassName();
         if (in_array($searchableClassName, $cnOff) || count($cnOn) && !in_array($searchableClassName, $cnOn)) {
             continue;
         }
         $searchable->setOption('BACKEND_QUICK_SEARCH', true);
         $f = $searchable->getSelectFilter($this->query);
         $f->setLimit($this->getLimit(), $offset);
         $res[$searchable->getClassName()] = $this->fetchData($searchable, $f);
     }
     // deal with non-ar-searchable models
     foreach (SearchableModel::getInstances(SearchableModel::FRONTEND_SEARCH_MODEL | SearchableModel::BACKEND_SEARCH_MODEL, false) as $searchable) {
         $searchableClassName = $searchable->getClassName();
         if (in_array($searchableClassName, $cnOff) || count($cnOn) && !in_array($searchableClassName, $cnOn)) {
             continue;
         }
         // pass everything
         $searchable->setOption('query', $this->query);
         $searchable->setOption('from', $from);
         $searchable->setOption('to', $to);
         $searchable->setOption('limit', $this->getLimit());
         $searchable->setOption('offset', $offset);
         // let non-ar-searchable do its magick
         $res[$searchable->getClassName()] = $searchable->fetchData();
     }
     return new ActionResponse('customResultTemplates', $this->getCustomResultTemplates(), 'query', $this->query, 'result', $res, 'randomToken', md5(time() . mt_rand(1, 9999999999.0)), 'to', $to, 'from', $from, 'classNames', $this->orderResultBlockKeys(array_keys($res)), 'fullSearch', $cn == '' || $this->request->get('limit') && !$this->request->get('to'));
 }