在Prestashop中获取URLof a产品功能


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
)

函数不返回功能的分层导航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)-最佳实践