Développer avec RBS Change : Masquer un rayon dans une facette
-
27/05/2013 19:02
Bonjour,
un rayon peut être masquer dans les menus ou dans le plan de site (option visibilité du bo).
Mon besoin est de masquer un rayon dans une facette.
Comment je peux procéder ?
Merci d'avance
RBS Change Version 3.5.2 - eCommerce Core -
Bonjour,
A priori il doit y avoir moyen de modifier la stratégie d'indexation pour ignorer les rayons à ignorer (par exemple ceux qui sont indiqué comme étant à masquer dans les menus). -
Bonjour,
Je veux savoir ds quelle classe je peux trouver les stratégies d'indexation des facettes rayon et la commande qui me permet d'ignorer les rayons qui sont indiqué comme étant à masquer dans les menus.
Merci
RBS Change Version 3.5.2 - eCommerce Core -
Salut,
Dans le module "ecomextended", j'ai la strategie qui s'appelle "ProductFacetIndexerStrategy". Dans cette classe j'ai la méthode suivante:public function populateIndexDocument($indexDocument, $compiledProduct) { $product = $compiledProduct->getProduct(); // So listing is possible $indexDocument->setVolatileIntegerField('topicId', $compiledProduct->getTopicId()); // Facet/sort fields $indexDocument->setVolatileIntegerField('primaryShelfId', $compiledProduct->getTopshelfId()); $indexDocument->setVolatileIntegerField('shelfId', array($compiledProduct->getShelfId()), true); $shelfService = catalog_ShelfService::getInstance(); $shelf = catalog_persistentdocument_shelf::getInstanceById($compiledProduct->getShelfId()); $compiledShelfIds = $shelfService->getShelfAncestorIds($shelf); $compiledShelfIds[] = $shelf->getId(); $indexDocument->setVolatileIntegerField('shelfIdCompiled', $compiledShelfIds, true); $shelfIds = $product->getDocumentService()->getShelfIdsByShop($product, $compiledProduct->getShop(), $compiledProduct->getLang()); $indexDocument->setVolatileIntegerField('shelfIds', $shelfIds, true); $brandId = $compiledProduct->getBrandId(); if ($brandId !== null) { $indexDocument->setVolatileIntegerField('brandId', $brandId); } $indexDocument->setVolatileFloatField('price', $compiledProduct->getPrice()); // discount $isDiscount = $compiledProduct->getIsDiscount(); $indexDocument->setVolatileIntegerField('isDiscount', intval($isDiscount)); if ($isDiscount) { $indexDocument->setVolatileIntegerField('discountLevel', $compiledProduct->getDiscountLevel()); } else { $indexDocument->setVolatileIntegerField('discountLevel', 0); } // availability $indexDocument->setVolatileIntegerField('isAvailable', intval($compiledProduct->getIsAvailable())); $indexDocument->setVolatileIntegerField('position', $compiledProduct->getPosition()); // Rating $rating = $compiledProduct->getRatingAverage(); if ($rating !== null) { $indexDocument->setVolatileFloatField('ratingAverage', $rating); } else { $indexDocument->setVolatileFloatField('ratingAverage', -1); } ...... // For extended attributes filters $indexDocument->setIntegerField('productId', $compiledProduct->getProduct()->getId()); return true; }
Je crois qu'il faut intervenir à ce niveau.
RBS Change Version 3.5.2 - eCommerce Core -
Bonjour,
Je vais recapituler un peux, mon besoin est le suivant:
Ajouter la possibilité de masquer une rubrique dans la facette 'rayon'.
J'ai procédé comme suit:
1- Ajouter la nouvelle option ds le fichier init.xml du module website:<staticlist listid="modules_website/navigationvisibility" label="Visibilité des pages dans la navigation" description="Visibilité des pages dans la navigation"> <staticitem label="&modules.website.bo.general.visibility.Visible;" value="1"/> <staticitem label="&modules.website.bo.general.visibility.Hidden-in-menu-only;" value="2"/> <staticitem label="&modules.website.bo.general.visibility.Hidden-in-sitemap-only;" value="4"/> <staticitem label="&modules.website.bo.general.visibility.Hidden-in-facette-only;" value="5"/> <staticitem label="&modules.website.bo.general.visibility.Hidden;" value="0"/> </staticlist>
2- J'ai modifié l'action "website_SetNavigationVisibilityAction" pour prendre en charge la nouvelle option:<?php class website_SetNavigationVisibilityAction extends f_action_BaseAction { /** * @param Context $context * @param Request $request */ public function _execute($context, $request) { $docArray = $this->getDocumentInstanceArrayFromRequest($request); $visibility = $request->getParameter('v'); if ($visibility != WebsiteConstants::VISIBILITY_HIDDEN && $visibility != WebsiteConstants::VISIBILITY_VISIBLE && $visibility != WebsiteConstants::VISIBILITY_HIDDEN_IN_MENU_ONLY && $visibility != WebsiteConstants::VISIBILITY_HIDDEN_IN_SITEMAP_ONLY && $visibility != WebsiteConstants::VISIBILITY_HIDDEN_IN_FACETTE_ONLY) { Framework::debug("website_SetVisibilityAction: 'v' parameter is invalid ('".$visibility."'): set to '".WebsiteConstants::VISIBILITY_VISIBLE."'."); $visibility = WebsiteConstants::VISIBILITY_VISIBLE; } foreach ($docArray as $doc) { $doc->setNavigationVisibility($visibility); $doc->save(); } return self::getSuccessView(); } }
Je cherche maintenant comment développer l'option qui masque le rayon ds la facette rayon ?
Merci d'avance.
RBS Change Version 3.5.2 - eCommerce Core -
Bonjour,
C'est une fausse bonne idée de modifier la liste système "modules_website/navigationvisibility".
Il serait préférable d'injecter le document "catalog/shelf" et de lui ajouter une propriété "hiddenInFacet" de type "Boolean"
Ensuite si vous utilisez le système de facette < 3.6.2, il suffit d'étendre la classe "ecomextended_ProductFacetIndexerStrategy" et surcharger la méthode "populateIndexDocument" pour mettre à jour:
"$indexDocument->setVolatileIntegerField('shelfIdCompiled', ..."
"$indexDocument->setVolatileIntegerField('shelfIds', ..."
Avec les rayons visible uniquement.
Mettre ensuite à jour la configuration (modules/catalog/productFacetIndexerStrategyClass) pour utiliser votre classe de stratégie.
Merci de prendre connaissance et de respecter les règles des forums.