public static function searchProducts($search_query, $p = 1, $n = 0, &$other) { if ($n == 0) { $n = (int) Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE')); } $p = 1; $other = false; $search_query = self::sanitize($search_query, 1); $start = ($p - 1) * $n; $rows = $n; global $cookie; //set the price field fro country $price_field = 'offer_price'; if ($cookie->id_country == 110) { $price_field = 'offer_price_in'; } if ($cookie->id_currency == 4) { $price_field = $price_field . "_rs"; } // create a client instance $client = SolrSearch::getClient(); // get a select query instance $query = $client->createSelect(); $dismax = $query->getDisMax(); $dismax->setPhraseFields('name'); $dismax->setQueryFields('name^10 text^1.2 tags^3 reference^10 style_tips^15'); $catFilter = $query->createFilterQuery('cat')->setQuery('+cat_id:1'); $query->setQuery($search_query); $query->addSort('inStock', Solarium_Query_Select::SORT_DESC); $orderby = Tools::getValue('orderby'); $orderway = Tools::getValue('orderway'); if ($orderby && $orderway) { $way = Solarium_Query_Select::SORT_DESC; if ($orderby == 'price') { $orderby = $price_field; if ($orderway == 'asc') { $way = Solarium_Query_Select::SORT_ASC; } else { $way = Solarium_Query_Select::SORT_DESC; } } elseif ($orderby == 'discount') { $orderby = 'discount'; } elseif ($orderby == 'hot') { $orderby = 'sales'; } elseif ($orderby == 'new') { $orderby = 'date_add'; } $query->addSort($orderby, $way); /*if($orderby != 'hot') $query->addSort('sales', Solarium_Query_Select::SORT_DESC);*/ } else { $query->addSort('score', Solarium_Query_Select::SORT_DESC); $query->addSort('date_add', Solarium_Query_Select::SORT_DESC); //$query->addSort('sales', Solarium_Query_Select::SORT_DESC); } //$query->addSort('sales', Solarium_Query_Select::SORT_DESC); //$query->addSort('date_add', Solarium_Query_Select::SORT_DESC); $facetSet = $query->getFacetSet(); $facetSet->setMinCount(1); $facetSet->createFacetField('cat_id')->setField('cat_id'); $facet = $facetSet->createFacetRange('priceranges'); $facet->setField($price_field); $facet->setStart(0); if ($cookie->id_currency == 4) { $facet->setGap(500); $facet->setEnd(10000); } else { $facet->setGap(50); $facet->setEnd(200); } $facet->addExclude($price_field); $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER); $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER); $facet = $facetSet->createFacetRange('slaranges'); $facet->setField('shipping_sla'); $facet->setStart(0); $facet->setGap(5); $facet->setEnd(20); $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER); $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER); $facet->addExclude('shipping_sla'); $facet = $facetSet->createFacetField('fabric'); $facet->setField('fabric'); $facet->addExclude('fabrics'); $facet = $facetSet->createFacetField('is_customizable'); $facet->setField('is_customizable'); $facet->addExclude('customizations'); $facet = $facetSet->createFacetField('color'); $facet->setField('color'); $facet->addExclude('colors'); /*$facet = $facetSet->createFacetField('brand_id'); $facet->setField('brand_id'); $facet->addExclude('brands');*/ $query->setStart($start)->setRows($rows); $resultset = $client->select($query); if ($resultset->getNumFound() == 0) { $dismax->setMinimumMatch(0); $resultset = $client->select($query); $other = true; } SolrSearch::cacheResult($query, $resultset); return $resultset; }
/** * @param unknown_type $id_category * @param unknown_type $search_query * @param unknown_type $id_manufacturer * @param unknown_type $selectedFilters * @return Solarium_Result_Select */ public function getResults($id_category, $search_query, $id_manufacturer, $selectedFilters = array(), $andquery = TRUE) { global $cookie, $cart, $smarty; //set the price field fro country $price_field = 'offer_price'; $sla_field = 'shipping_sla'; //get the right address for this cart $id_country = (int) Country::getDefaultCountryId(); if ($cart->id_address_delivery) { $address = new Address($cart->id_address_delivery); if ($address->id_country) { $id_country = $address->id_country; } elseif (isset($cookie->id_country)) { $id_country = (int) $cookie->id_country; } } $curr_currency = CurrencyCore::getCurrency($cookie->id_currency); $conversion_rate = $curr_currency['conversion_rate']; $smarty->assign('price_tax_country', $id_country); if ($id_country == 110) { $price_field = 'offer_price_in'; } if ($cookie->id_currency == 4) { $price_field = $price_field . "_rs"; } $new_products = Tools::getValue('latest', false); $sale_products = Tools::getValue('sale', false); $express_shipping = Tools::getValue('express_shipping', false); $cat_id = Tools::getValue('cat_id', false); if ($this->resultSet) { return $this->resultSet; } $n = (int) Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE')); $start = ((int) Tools::getValue('p', 1) - 1) * $n; $rows = $n; $orderby = Tools::getValue('orderby'); $orderway = Tools::getValue('orderway'); //get the facet info // create a client instance $client = SolrSearch::getClient(); // get a select query instance $query = $client->createSelect(); if ($new_products) { $query->setQuery('date_add:[NOW/DAY-1MONTH/DAY TO *]'); } else { if ($sale_products) { $query->setQuery('discount:[1 TO *]'); } else { if ($express_shipping) { $query->setQuery('shipping_sla:[1 TO 2]'); } } } if ($search_query) { $dismax = $query->getDisMax(); $dismax->setQueryFields('name^10 text^1.2 tags^3 reference^10 style_tips^15'); $query->setQuery($search_query); } // add filter queries if ($id_category) { $catFilter = $query->createFilterQuery('cat')->setQuery('+cat_id:' . $id_category); } if ($id_manufacturer) { $manFilter = $query->createFilterQuery('man')->setQuery('+brand_id:' . $id_manufacturer); $id_categories = Tools::getValue('cat_id'); if (!empty($id_categories)) { $id_categories = explode("-", $id_categories); if (is_array($id_categories)) { $id_categories = implode(" OR ", $id_categories); $query->createFilterQuery("des_cat")->setQuery("cat_id: ({$id_categories})"); } } } if (isset($selectedFilters['pr']) && count($selectedFilters['pr']) > 0) { $filterquery = '+' . $price_field . ':('; $pricefilter = $query->createFilterQuery('maxprice'); $pricefilter->addTag($price_field); $selectedPrices = array(); foreach ($selectedFilters['pr'] as $range) { if ($cookie->id_currency == 4) { switch ($range['id']) { case 1: $selectedPrices[] = '[1 TO 1000]'; break; case 2: $selectedPrices[] = '[1001 TO 2500]'; break; case 3: $selectedPrices[] = '[2501 TO 5000]'; break; case 4: $selectedPrices[] = '[5001 TO 10000]'; break; case 5: $selectedPrices[] = '[10001 TO *]'; break; } } else { switch ($range['id']) { case 1: $selectedPrices[] = '[' . Tools::ps_round(1 / $conversion_rate) . ' TO ' . Tools::ps_round(50 / $conversion_rate) . ']'; break; case 2: $selectedPrices[] = '[' . Tools::ps_round(51 / $conversion_rate) . ' TO ' . Tools::ps_round(100 / $conversion_rate) . ']'; break; case 3: $selectedPrices[] = '[' . Tools::ps_round(101 / $conversion_rate) . ' TO ' . Tools::ps_round(150 / $conversion_rate) . ']'; break; case 4: $selectedPrices[] = '[' . Tools::ps_round(151 / $conversion_rate) . ' TO ' . Tools::ps_round(200 / $conversion_rate) . ']'; break; case 5: $selectedPrices[] = '[' . Tools::ps_round(201 / $conversion_rate) . ' TO *]'; break; } } } $filterquery .= implode(" OR ", $selectedPrices); $pricefilter->setQuery($filterquery . ")"); } if (isset($selectedFilters['manufacturer']) && count($selectedFilters['manufacturer']) > 0) { $brandfilter = $query->createFilterQuery('brand'); $brandfilter->addTag('brands'); $brandQuery = '+brand_id:('; $brandsSelected = array(); foreach ($selectedFilters['manufacturer'] as $brand) { $brandsSelected[] = $brand['id']; } $brandQuery .= implode(" OR ", $brandsSelected); $brandfilter->setQuery($brandQuery . ")"); } if (isset($selectedFilters['fabric']) && count($selectedFilters['fabric']) > 0) { $fabricfilter = $query->createFilterQuery('fabric'); $fabricfilter->addTag('fabrics'); $fabricQuery = '+fabric:('; $fabricsSelected = array(); foreach ($selectedFilters['fabric'] as $fabric) { $fabricsSelected[] = $fabric['id']; } $fabricQuery .= implode(" OR ", $fabricsSelected); $fabricfilter->setQuery($fabricQuery . ")"); } if (isset($selectedFilters['stone']) && count($selectedFilters['stone']) > 0) { $stonefilter = $query->createFilterQuery('stone'); $stonefilter->addTag('stones'); $stoneQuery = '+stone:('; $stonesSelected = array(); foreach ($selectedFilters['stone'] as $stone) { $stonesSelected[] = $stone['id']; } $stoneQuery .= implode(" OR ", $stonesSelected); $stonefilter->setQuery($stoneQuery . ")"); } if (isset($selectedFilters['plating']) && count($selectedFilters['plating']) > 0) { $platingfilter = $query->createFilterQuery('plating'); $platingfilter->addTag('platings'); $platingQuery = '+plating:('; $platingsSelected = array(); foreach ($selectedFilters['plating'] as $plating) { $platingsSelected[] = $plating['id']; } $platingQuery .= implode(" OR ", $platingsSelected); $platingfilter->setQuery($platingQuery . ")"); } if (isset($selectedFilters['material']) && count($selectedFilters['material']) > 0) { $materialfilter = $query->createFilterQuery('material'); $materialfilter->addTag('materials'); $materialQuery = '+material:('; $materialsSelected = array(); foreach ($selectedFilters['material'] as $material) { $materialsSelected[] = $material['id']; } $materialQuery .= implode(" OR ", $materialsSelected); $materialfilter->setQuery($materialQuery . ")"); } if (isset($selectedFilters['look']) && count($selectedFilters['look']) > 0) { $lookfilter = $query->createFilterQuery('look'); $lookfilter->addTag('looks'); $lookQuery = '+look:('; $looksSelected = array(); foreach ($selectedFilters['look'] as $look) { $looksSelected[] = $look['id']; } $lookQuery .= implode(" OR ", $looksSelected); $lookfilter->setQuery($lookQuery . ")"); } if (isset($selectedFilters['size']) && count($selectedFilters['size']) > 0) { $sizefilter = $query->createFilterQuery('size'); $sizefilter->addTag('sizes'); $sizeQuery = '+size:('; $sizesSelected = array(); foreach ($selectedFilters['size'] as $size) { $sizesSelected[] = $size['id']; } $sizeQuery .= implode(" OR ", $sizesSelected); $sizefilter->setQuery($sizeQuery . ")"); } if (isset($selectedFilters['customization']) && count($selectedFilters['customization']) > 0) { $custfilter = $query->createFilterQuery('cust'); $custfilter->addTag('customizations'); $custQuery = '+is_customizable:('; $custsSelected = array(); foreach ($selectedFilters['customization'] as $cust) { $custsSelected[] = $cust['id']; } $custQuery .= implode(" OR ", $custsSelected); $custfilter->setQuery($custQuery . ")"); } if (isset($selectedFilters['color']) && count($selectedFilters['color']) > 0) { $colorfilter = $query->createFilterQuery('color'); $colorfilter->addTag('colors'); $colorQuery = '+color:('; $colorsSelected = array(); foreach ($selectedFilters['color'] as $color) { $colorsSelected[] = $color['id']; } $colorQuery .= implode(" OR ", $colorsSelected); $colorfilter->setQuery($colorQuery . ")"); } if (isset($selectedFilters['handbag_occasion']) && count($selectedFilters['handbag_occasion']) > 0) { $handbag_occasionfilter = $query->createFilterQuery('handbag_occasion'); $handbag_occasionfilter->addTag('handbag_occasions'); $handbag_occasionQuery = '+handbag_occasion:('; $handbag_occasionsSelected = array(); foreach ($selectedFilters['handbag_occasion'] as $handbag_occasion) { $handbag_occasionsSelected[] = $handbag_occasion['id']; } $handbag_occasionQuery .= implode(" OR ", $handbag_occasionsSelected); $handbag_occasionfilter->setQuery($handbag_occasionQuery . ")"); } if (isset($selectedFilters['handbag_style']) && count($selectedFilters['handbag_style']) > 0) { $handbag_stylefilter = $query->createFilterQuery('handbag_style'); $handbag_stylefilter->addTag('handbag_styles'); $handbag_styleQuery = '+handbag_style:('; $handbag_stylesSelected = array(); foreach ($selectedFilters['handbag_style'] as $handbag_style) { $handbag_stylesSelected[] = $handbag_style['id']; } $handbag_styleQuery .= implode(" OR ", $handbag_stylesSelected); $handbag_stylefilter->setQuery($handbag_styleQuery . ")"); } if (isset($selectedFilters['handbag_material']) && count($selectedFilters['handbag_material']) > 0) { $handbag_materialfilter = $query->createFilterQuery('handbag_material'); $handbag_materialfilter->addTag('handbag_materials'); $handbag_materialQuery = '+handbag_material:('; $handbag_materialsSelected = array(); foreach ($selectedFilters['handbag_material'] as $handbag_material) { $handbag_materialsSelected[] = $handbag_material['id']; } $handbag_materialQuery .= implode(" OR ", $handbag_materialsSelected); $handbag_materialfilter->setQuery($handbag_materialQuery . ")"); } if (isset($selectedFilters['sla']) && count($selectedFilters['sla']) > 0) { $filterquery = '+' . $sla_field . ':('; $slafilter = $query->createFilterQuery('shipping_sla'); $slafilter->addTag($sla_field); $selectedSlas = array(); foreach ($selectedFilters['sla'] as $range) { switch ($range['id']) { case 1: $selectedSlas[] = '[1 TO 5]'; break; case 2: $selectedSlas[] = '[6 TO 10]'; break; case 3: $selectedSlas[] = '[11 TO 15]'; break; case 4: $selectedSlas[] = '[16 TO 20]'; break; case 5: $selectedSlas[] = '[21 TO *]'; break; } } $filterquery .= implode(" OR ", $selectedSlas); $slafilter->setQuery($filterquery . ")"); } $facetSet = $query->getFacetSet(); $facetSet->setMinCount(1); $facetSet->createFacetField('cat_id')->setField('cat_id'); $facet = $facetSet->createFacetRange('priceranges'); $facet->setField($price_field); $facet->setStart(0); if ($cookie->id_currency == 4) { $facet->setGap(500); $facet->setEnd(10000); } else { $facet->setGap(Tools::ps_round(50 / $conversion_rate)); $facet->setEnd(Tools::ps_round(200 / $conversion_rate)); } $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER); $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER); $facet->addExclude($price_field); $facet = $facetSet->createFacetRange('slaranges'); $facet->setField($sla_field); $facet->setStart(0); $facet->setGap(5); $facet->setEnd(20); $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER); $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER); $facet->addExclude($sla_field); if (!$id_manufacturer) { $facet = $facetSet->createFacetField('brand_id'); $facet->setField('brand_id'); $facet->addExclude('brands'); } $facet = $facetSet->createFacetField('stone'); $facet->setField('stone'); $facet->addExclude('stones'); $facet = $facetSet->createFacetField('plating'); $facet->setField('plating'); $facet->addExclude('platings'); $facet = $facetSet->createFacetField('material'); $facet->setField('material'); $facet->addExclude('materials'); $facet = $facetSet->createFacetField('look'); $facet->setField('look'); $facet->addExclude('looks'); $facet = $facetSet->createFacetField('fabric'); $facet->setField('fabric'); $facet->addExclude('fabrics'); $facet = $facetSet->createFacetField('size'); $facet->setField('size'); $facet->addExclude('sizes'); $facet = $facetSet->createFacetField('is_customizable'); $facet->setField('is_customizable'); $facet->addExclude('customizations'); $facet = $facetSet->createFacetField('color'); $facet->setField('color'); $facet->addExclude('colors'); $facet = $facetSet->createFacetField('handbag_occasion'); $facet->setField('handbag_occasion'); $facet->addExclude('handbag_occasions'); $facet = $facetSet->createFacetField('handbag_style'); $facet->setField('handbag_style'); $facet->addExclude('handbag_styles'); $facet = $facetSet->createFacetField('handbag_material'); $facet->setField('handbag_material'); $facet->addExclude('handbag_materials'); $facet = $facetSet->createFacetField('shipping_sla'); $facet->setField('shipping_sla'); $facet->addExclude('shipping_slas'); $query->setStart($start)->setRows($rows); $query->addSort('inStock', Solarium_Query_Select::SORT_DESC); if ($orderby && $orderway) { $way = Solarium_Query_Select::SORT_DESC; if ($orderby == 'price') { $orderby = $price_field; if ($orderway == 'asc') { $way = Solarium_Query_Select::SORT_ASC; } else { $way = Solarium_Query_Select::SORT_DESC; } } elseif ($orderby == 'discount') { $orderby = 'discount'; } elseif ($orderby == 'hot') { if ($search_query) { $query->addSort('score', Solarium_Query_Select::SORT_DESC); } $orderby = 'sales'; } elseif ($orderby == 'new') { if ($search_query) { $query->addSort('score', Solarium_Query_Select::SORT_DESC); } $orderby = 'date_add'; } if ($express_shipping) { $query->addSort('shipping_sla', Solarium_Query_Select::SORT_ASC); } $query->addSort($orderby, $way); /*if ($orderby != 'hot') { $query->addSort('sales', Solarium_Query_Select::SORT_DESC); $query->addSort('date_add', Solarium_Query_Select::SORT_DESC); }*/ } elseif ($search_query) { $query->addSort('score', Solarium_Query_Select::SORT_DESC); //$query->addSort('sales', Solarium_Query_Select::SORT_DESC); $query->addSort('date_add', Solarium_Query_Select::SORT_DESC); } else { if ($express_shipping) { $query->addSort('shipping_sla', Solarium_Query_Select::SORT_ASC); } else { //$query->addSort('sales', Solarium_Query_Select::SORT_DESC); $query->addSort('date_add', Solarium_Query_Select::SORT_DESC); } } $this->resultSet = SolrSearch::getFromCache($query); if (!$this->resultSet) { $this->resultSet = $client->select($query); if ($this->resultSet->getNumFound() == 0) { if (isset($dismax)) { $dismax->setMinimumMatch(0); } $this->resultSet = $client->select($query); } } return $this->resultSet; }
<?php include dirname(__FILE__) . '/config/config.inc.php'; include dirname(__FILE__) . '/init.php'; include dirname(__FILE__) . '/header.php'; $top_categories = array(array(2, 'sarees', 'Sarees'), array(3, 'salwar-kameez', 'Salwar Kameez'), array(1202, 'tops', 'Tops'), array(5, 'lehenga', 'Lehenga Choli'), array(454, 'jewelry', 'Jewelery'), array(450, 'indusdiva-pick', 'Exclusive Designs')); $cat_products = array(); foreach ($top_categories as $category) { $category_name = $category[2]; $category_link = $category[1]; $id_category = $category[0]; if (!is_array($cat_products[$category_name])) { $cat_products[$category_name] = array(); $cat_products[$category_name]["more_link"] = "{$id_category}-{$category_link}#express_shipping=0&sale=0&latest=0&id_category_layered={$id_category}&orderby=new&orderway=desc"; } $client = SolrSearch::getClient(); $query = $client->createSelect(); $query->setQuery('cat_id:' . $id_category); $query->setRows(10); $query->setStart(0); $orderby = 'date_add'; $way = Solarium_Query_Select::SORT_DESC; $query->addSort('inStock', Solarium_Query_Select::SORT_DESC); $query->addSort($orderby, $way); $results = $client->select($query); $total_found = $results->getNumFound(); $products = $results->getData(); $cat_products[$category_name]['products'] = $products['response']['docs']; } //echo "<pre>"; print_r( $cat_products ); exit; $smarty->assign("whats_new_products", $cat_products);