获取 Prestashop 中产品功能的 URL

Get the URLof a product feature in Prestashop

Prestashop 允许为产品功能创建 CMS 页面。至少,他们在 CMS 创建中提供了一个字段,上面写着 URL。我想在我的产品页面中检索 URL 并使用从 CMS 扩展的不同控制器将其插入那里。 如果完全可以检索产品功能的实际URL,这应该是一件容易的事,但似乎这是一项不可能完成的任务。 当您使用:

$this->product->getFrontFeatures($this->context->language->id);

在您的产品控制器中,您会得到一组如下所示的功能:

Array
(
    [name] => Material
    [value] => Polartec Classic 200.
    [id_feature] => 68
)

URL 值没有在任何地方列出,这当然使任务变得非常困难。除非我做错了什么,否则我应该使用不同的函数来获取特征值。有人能告诉我应该对 Prestashop 做哪些修改才能获得我需要的价值吗?我希望我的阵列看起来像这样:

Array
(
    [name] => Material
    [value] => Polartec Classic 200.
    [id_feature] => 68
    [URL] => polartec-classic-200
)

功能没有return功能的分层导航url。 为了在那个数组中有这个,你需要做一个覆盖:

在 override/classes/ 中创建文件 Product.php,内容如下:

<?php
class Product extends ProductCore
{
    public static function getFrontFeaturesStatic($id_lang, $id_product)
    {
        if (!Feature::isFeatureActive())
            return array();
        if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache))
        {
            self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                SELECT name, value, pf.id_feature, liflv.url_name AS url
                FROM '._DB_PREFIX_.'feature_product pf
                LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_lang_value liflv ON (f.id_feature = liflv.id_feature AND liflv.id_lang = '.(int)$id_lang.')
                '.Shop::addSqlAssociation('feature', 'f').'
                WHERE pf.id_product = '.(int)$id_product.'
                ORDER BY f.position ASC'
            );
        }
        return self::$_frontFeaturesCache[$id_product.'-'.$id_lang];
    }
}

并且不要忘记删除 cache/class_index。php 以清除覆盖缓存。

注#1:该解决方案基于 PrestaShop 1.6.0.14 中的 getFrontFeaturesStatic() 方法 注意#2:数组索引是 'url' 小写(不是 URL 大写) - 最佳实践