Jump to content

Welcome, Guest!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

  • 0
Quant

Colors are not displayed on the categories page

Question

There is a bug with displaying colors on the categories page when SmartyCache is enabled.
It is not fixed in TB and PS (1.6.x).
Here is an example of how to fix it.

    public function addColorsToProductList(&$products)
    {
        if (!is_array($products) || !count($products) || !file_exists(_PS_THEME_DIR_.'product-list-colors.tpl')) {
            return;
        }

        $productsNeedCache = [];
        foreach ($products as &$product) {
            if (!$this->isCached(_PS_THEME_DIR_.'product-list-colors.tpl', $this->getColorsListCacheId($product['id_product']))) {
                $productsNeedCache[] = (int) $product['id_product'];
            } else {
                $product['color_list'] = $this->context->smarty->fetch(_PS_THEME_DIR_.'product-list-colors.tpl', $this->getColorsListCacheId($product['id_product']));
            }
        }

        unset($product);

        $colors = false;
        if (count($productsNeedCache)) {
            $colors = Product::getAttributesColorList($productsNeedCache);
        } else {
            return;
        }

        Tools::enableCache();
        foreach ($products as &$product) {
            if (isset($colors[$product['id_product']])) {
                $tpl = $this->context->smarty->createTemplate(_PS_THEME_DIR_.'product-list-colors.tpl', $this->getColorsListCacheId($product['id_product']));
                $tpl->assign(
                    [
                        'id_product'  => $product['id_product'],
                        'colors_list' => $colors[$product['id_product']],
                        'link'        => $this->context->link,
                        'img_col_dir' => _THEME_COL_DIR_,
                        'col_img_dir' => _PS_COL_IMG_DIR_,
                    ]
                );
                $product['color_list'] = $tpl->fetch(_PS_THEME_DIR_.'product-list-colors.tpl', $this->getColorsListCacheId($product['id_product']));
            } 
            if (in_array($product['id_product'], $productsNeedCache) && !isset($colors[$product['id_product']])) {
                $product['color_list'] = '';
            }
        }
        Tools::restoreCacheSettings();
    }

 

  • Like 1

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Thanks for bug report and proposed fix. I was able to reproduce the caching problem, and the fix indeed works correctly

Share this post


Link to post
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...