select('re.*')->from('recommenders', 're') ->where(Operator::equals(['label' => $label])) ->andWhere(Translation::coalesceTranslatedFields(RecommendersTranslation::class)) ->execute()->fetchAssociative(); } public function getRecommendersProducts(array &$data): ProductCollection { if (empty($data['label'])) { throw new NotFoundHttpException('Empty label'); } $labelRecommender = $this->getRecommenderByLabel($data['label']); if ($type = $labelRecommender['type'] ?? null) { $recommender = $this->recommendersLocator->getRecommender($type); $config = $recommender->getConfigurationVariables($labelRecommender); $productList = $recommender->execute($data['data'] ?? [], $config); if (findModule(\Modules::COMPONENTS)) { $this->productDataProvider->addProducts($productList->toArray()); } if ($recommender instanceof LuigisBoxRecommender) { $data['luigisbox'] = $recommender->getLogData(); } return $productList; } else { throw new NotFoundHttpException("Recommender doesn't exist"); } } public function renderRecommendersProducts(array $data): string { $recommender = $this->getRecommenderByLabel($data['label']); try { $productList = $this->getRecommendersProducts($data); } catch (\Throwable $e) { if (getAdminUser()) { // show error to admin return "Recommender \"{$data['label']}\" error: ".$e->getMessage(); } return ''; } if (findModule(\Modules::COMPONENTS)) { return $this->twig->createTemplate('{{ component(name, data) }}') ->render([ 'name' => 'ProductList', 'data' => [ 'productList' => $productList, 'list_show' => $data['list_show'], ], ]); } $smarty = createSmarty(false, true); $smarty->assign($data['data'] ?? ''); $smarty->assign('products', $productList); $smarty->assign('recommender', $recommender); if (isset($data['luigisbox'])) { $smarty->assign('luigisbox', $data['luigisbox']); $smarty->assign('lbx_recommender', $data['luigisbox']['response'][0]['recommender'] ?? null); } return $smarty->fetch($data['template'] ?? 'block.products.recommender.tpl'); } }