<?php
/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Enterprise License (PEL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PEL
*/
namespace App\Controller;
use App\Model\Product\AbstractProduct;
use App\Model\Product\AccessoryPart;
use App\Model\Product\Car;
use App\Model\Product\Category;
use Pimcore\Model\DataObject\Manufacturer;
use App\Services\SegmentTrackingHelperService;
use App\Website\LinkGenerator\ProductLinkGenerator;
use App\Website\Navigation\BreadcrumbHelperService;
use Knp\Component\Pager\Pagination\SlidingPagination;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\DefaultMysql;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ElasticSearch\AbstractElasticSearch;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ProductListInterface;
use Pimcore\Config;
use Pimcore\Model\DataObject\AbstractObject;
use Pimcore\Model\DataObject\Concrete;
use Pimcore\Model\DataObject\Data\UrlSlug;
use Pimcore\Model\DataObject\FilterDefinition;
use Pimcore\Translation\Translator;
use Pimcore\Twig\Extension\Templating\HeadTitle;
use Pimcore\Twig\Extension\Templating\Placeholder;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Pimcore\Model\DataObject;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Pimcore\Db;
use App\Lib\Utility;
class ProductB2CController extends BaseB2CController
{
/**
* @param Request $request
* @param AbstractObject $object
* @param UrlSlug $urlSlug
* @return Response
*/
public function productDetailSlugAction(Request $request, AbstractObject $object, UrlSlug $urlSlug) {
return $this->forward('App\Controller\ProductB2CController::detailAction', ['product' => $object]);
}
/**
* @Route("/b2c/shop/{path}{productname}~p{product}", name="b2c-shop-detail", defaults={"path"=""}, requirements={"path"=".*?", "productname"="[\w-]+", "product"="\d+"})
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param Concrete $product built-in parameter conversion, please see https://github.com/pimcore/pimcore/pull/5554
* @param ProductLinkGenerator $productLinkGenerator
*
* @return Response
*
* @throws \Exception
*/
public function detailAction(
Request $request,
HeadTitle $headTitleHelper,
BreadcrumbHelperService $breadcrumbHelperService,
Factory $ecommerceFactory,
SegmentTrackingHelperService $segmentTrackingHelperService,
Concrete $product,
ProductLinkGenerator $productLinkGenerator
)
{
if (!(
$product && $product->isPublished()
)
) {
throw new NotFoundHttpException('Product not found.');
}
$file = null;
$fileExists = false;
$file = BASE_URL.'/document/'.$product->getItem().'.pdf';
/*if(Utility::check_file_exist($file))
{
$fileExists = true;
$file = BASE_URL.'/document/'.$product->getItem().'.pdf';
}else{
$file = null;
}*/
if($file = $product->getProductPdf()){
$fileExists = true;
$file = $product->getProductPdf();
}
// //redirect to main url
// $generatorUrl = $productLinkGenerator->generate($product);
// if($generatorUrl != $request->getPathInfo()) {
// $queryString = $request->getQueryString();
// return $this->redirect($generatorUrl . ($queryString ? '?' . $queryString : ''));
// }
$breadcrumbHelperService->enrichProductDetailPage($product);
$headTitleHelper($product->getOSName());
$paramBag = $this->getAllParameters($request);
$paramBag['product'] = $product;
$paramBag['category'] = $product->getMainCategory();
$paramBag['brand'] = $product->getManufacturer();
$paramBag['search'] = false;
$paramBag['file'] = $file;
$paramBag['fileExists'] = $fileExists;
$paramBag['isMecstoreUser'] = false;
//track segments for personalization
$segmentTrackingHelperService->trackSegmentsForProduct($product);
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackProductView($product);
$salesRepesentative = [];
$manufacturer = $product->getManufacturer();
if($manufacturer){
$sales = $manufacturer->getSalesRepesentative();
if($sales)
{
$count = 0;
foreach($sales as $key=>$sale){
$salesRepesentative[$count]['Name'] = $sale['Name']->getData().' ('.$sale['Area']->getData().')';
$salesRepesentative[$count]['PhoneNo'] = $sale['PhoneNo']->getData();
$count++;
}
}
$salesRepesentative = $input = array_map("unserialize", array_unique(array_map("serialize", $salesRepesentative)));
}
$paramBag['sales_representative'] = $salesRepesentative;
$paramBag['crossselling_products'] = $product->getCrossSelling();
// $_SERVER['HTTP_REFERER'] ="";
if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],'shop-by-brand') !== false){
return $this->render('product_b2c/detail_brand.html.twig', $paramBag);
}
else if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],'ovunque') !== false){
$paramBag['search'] = true;
return $this->render('product_b2c/detail.html.twig', $paramBag);
}
else{
return $this->render('product_b2c/detail.html.twig', $paramBag);
}
}
/**
* @Route("/b2c/shop/{categoryname}~c{category}", name="b2c-shop-category")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function listingAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator)
{
$masterFilterDefinition = Config::getWebsiteConfig()->get('masterFilterDefinition');
$params = array_merge($request->query->all(), $request->attributes->all());
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$category = Category::getById($params['category'] ?? null);
$params['category'] = $category;
if ($category) {
$headTitleHelper($category->getName());
$breadcrumbHelperService->enrichCategoryPage($category);
}else{
$category = new \stdClass();
$category->name = "tutto il catalogo";
$params['category'] = $category;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
//p_r(get_class_methods($productListing));exit;
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
if($category instanceof \Pimcore\Model\DataObject){
if($params['term']){
$searchTerms = explode(" ",$params['term']);
if($searchTerms)
{
foreach($searchTerms as $term)
{
$productListing->addCondition("searchelem LIKE '%".$term."%' AND categoryIds LIKE '%".$category->getId()."%'");
}
}
}else{
$productListing->addCondition("categoryIds LIKE '%".$category->getId()."%'");
}
}else{
if(is_object($category)){
if($category->name == "tutto il catalogo"){
$filterDefinition = $masterFilterDefinition;
$category->name = "RICERCA";
}
}
// echo "(lower(description) LIKE '".strtolower($params['term'])."%' OR lower(name) LIKE '".strtolower($params['term'])."%' )";exit;
if($params['term']){
$searchTerms = explode(" ",$params['term']);
if($searchTerms)
{
foreach($searchTerms as $term)
{
$productListing->addCondition("searchelem LIKE '%".$term."%'");
}
}
}
}
}
else if($category)
{
$productListing->addCondition("categories LIKE '%".$category->getId()."%'");
}
}
$productListing->setOrderKey('o_id');
$productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$params['orderby'] = "o_id";
}
$params['productListing'] = $productListing;
// load current filter
if ($category instanceof \Pimcore\Model\DataObject) {
$filterDefinition = $category->getFilterdefinition();
//track segments for personalization
$segmentTrackingHelperService->trackSegmentsForCategory($category);
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackCategoryPageView($category->getName(), null);
}
if ($request->get('filterdefinition') instanceof FilterDefinition) {
$filterDefinition = $request->get('filterdefinition');
}
if (empty($filterDefinition)) {
$filterDefinition = Config::getWebsiteConfig()->get('fallbackFilterdefinition');
}
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
//p_r($maxPriceList);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$getter = "getPrice";
$params['maxRange'] = (int)$maxPriceItems[0]->$getter() +1;
}
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
//p_);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 24);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
($pagelimit)?$pagelimit:24
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['isMecstoreUser'] = false;
if ($request->attributes->get('noLayout')) {
return $this->render('product_b2c/listing_content.html.twig', $params);
}
// track product impressions
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'grid');
}
//p_r($params);exit;
return $this->render('product_b2c/listing.html.twig', $params);
}
/**
* @Route("/b2c/brand/{brandname}~c{brand}", name="b2c-brand")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function brandsDetailAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator)
{
$params = array_merge($request->query->all(), $request->attributes->all());
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
// if($user){
// $partner = $user->getPartner();
// if($partner){
// //$priceListName = $partner->getPriceList();
// }
// }
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$brand = Manufacturer::getById($params['brand'] ?? null);
$params['manufacturer'] = $brand;
if ($brand) {
$headTitleHelper($brand->getName());
}else{
$brand = new \stdClass();
$brand->name = "tutto il catalogo";
$params['manufacturer'] = $brand;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
$brandName = $brand->getName();
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
//echo "searchelem LIKE '%".$brandName."%' OR lower(searchelem) LIKE '".strtolower($params['term'])."%'";exit;
if($params['term'])
{
$productListing->addCondition("manufacturer_name LIKE '%".$brandName."%' AND lower(searchelem) LIKE '%".strtolower($params['term'])."%'");
}else{
$productListing->addCondition("searchelem LIKE '%".$brandName."%'");
}
}else
{
$productListing->addCondition("searchelem LIKE '%".$brandName."%'");
}
}
// $productListing->setOrderKey('o_id');
// $productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$productListing->setOrderKey('manufacturer_name = "'.$brandName.'"');
$productListing->setOrder('DESC');
$params['orderby'] = "manufacturer_name";
}
$params['productListing'] = $productListing;
$filterDefinition = Config::getWebsiteConfig()->get('manufacturerFilterdefinition');
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
// p_r($maxParam);
// p_r($filterDefinition);
// p_r($maxPriceList);
// p_r($filterService);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$params['maxRange'] = $maxPriceItems[0]->getPrice()+1;
}
//p_r($params);exit;
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
// p_r(get_class_methods($productListing));exit;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 12);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
($pagelimit)?$pagelimit:12
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['brandObj'] = $brand;
$params['isMecstoreUser'] = false;
if ($request->attributes->get('noLayout')) {
return $this->render('product/listing_content_brand.html.twig', $params);
}
// track product impressions
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'grid');
}
//p_r($params);exit;
return $this->render('product_b2c/shop-in-shop_b2c.html.twig', $params);
}
/**
* @Route("/b2c/shop-by-brand/{brandname}~c{brand}", name="b2c-shop-brand")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function listingBrandsAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator)
{
$params = array_merge($request->query->all(), $request->attributes->all());
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
// if($user){
// $partner = $user->getPartner();
// if($partner){
// //$priceListName = $partner->getPriceList();
// }
// }
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$brand = Manufacturer::getById($params['brand'] ?? null);
$params['manufacturer'] = $brand;
if ($brand) {
$headTitleHelper($brand->getName());
}else{
$brand = new \stdClass();
$brand->name = "tutto il catalogo";
$params['manufacturer'] = $brand;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
$brandName = $brand->getName();
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
//echo "searchelem LIKE '%".$brandName."%' OR lower(searchelem) LIKE '".strtolower($params['term'])."%'";exit;
if($params['term'])
{
$productListing->addCondition("manufacturer_name LIKE '%".$brandName."%' AND lower(searchelem) LIKE '%".strtolower($params['term'])."%'");
}else{
$productListing->addCondition("manufacturer_name LIKE '%".$brandName."%'");
}
}else
{
$productListing->addCondition("searchelem LIKE '%".$brandName."%'");
}
}
// $productListing->setOrderKey('o_id');
// $productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$productListing->setOrderKey('manufacturer_name = "'.$brandName.'"');
$productListing->setOrder('DESC');
$params['orderby'] = "manufacturer_name";
}
$params['productListing'] = $productListing;
$filterDefinition = Config::getWebsiteConfig()->get('manufacturerFilterdefinition');
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
// p_r($maxParam);
// p_r($filterDefinition);
// p_r($maxPriceList);
// p_r($filterService);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$params['maxRange'] = $maxPriceItems[0]->getPrice()+1;
}
//p_r($params);exit;
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
// p_r(get_class_methods($productListing));exit;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 12);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
($pagelimit)?$pagelimit:12
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['brandObj'] = $brand;
$params['isMecstoreUser'] = false;
if ($request->attributes->get('noLayout')) {
return $this->render('product/listing_content_brand.html.twig', $params);
}
// track product impressions
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'grid');
}
//p_r($params);exit;
return $this->render('product_b2c/shop-in-shop_b2c_listing.html.twig', $params);
}
/**
* @param Request $request
* @param Factory $ecommerceFactory
*
* @return Response
*/
public function productTeaserAction(Request $request, Factory $ecommerceFactory)
{
$paramsBag = [];
if ($request->get('type') == 'object') {
AbstractObject::setGetInheritedValues(true);
$product = AbstractProduct::getById($request->get('id'));
$paramsBag['product'] = $product;
$paramsBag['backend'] = true;
//track product impression
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackProductImpression($product, 'teaser');
return $this->render('product_b2c/product_teaser.html.twig', $paramsBag);
}
throw new NotFoundHttpException('Product not found.');
}
/**
* @Route("/b2c/search", name="b2c-search")
*
* @param Request $request
* @param ListHelper $listHelper
* @param Factory $ecommerceFactory
* @param ProductLinkGenerator $productLinkGenerator
* @param Translator $translator
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param HeadTitle $headTitleHelper
* @param Placeholder $placeholder
*
* @return Response|JsonResponse
*/
public function searchAction(Request $request, ListHelper $listHelper, Factory $ecommerceFactory, ProductLinkGenerator $productLinkGenerator, Translator $translator, BreadcrumbHelperService $breadcrumbHelperService, HeadTitle $headTitleHelper, Placeholder $placeholder, PaginatorInterface $paginator)
{
// die('sddsd');
$params = $request->query->all();
$params['category'] = Category::getById($params['category'] ?? null);
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->setVariantMode(ProductListInterface::VARIANT_MODE_VARIANTS_ONLY);
$term = strip_tags($request->get('term'));
if($productListing instanceof AbstractElasticSearch) {
// simple elastic search query - uses multi-match query on all defined search_attributes
// $productListing->addQueryCondition($term);
//sample for a more specific elastic search query - not considers search_attributes but provides full flexibility
// this query weights cars more that accessories
$query = [
'function_score' => [
'query' => [
'multi_match' => [
"query" => $term,
"type" => "cross_fields",
"operator" => "and",
"fields" => [
"attributes.name^4",
"attributes.name.analyzed",
"attributes.name.analyzed_ngram",
"attributes.manufacturer_name^3",
"attributes.manufacturer_name.analyzed",
"attributes.manufacturer_name.analyzed_ngram",
"attributes.color",
"attributes.color.analyzed",
"attributes.color.analyzed_ngram",
"attributes.carClass",
"attributes.carClass.analyzed",
"attributes.carClass.analyzed_ngram"
]
]
],
'functions' => [
[
'filter' => ['match' => ['system.o_classId' => 'AP']],
'weight' => 1
],
[
'filter' => ['match' => ['system.o_classId' => 'CAR']],
'weight' => 2
]
],
'boost_mode' => 'multiply'
]
];
$productListing->addQueryCondition($query, 'searchTerm');
} else {
//default mysql search query condition - would also work for elastic search in that way
$term = trim(preg_replace('/\s+/', ' ', $term));
if (!empty($term)) {
foreach (explode(' ', $term) as $t) {
$productListing->addQueryCondition($t);
}
}
}
if (isset($params['autocomplete'])) {
$resultset = [];
$productListing->setLimit(10);
foreach ($productListing as $product) {
$result['href'] = $productLinkGenerator->generateWithMockup($product, []);
if ($product instanceof Car) {
$result['product'] = $product->getOSName() . ' ' . $product->getColor()[0] . ', ' . $product->getCarClass();
} else {
$result['product'] = $product->getOSName();
}
$resultset[] = $result;
}
return $this->json($resultset);
}
$filterDefinition = $params['filterDefinition'] = Config::getWebsiteConfig()->get('fallbackFilterdefinition');
// create and init filter service
$filterService = Factory::getInstance()->getFilterService();
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
$params['filterService'] = $filterService;
$params['products'] = $productListing;
// init pagination
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
$filterDefinition->getPageLimit()
);
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'search-results');
}
//breadcrumbs
$placeholder('addBreadcrumb')->append([
'parentId' => $this->document->getId(),
'id' => 'search-result',
'label' => $translator->trans('shop.search-result', [$term])
]);
$params['language'] = $request->getLocale();
$params['term'] = $term;
$breadcrumbHelperService->enrichGenericDynamicPage($translator->trans('shop.search-result', [$term]));
$headTitleHelper($translator->trans('shop.search-result', [$term]));
return $this->render('product_b2c/search.html.twig', $params);
}
private function getProductsInWishList($user){
$products = new \Pimcore\Model\DataObject\Wishlist\Listing();
$products->setCondition('user__id = ?',[$user->getId()]);
return $products->getCount();
}
}