Jump to content

PS 1.6 Module Hook et gestion du cache


Recommended Posts

Bonjour à tous,

Je rencontre un problème de performance sur un de mes  modules.

J'utilise un module permettant d'afficher et filtrer l'ensemble des combinaisons pour un produit.

J'ai créé un nouveau module qui permet d'associer un délais de livraison spécifique par combinaison. j'appel donc via un hook dans mon premier module afin d'afficher l'information ce qui donne :

 

...
{foreach from=$list_id_product_attribute item=id}
{$ipa = $id.id_product_attribute}
{assign var=link_combination value=$link->getProductLink($product, null, null, null, null, null, $ipa)}
{* DISPLAY HTML *}
{hook h='displayDeliveryTimingForProductAttribute' mod='delaislivraison' product_attribute=$ipa product=$id_product}
{* DISPLAY HTML *}
{/foreach}
...

Mon problème est que :

Cas 1 :

Si j'active le cache, j'ai la même valeur pour l'ensemble de mes combinaisons car il va systèmatiquement prendre la valeur en cache

Cas 2:

Je vide le cache à chaque appel :

$this->_clearCache('displayDeliveryTimingForProduct.tpl');
        return $this->display(
            __FILE__,
            'views/front/displayDeliveryTimingForProduct.tpl',
            array(
                'deliveryTiming' => $productDeliveryTiming,
            )
        );

Et dans ce cas ma page met plus de 10s à s'afficher.

Comme puis-je gérer ce cas ? Je ne dois pas utiliser correctement le cache et/ou le hook. Pouvez-vous m'aider ?

Merci d'avance,

Cordialement,

Nicolas

Link to comment
Share on other sites

Assignez au cache_id l'id_product et l'id_product_attribute, vous aurez alors un cache par combinaison^^

// votre code qui génère le tpl
public function VotreFonction() {

	// récupération des variables
	$id_product = XXXX;
	$id_product_attribute = YYYYY;
	
	if (!$this->isCached('displayDeliveryTimingForProduct.tpl', $this->getCacheId($id_product, $id_product_attribute))) {

		// votre traitement qui va générer le contenu du tpl
	
	}
	return $this->display(__FILE__, 'displayDeliveryTimingForProduct.tpl', $this->getCacheId($id_product, $id_product_attribute));
}


protected function getCacheId($id_product, $id_product_attribute = 0) {

	return parent::getCacheId().'|'.$id_product.'|'.$id_product_attribute;
}

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...