Développer avec RBS Change : Indexation Facette

  • 80090.1

    05/08/2013 16:19


    hioli01
    Rang : Adepte
    Bonjour,
    dans un dev specifique que j'ai fais j'ai rajouté un nouveau document 'tendance' qui est en relation avec le document produit (tel que pour le document marque tout document ai une tendance ).
    ensuite j'ai crée un menu avec la liste de tout les tendances et je voudrai qu'on click sur un lien j'affiche tout les produits qui appartiennent à cette tendance on utilisant solr.
    On suivant ce qui a été fait pour le document brand du module brand je trouves qu'il y a une facette brandId qui permet d'effecteur ce type de recherche solr.
    puis je avoir plus d'information sur la maniere dont la recherche par brand fonctionnait.
    est ce que c'est bien une facette qui a été rajouté ? si oui dans mon cas comment je peux rajouté tendanceId comme etant une facette pour qu'elle serait indexé par solr.
    Merci d'avance pour toute information qui peut clarifier cette partie qui me reste flou :(
    Cordialement.

    Développeur et intégrateur web
    RBSChange V 3.5.2 e-commerce
  • 80090.2 en réponse à 80090.1 écrit par hioli01

    14/08/2013 15:32


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Pouvez fournir plus d'information sur le morceau de code auquel vous faites référence pour les marques?

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 80090.3 en réponse à 80090.2 écrit par Jean-Michel

    16/08/2013 16:33


    hioli01
    Rang : Adepte
    bonjour ,
    oui voila le code qui a été fait en spec pour l'affichage des produits par brand

        function getRequestModuleNames()
        {
            return array_merge(array('brand', 'ecomextended'), parent::getRequestModuleNames());
        }
        
    	/**
    	 * @param f_mvc_Request $request
    	 * @param Boolean $returnIds
    	 * @return catalog_persistentdocument_product[]
    	 */
    	protected function getProductArray($request, $returnIds = false)
    	{
    		$cfg = $this->getConfiguration();
    		$ctx = $this->getPage();
    		$showAll = $request->hasNonEmptyParameter('showAll') ? f_util_Convert::toBoolean($request->getParameter('showAll')) : false;
    		$primaryOnly = true;
    		$request->setAttribute('showAll', $showAll);
    		
    		$complQuery = null;
    
    		/** SPE **/
    		$brand = $this->getDocumentParameter();
    		if($brand instanceof brand_persistentdocument_brand)
    		{
    		    $queryString = new indexer_TermQuery(indexer_Field::getVolatileIntegerFieldName("brandId"), $brand->getId());
    		}
    		else
    		{
    		    return array();
    		}
    		/** SPE **/
    		
    		$currentPage = $this->getCurrentPageNumber();
    		$itemsPerPage = $this->getNbItemsPerPage();
    		
    		$op = $this->findLocalParameterValue('op', 'AND');
    		
    		$query = $this->getStandardQuery($request, $queryString, $currentPage, $itemsPerPage, $op);
    		$this->addFacets($query);
    		$filter = $this->createFilter($showAll, $primaryOnly);
    		$query->setFilterQuery($filter);
    		
    		$this->getPage()->setAttribute("ecomextended_BlockSearchresultsAction_queryNoFilter", clone ($query));
    		
    		$hasFilter = $this->applyFilters($query, $request);
    		$sort = $this->setSort($query);	
    		$searchResults = indexer_IndexService::getInstance()->search($query);
    		
    		// Error during search...
    		if ($searchResults === null)
    		{
    			$error = LocaleService::getInstance()->transFO('m.solrsearch.frontoffice.error-during-search', array('ucf', 'html'));
    			$this->addError($error);
    			return null;
    		}
    		
    		if ($complQuery !== null)
    		{
    			$complementaryResults = indexer_IndexService::getInstance()->search($complQuery);
    			if ($complementaryResults->getTotalHitsCount() > 0)
    			{
    				$request->setAttribute("complementaryResults", $complementaryResults);
    			}
    		}
    		
    		$this->completeSearchResults($searchResults);
    		
    		$totalHitsCount = $searchResults->getTotalHitsCount();
    		$pageHitsCount = $searchResults->count();
    		$request->setAttribute('searchResults', $searchResults);
    		$request->setAttribute('noHits', $pageHitsCount == 0);
    		$this->getContext()->setAttribute(ecomextended_BlockSearchresultsAction::SEARCHRESULTS_ATTR, $searchResults);
    		if ($totalHitsCount > 0)
    		{
    			$products = array();
    			$productIds = array();
    			$returnedMinOffset = $itemsPerPage*($currentPage-1);
    			$returnedMaxOffset = $returnedMinOffset + $itemsPerPage;
    			$optimizeQuery = $this->getConfiguration()->getOptimizeQuery();
    			$i = $optimizeQuery ?  $returnedMinOffset : 0;
    			
    			foreach ($searchResults as $searchResult)
    			{
    				if (($i < $returnedMinOffset || $i >= $returnedMaxOffset))
    				{
    					if (!$optimizeQuery)
    					{
    						$productIds[] = intval($searchResult->getProductId());
    					}
    				}
    				else 
    				{
    					if ($returnIds)
    					{
    						$products[] = intval($searchResult->getProductId());
    					}
    					else
    					{
    						$products[] = DocumentHelper::getDocumentInstance(intval($searchResult->getProductId())); 
    					}
    					$productIds[] = intval($searchResult->getProductId());
    				}
    				$i++;
    			}
    
    			$paginator = new paginator_Paginator('ecomextended', $currentPage, $products, $itemsPerPage);
    			$paginator->setPageCount((int) ceil($totalHitsCount / $itemsPerPage));
    			$paginator->setCurrentPageNumber($currentPage);			
    			$request->setAttribute('blockTitle', $this->getBlockTitle());
    			$request->setAttribute('blockView', $this->getDisplayMode($request));
    			$request->setAttribute('productIds', $productIds);
    			
    			$formaters = array('ucf', 'html');
    		
    			$request->setAttribute("sortOptions", $this->getSortOptions($formaters));
    			return $paginator;
    		}
    		return $hasFilter ? array() : null;
    	}
    	
    	protected function createFilter($showAll = false, $primaryOnly = true)
    	{
    		$website = website_WebsiteModuleService::getInstance()->getCurrentWebsite();
    		$filter = indexer_QueryHelper::andInstance();
    		$filter->add(indexer_QueryHelper::websiteIdRestrictionInstance($website->getId()));
    		if (!$primaryOnly)
    		{
    			$filter->add(indexer_QueryHelper::accessRestrictionInstance(array(-1)));
    		}
    		if (!$showAll)
    		{
    			$filter->add(new indexer_TermQuery("documentModel", "modules_catalog/compiledproduct"));
    		}
    		return $filter;
    	}
    


    Ce n'est pas très évident de comprendre un code qui a été fait en spec surtout quand il y n'a pas de commentaires.
    Merci d'avance.
    Bien Cordialement.

    Développeur et intégrateur web
    RBSChange V 3.5.2 e-commerce
  • 80090.4 en réponse à 80090.3 écrit par hioli01

    12/09/2013 09:59


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Quelle est la classe d'origine de ce code?

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1442 membres
Aucun membre connecté