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