Développer avec RBS Change : [Résolu] BlockProductlistBaseAction.php ->getShowIfNoProduct

  • 63598.1

    24/07/2012 15:47


    Mathias
    Rang : Expert
    Bonjour,

    j'ai besoin d'une petit explication de code car je ne comprends pas bien le fonctionnement.

    Dans la class catalog_BlockProductlistBaseAction au sein de la fonction execute, j'ai le code suivant qui gère ce que le block doit afficher s'il n'y a pas de produits retourné dans l'objet $productIds :
    elseif ($this->getShowIfNoProduct())
    		{
    			$request->setAttribute('products', null);
    		}
    		else
    		{
    			return website_BlockView::NONE;
    		}

    or, la méthode "getShowIfNoProduct()" est une méthode qui retourne "true" quoi qu'il arrive :
    /**
    	 * @return boolean
    	 */
    	protected function getShowIfNoProduct()
    	{
    		return true;
    	}

    et ce n'est pas un paramètre de block (non présent dans config/blocks.xml).

    ce que je ne comprends pas :
    - pourquoi passer par une méthode qui renvoie true systématiquement ? (quel est la volonté derrière) et pourquoi ce n'est pas un paramètre de block ?
    - pourquoi est-ce que ça renvoie true, et que dans mon cas, c'est comme si "false" était renvoyé, puisque c'est la condition suivante qui est prise en compte dans mon code... et donc comment faire pour que ce soit bien la condition getShowIfNoProduct() qui soit prise en compte !?

    merci !

    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
  • 63598.2 en réponse à 63598.1 écrit par Mathias

    24/07/2012 17:43


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

    Comme l'indique le nom de la classe, il s'agit d'une classe de type "Base", elle est donc étendue par d'autres classes.

    La raison pour laquelle il peut exister des méthodes qui ne font rien de particulier dans les classes de type "Base" et qui se contentent de retourner "true" est de permettre un fonctionnement par défaut, mais surtout d'offrir un point d'extension ou de conditionnement. La classe est d'ailleurs de type abstract.

    L'intérêt? avoir la méthode présente systématiquement et offrir un point d'extension
    Pourquoi est ce que dans ton cas c'est comme si c'était false qui était retourné? Probablement parce que l'on passe par une classe qui étend la classe de base et donc qui modifie la méthode getShowIfNoProduct. Il faut donc tracer l'endroit par lequel on passe pour savoir quel extend est utilisé.

    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é.
  • 63598.3 en réponse à 63598.2 écrit par Jean-Michel

    25/07/2012 11:45


    Mathias
    Rang : Expert
    ça prend tout son sens :)

    et la class "catalog_BlockProductCrossSellingAction" contient bien la méthode getShowIfNoProduct qui renvoie false ;)

    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1366 membres
Aucun membre connecté