Développer avec RBS Change : Masquer un rayon dans une facette

  • 79017.1

    27/05/2013 19:02


    bcharfi
    Rang : Adepte
    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
  • 79017.2 en réponse à 79017.1 écrit par bcharfi

    28/05/2013 09:15


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    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).
  • 79017.3 en réponse à 79017.2 écrit par Gaël Port

    28/05/2013 11:05


    bcharfi
    Rang : Adepte
    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
  • 79017.4 en réponse à 79017.3 écrit par bcharfi

    28/05/2013 11:35


    bcharfi
    Rang : Adepte
    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
  • 79017.5 en réponse à 79017.4 écrit par bcharfi

    02/06/2013 23:47


    bcharfi
    Rang : Adepte
    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="&amp;modules.website.bo.general.visibility.Visible;" value="1"/>
    <staticitem label="&amp;modules.website.bo.general.visibility.Hidden-in-menu-only;" value="2"/>
    <staticitem label="&amp;modules.website.bo.general.visibility.Hidden-in-sitemap-only;" value="4"/>
    <staticitem label="&amp;modules.website.bo.general.visibility.Hidden-in-facette-only;" value="5"/>
    <staticitem label="&amp;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
  • 79017.6 en réponse à 79017.5 écrit par bcharfi

    10/06/2013 12:55


    Eric Hauswald
    Titre : Développeur RBS Change
    Rang : Membre
    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.
 
1471 membres
Aucun membre connecté