Agnes Tom Agnes Tom - 3 months ago 36
PHP Question

PrestaShop homefeatured attribute color list

Prestashop v1.6.1.6, Homefeatured module v1.8.1

Prestashop on homepage in homefeatured module in standard didn't display attribute color like in category page, in product-list.tpl it is this smarty code:

{$product.color_list}
When I dump it on home page it give me NULL. I start search in controllers to find it and in FrontController.php I was find this:

if (!in_array($product['id_product'], $products_need_cache) || isset($colors[$product['id_product']])) {
$product['color_list'] = $tpl->fetch(_PS_THEME_DIR_.'product-list-colors.tpl', $this->getColorsListCacheId($product['id_product']));
} else {
$product['color_list'] = '';
}


I think this is what I need but I am not sure how I can put it to homefeatured.php

This is code in homefeatured:

class HomeFeatured extends Module {
protected static $cache_products;

public function __construct()
{
$this->name = 'homefeatured';
$this->tab = 'front_office_features';
$this->version = '1.8.1';
$this->author = 'PrestaShop';
$this->need_instance = 0;

$this->bootstrap = true;
parent::__construct();

$this->displayName = $this->l('Featured products on the homepage');
$this->description = $this->l('Displays featured products in the central column of your homepage.');
$this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.6.99.99');
}

public function install()
{
$this->_clearCache('*');
Configuration::updateValue('HOME_FEATURED_NBR', 8);
Configuration::updateValue('HOME_FEATURED_CAT', (int)Context::getContext()->shop->getCategory());
Configuration::updateValue('HOME_FEATURED_RANDOMIZE', false);

if (!parent::install()
|| !$this->registerHook('header')
|| !$this->registerHook('addproduct')
|| !$this->registerHook('updateproduct')
|| !$this->registerHook('deleteproduct')
|| !$this->registerHook('categoryUpdate')
|| !$this->registerHook('displayHomeTab')
|| !$this->registerHook('displayHomeTabContent')
)
return false;

return true;
}

public function uninstall()
{
$this->_clearCache('*');

return parent::uninstall();
}

public function getContent()
{
$output = '';
$errors = array();
if (Tools::isSubmit('submitHomeFeatured'))
{
$nbr = Tools::getValue('HOME_FEATURED_NBR');
if (!Validate::isInt($nbr) || $nbr <= 0)
$errors[] = $this->l('The number of products is invalid. Please enter a positive number.');

$cat = Tools::getValue('HOME_FEATURED_CAT');
if (!Validate::isInt($cat) || $cat <= 0)
$errors[] = $this->l('The category ID is invalid. Please choose an existing category ID.');

$rand = Tools::getValue('HOME_FEATURED_RANDOMIZE');
if (!Validate::isBool($rand))
$errors[] = $this->l('Invalid value for the "randomize" flag.');
if (isset($errors) && count($errors))
$output = $this->displayError(implode('<br />', $errors));
else
{
Configuration::updateValue('HOME_FEATURED_NBR', (int)$nbr);
Configuration::updateValue('HOME_FEATURED_CAT', (int)$cat);
Configuration::updateValue('HOME_FEATURED_RANDOMIZE', (bool)$rand);
Tools::clearCache(Context::getContext()->smarty, $this->getTemplatePath('homefeatured.tpl'));
$output = $this->displayConfirmation($this->l('Your settings have been updated.'));
}
}

return $output.$this->renderForm();
}

public function hookDisplayHeader($params)
{
$this->hookHeader($params);
}

public function hookHeader($params)
{
if (isset($this->context->controller->php_self) && $this->context->controller->php_self == 'index')
$this->context->controller->addCSS(_THEME_CSS_DIR_.'product_list.css');
$this->context->controller->addCSS(($this->_path).'css/homefeatured.css', 'all');
}

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');
}

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

public function hookDisplayHomeTab($params)
{
if (!$this->isCached('tab.tpl', $this->getCacheId('homefeatured-tab')))
$this->_cacheProducts();

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

public function hookDisplayHome($params)
{
if (!$this->isCached('homefeatured.tpl', $this->getCacheId()))
{
$this->_cacheProducts();
$this->smarty->assign(
array(
'products' => HomeFeatured::$cache_products,
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'homeSize' => Image::getSize(ImageType::getFormatedName('home')),
)
);
}

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

public function hookDisplayHomeTabContent($params)
{
return $this->hookDisplayHome($params);
}

public function hookAddProduct($params)
{
$this->_clearCache('*');
}

public function hookUpdateProduct($params)
{
$this->_clearCache('*');
}

public function hookDeleteProduct($params)
{
$this->_clearCache('*');
}

public function hookCategoryUpdate($params)
{
$this->_clearCache('*');
}

public function _clearCache($template, $cache_id = NULL, $compile_id = NULL)
{
parent::_clearCache('homefeatured.tpl');
parent::_clearCache('tab.tpl', 'homefeatured-tab');
}

public function renderForm()
{
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs'
),
'description' => $this->l('To add products to your homepage, simply add them to the corresponding product category (default: "Home").'),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Number of products to be displayed'),
'name' => 'HOME_FEATURED_NBR',
'class' => 'fixed-width-xs',
'desc' => $this->l('Set the number of products that you would like to display on homepage (default: 8).'),
),
array(
'type' => 'text',
'label' => $this->l('Category from which to pick products to be displayed'),
'name' => 'HOME_FEATURED_CAT',
'class' => 'fixed-width-xs',
'desc' => $this->l('Choose the category ID of the products that you would like to display on homepage (default: 2 for "Home").'),
),
array(
'type' => 'switch',
'label' => $this->l('Randomly display featured products'),
'name' => 'HOME_FEATURED_RANDOMIZE',
'class' => 'fixed-width-xs',
'desc' => $this->l('Enable if you wish the products to be displayed randomly (default: no).'),
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
),
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);

$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->id = (int)Tools::getValue('id_carrier');
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitHomeFeatured';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id
);

return $helper->generateForm(array($fields_form));
}

public function getConfigFieldsValues()
{
return array(
'HOME_FEATURED_NBR' => Tools::getValue('HOME_FEATURED_NBR', (int)Configuration::get('HOME_FEATURED_NBR')),
'HOME_FEATURED_CAT' => Tools::getValue('HOME_FEATURED_CAT', (int)Configuration::get('HOME_FEATURED_CAT')),
'HOME_FEATURED_RANDOMIZE' => Tools::getValue('HOME_FEATURED_RANDOMIZE', (bool)Configuration::get('HOME_FEATURED_RANDOMIZE')),
);
}


}

Answer

Only add this in this part

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');
    }
// PRODUCT COLOR LIST ADDON
    $this->context->controller->addColorsToProductList(HomeFeatured::$cache_products);

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