Développer avec RBS Change : Indexation Facette
-
05/08/2013 16:19
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 -
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
bonjour ,
oui voila le code qui a été fait en spec pour l'affichage des produits par brandfunction 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 -
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.