dongwu5801 2016-09-05 15:24
浏览 44
已采纳

PrestaShop homefeatured属性颜色列表

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

}

  • 写回答

1条回答 默认 最新

  • du42561 2016-09-05 17:55
    关注

    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度