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