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; }
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')); }