/** * @uses autocomplete */ public function suggestionAction() { /* @var $request \Zend\Http\Request */ $request = $this->getRequest(); $jsonModel = new JsonModel(); if (!($q = urldecode(trim($request->getQuery('q'))))) { return $jsonModel; } $p = new \Product\Model\Store(); $p->setServiceLocator($this->getServiceLocator()); $data = ['searchOptions' => $p->searchOptions()]; $limit = trim($request->getQuery('limit')); $p->addOption('limit', $limit > 0 ? $limit : 20); /* @var $baseStoreMapper \Product\Model\BaseStoreMapper */ $baseStoreMapper = $this->getServiceLocator()->get('Product\\Model\\BaseStoreMapper'); $products = $baseStoreMapper->search($p); if (is_array($products) && count($products)) { $cIds = []; foreach ($products as $p) { /* @var $p \Product\Model\Store */ $p->setIsBaseProduct(true); $data['products'][] = $p->toStd(); if ($p->getBaseCategoryId()) { $cIds[$p->getBaseCategoryId()] = $p->getBaseCategoryId(); } } if ($request->getQuery('showMore') && $request->getQuery('showMore') == 'category') { /* @var $baseCategoryMapper \Product\Model\BaseCategoryMapper */ $baseCategoryMapper = $this->getServiceLocator()->get('Product\\Model\\BaseCategoryMapper'); $baseCategory = new \Product\Model\BaseCategory(); $baseCategory->setChilds($cIds); $baseCategory->addOption('limit', 5); $categories = $baseCategoryMapper->search($baseCategory); if (count($categories)) { foreach ($categories as $c) { /* @var \Product\Model\BaseCategory $c*/ $data['categories'][] = $c->toStd(); } } } } $jsonModel->setVariables($data); return $jsonModel; }
/** * @uses autocomplete */ public function suggestionAction() { /* @var $request \Zend\Http\Request */ $request = $this->getRequest(); $data = array(); if (!($q = urldecode(trim($request->getQuery('q'))))) { return new JsonModel($data); } $ps = new \Product\Model\Store(); $ps->setServiceLocator($this->getServiceLocator()); /* @var $psMapper \Product\Model\StoreMapper */ $psMapper = $this->getServiceLocator()->get('Product\\Model\\StoreMapper'); /* @var $categoryMapper \Product\Model\CategoryMapper */ $categoryMapper = $this->getServiceLocator()->get('Product\\Model\\CategoryMapper'); $data['searchOptions'] = $ps->prepareSearch(); $limit = trim($request->getQuery('limit')); $options['limit'] = $limit > 0 ? $limit : 20; $products = $psMapper->search($ps, $options); if (is_array($products) && count($products)) { $cIds = []; /* @var $ps \Product\Model\Store */ foreach ($products as $ps) { $data['products'][] = $ps->toStd(); if ($ps->getCategoryId()) { $cIds[$ps->getCategoryId()] = $ps->getCategoryId(); } } if ($request->getQuery('showMore') && $request->getQuery('showMore') == 'category') { $category = new \Product\Model\Category(); $category->setStoreId($ps->getStoreId()); $category->setChilds($cIds); $categories = $categoryMapper->search($category, ['limit' => 5]); if (count($categories)) { foreach ($categories as $c) { $data['categories'][] = $c->toStd(); } } } } return new JsonModel($data); }