【问题标题】:Prestahsop : Get Manufacturers Meta Keyword on Manufacturers ListPrestashop : 在制造商列表中获取制造商元关键字
【发布时间】:2017-05-16 07:50:44
【问题描述】:

我正在维护一个网上商店,其中制造商元关键字已用于在列表页面上订购制造商:制造商根据其元关键字显示在页面的不同部分。

最近页面坏了,所有厂商都显示在页面的同一部分。

对此进行调查,似乎 Prestashop 在加载制造商时不再加载 meta_keywords(客户端最近更新到 1.6.11)。这是有道理的,因为 meta_keywords 大多已过时且很少使用 - 但无论如何我都需要它们才能正确显示此页面。

我是否仍然要加载和使用 ManufacturerList.tpl 上的 meta_keywords ?

【问题讨论】:

    标签: prestashop prestashop-1.6 templating


    【解决方案1】:

    如果您确实需要获取 meta_keywords,则不会在函数 getManufacturers 中选择它们。从manufacturer_lang中只选择description和short_description。

    您可以更改该文件(不推荐,因为将来的更新可能会覆盖它),或者在 overrides/classes/Manufacturer.php 中创建一个覆盖文件 与:

    class Manufacturer extends ManufacturerCore
    {
        public static function getManufacturers($get_nb_products = false, $id_lang = 0, $active = true, $p = false, $n = false, $all_group = false, $group_by = false)
        {
            if (!$id_lang) {
                $id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
            }
            if (!Group::isFeatureActive()) {
                $all_group = true;
            }
    
            $manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
            SELECT m.*, ml.`description`, ml.`short_description`, ml.`meta_keywords`, ml.`meta_description`
            FROM `'._DB_PREFIX_.'manufacturer` m
            '.Shop::addSqlAssociation('manufacturer', 'm').'
            INNER JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = '.(int)$id_lang.')
            '.($active ? 'WHERE m.`active` = 1' : '')
            .($group_by ? ' GROUP BY m.`id_manufacturer`' : '').'
            ORDER BY m.`name` ASC
            '.($p ? ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n : ''));
            if ($manufacturers === false) {
                return false;
            }
    
            if ($get_nb_products) {
                $sql_groups = '';
                if (!$all_group) {
                    $groups = FrontController::getCurrentCustomerGroups();
                    $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
                }
    
                $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                        SELECT  p.`id_manufacturer`, COUNT(DISTINCT p.`id_product`) as nb_products
                        FROM `'._DB_PREFIX_.'product` p USE INDEX (product_manufacturer)
                        '.Shop::addSqlAssociation('product', 'p').'
                        LEFT JOIN `'._DB_PREFIX_.'manufacturer` as m ON (m.`id_manufacturer`= p.`id_manufacturer`)
                        WHERE p.`id_manufacturer` != 0 AND product_shop.`visibility` NOT IN ("none")
                        '.($active ? ' AND product_shop.`active` = 1 ' : '').'
                        '.(Group::isFeatureActive() && $all_group ? '' : ' AND EXISTS (
                            SELECT 1
                            FROM `'._DB_PREFIX_.'category_group` cg
                            LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
                            WHERE p.`id_product` = cp.`id_product` AND cg.`id_group` '.$sql_groups.'
                        )').'
                        GROUP BY p.`id_manufacturer`'
                    );
    
                $counts = array();
                foreach ($results as $result) {
                    $counts[(int)$result['id_manufacturer']] = (int)$result['nb_products'];
                }
    
                if (count($counts)) {
                    foreach ($manufacturers as $key => $manufacturer) {
                        if (array_key_exists((int)$manufacturer['id_manufacturer'], $counts)) {
                            $manufacturers[$key]['nb_products'] = $counts[(int)$manufacturer['id_manufacturer']];
                        } else {
                            $manufacturers[$key]['nb_products'] = 0;
                        }
                    }
                }
            }
    
            $total_manufacturers = count($manufacturers);
            $rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS');
            for ($i = 0; $i < $total_manufacturers; $i++) {
                $manufacturers[$i]['link_rewrite'] = ($rewrite_settings ? Tools::link_rewrite($manufacturers[$i]['name']) : 0);
            }
            return $manufacturers;
        }
    }
    

    然后删除要重新创建的文件 cache/class_index.php 并使用该文件中的覆盖重新创建它应该具有您需要的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      相关资源
      最近更新 更多