Jump to content

[Module Home Featured] Afficher les couleurs des déclinaisons


Recommended Posts

Bonjour à tous,

 

je souhaite afficher les couleurs des déclinaisons de mes produits sur la page d'accueil, en utilisant le module Home Featured.

 

Dans la version 1.6, homefeatured.tpl inclus product-list.tpl.

Dans product-list.tpl, vers la ligne 117, ce code affiche la liste des couleurs des déclinaisons :

{if isset($product.color_list)}
   <div class="color-list-container">{$product.color_list}</div>
{/if}

Or, dans le cas du module homefeatured, $product.color_list n'existe pas... et donc n'affiche pas les couleurs des déclinaisons.

 

J'ai donc essayé d'appeler la fonction suivante de FrontController.php (l.1271) :

public function addColorsToProductList(&$products)

Dans modules/homefeatured/homefeatured.php :

public function _cacheProducts()
	{
		if (!isset(HomeFeatured::$cache_products))
		{
			$category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id);
			$nb = (int)Configuration::get('HOME_FEATURED_NBR');
			if (Configuration::get('HOME_FEATURED_RANDOMIZE'))
				HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8));
			else
				HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position');
			        FrontControllerCore::addColorsToProductList(HomeFeatured::$cache_products);
		}

		if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products))
			return false;
	}

Mais la ligne que j'ai ajouté :

FrontControllerCore::addColorsToProductList(HomeFeatured::$cache_products);

Me donne cette erreur :


Strict Standards: Non-static method FrontControllerCore::addColorsToProductList() should not be called statically, assuming $this from incompatible context in /modules/homefeatured/homefeatured.php on line 131

Fatal error: Call to undefined method HomeFeatured::getColorsListCacheId() in /classes/controller/FrontController.php on line 1278

J'ai essayé de différentes façon d'appeler cette fonction mais je n'y arrive pas sans avoir une erreur...

 

Quelqu'un a-t-il une idée ?

D'avance merci.

 

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

J'aimerais aussi afficher les couleurs des déclinaisons de mes produits sur la page d'accueil.

As tu trouvé une solution ?

Merci d'avance

 

Salut, non je n'ai pas de solution pour le moment... malheureusement   :(

Link to comment
Share on other sites

Bonjour,

 

Pour appeler la méthode addColorsToProductList(), qui n'est pas statique, vous avez besoin d'un instance de FrontController. Mais ça tombe bien, les modules en référencent une.

 

Modifiez modules/homefeatured/homefeatured.php plutôt comme ça:

public function _cacheProducts()
{
if (!isset(HomeFeatured::$cache_products))
{
$category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id);
$nb = (int)Configuration::get('HOME_FEATURED_NBR');
if (Configuration::get('HOME_FEATURED_RANDOMIZE'))
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8));
else
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position');
$this->context->controller->addColorsToProductList(HomeFeatured::$cache_products);
}


if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products))
return false;
}

et le tour est joué.

 

En complément, vous pouvez obtenir la même chose pour les Nouveautés et les Promotions en modifiant respectivement

  • modules/blocknewproducts/blocknewproducts.php:
private function getNewProducts()
{
if (!Configuration::get('NEW_PRODUCTS_NBR'))
return;
$newProducts = false;
if (Configuration::get('PS_NB_DAYS_NEW_PRODUCT'))
{
$newProducts = Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'));
$this->context->controller->addColorsToProductList($newProducts);
}


if (!$newProducts && Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY'))
return;


return $newProducts;
}
  • modules/blockspecials/blockspecials.php:
public function hookDisplayHomeTab($params)
{
if (Configuration::get('PS_CATALOG_MODE'))
return;


if (!$this->isCached('tab.tpl', $this->getCacheId('blockspecials-tab')))
{
BlockSpecials::$cache_specials = Product::getPricesDrop((int)$params['cookie']->id_lang, 0, Configuration::get('BLOCKSPECIALS_SPECIALS_NBR'));
$this->context->controller->addColorsToProductList(BlockSpecials::$cache_specials);
}


if (BlockSpecials::$cache_specials === false)
return false;


return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('blockspecials-tab'));
}

Attention, pour que ces 2 modifs soient effectives, il faut effacer (ou désactiver) le cache smarty.

 

Cordialement

Edited by erouvier29 (see edit history)
  • Like 5
Link to comment
Share on other sites

  • 4 weeks later...
  • 5 months later...

Bonjour,

 

Je voudrai avoir vos aides car je bloque sur un probleme pareil. J'utilise le module CsHomefeatured qui va par defaut avec le theme que j'ai installé.

 

Dans le fichier cshomefeautured.php du module j'ai le code suivant, j'ai ajouté la ligne où il y a commenté /*added*/

Quand je regarde dans mon  firebug, j'ai bien un "$product.color_list", quand j'affiche cette variable, on m'affiche "1" c'est surement une variable booleen je pense.

Mais je n'ai toujours pas la liste des couleurs, je pense que le fichier product-list-color.tpl n'est même pas appelé.

public function hookDisplayHome()
    {
        if (!$this->isCached($this->name.'.tpl', $this->getCacheId()))
        {
            $id_lang = $this->context->language->id;
            $products = $this->callGetProductList();
            if (!isset($this->config->title_block->$id_lang) || $this->config->title_block->$id_lang == '')
                $id_lang = Configuration::get('PS_LANG_DEFAULT');
            if (!isset(CsHomeFeatured::$cache_filter_products))
                CsHomeFeatured::$cache_filter_products = $products;
                $this->context->controller->addColorsToProductList(CsHomeFeatured::$cache_filter_products); /* added */
            if ($this->config->display_big_product == 1 && !empty($this->product_list))
            {
                $w_big_product = $this->size_big_product;
                $array_id_product = explode('-', $this->config->input_product_list);
                $big_product = $this->getBigProduct($id_lang, $array_id_product, 1);
                $this->context->smarty->assign(array(
                    'cs_big_product'.$this->name => reset($big_product)
                ));
            }
            else
                $w_big_product = 0;
            
            $this->context->smarty->assign(array(
                'cs_products' => $products,
                'cs_config' => $this->config,
                'cs_title' => (isset($this->config->title_block->$id_lang) ? $this->config->title_block->$id_lang : $this->config->title_block),
                'w_big_product' => $w_big_product,
                'cs_id' => $this->name
            ));
        }
        if (CsHomeFeatured::$cache_filter_products === false)
            return false;
        return $this->display(__FILE__, $this->name.'.tpl', $this->getCacheId());
    }

Merci d'avance pour vos aides.

Edited by Pyssou (see edit history)
Link to comment
Share on other sites

  • 2 years later...
On 2015/3/31 at 8:19 AM, erouvier29 said:

Bonjour,

 

Pour appeler la méthode addColorsToProductList(), qui n'est pas statique, vous avez besoin d'un instance de FrontController. Mais ça tombe bien, les modules en référencent une.

 

Modifiez modules/homefeatured/homefeatured.php plutôt comme ça:


public function _cacheProducts()
{
if (!isset(HomeFeatured::$cache_products))
{
$category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id);
$nb = (int)Configuration::get('HOME_FEATURED_NBR');
if (Configuration::get('HOME_FEATURED_RANDOMIZE'))
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8));
else
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position');
$this->context->controller->addColorsToProductList(HomeFeatured::$cache_products);
}


if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products))
return false;
}

et le tour est joué.

 

En complément, vous pouvez obtenir la même chose pour les Nouveautés et les Promotions en modifiant respectivement

  • modules/blocknewproducts/blocknewproducts.php:

private function getNewProducts()
{
if (!Configuration::get('NEW_PRODUCTS_NBR'))
return;
$newProducts = false;
if (Configuration::get('PS_NB_DAYS_NEW_PRODUCT'))
{
$newProducts = Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'));
$this->context->controller->addColorsToProductList($newProducts);
}


if (!$newProducts && Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY'))
return;


return $newProducts;
}
  • modules/blockspecials/blockspecials.php:

public function hookDisplayHomeTab($params)
{
if (Configuration::get('PS_CATALOG_MODE'))
return;


if (!$this->isCached('tab.tpl', $this->getCacheId('blockspecials-tab')))
{
BlockSpecials::$cache_specials = Product::getPricesDrop((int)$params['cookie']->id_lang, 0, Configuration::get('BLOCKSPECIALS_SPECIALS_NBR'));
$this->context->controller->addColorsToProductList(BlockSpecials::$cache_specials);
}


if (BlockSpecials::$cache_specials === false)
return false;


return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('blockspecials-tab'));
}

Attention, pour que ces 2 modifs soient effectives, il faut effacer (ou désactiver) le cache smarty.

 

Cordialement

 

Bonjour,

J'ai site sous prestashop, et j'ai trouvé votre poste vraiment génial, comme j'ai un très faible niveau en prog, j'ai souvent des soucis sur la maintenance. Et en voilà une question que j'aimerais vous poser.

J'ai suivi votre tuto, l'affichage marche très bien, je vous suis très reconnaissant. J'ai juste un petit problème:

Les affichages des attributs disparaissent petit à petit que sur la homepage ou dans la liste des produits catégorie/recherche/marque, quand je vide le cache, ça revient.

Alors ma question est: Est-ce qu'il y a un moyen d'éviter cette disparaition progressive d'affichage d'attributs suite à ce type de modification?

Je vous remercie d'avance pour votre aide.

Franck

https://www.francketlys.com

Edited by francketlys (see edit history)
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...