/** * @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; }