获取Prestashop中产品功能的URL

时间:2015-07-01 22:18:09

标签: php controller prestashop

Prestashop允许为产品功能创建CMS页面。至少,他们在CMS创建中提供了一个表示URL的字段。我想在我的产品页面中检索该URL,并使用从CMS扩展的不同控制器将其插入其中。 如果可以检索产品功能的actualURL,这应该是一项简单的任务,但似乎这是一项不可能完成的任务。 当你使用:

$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
)

1 个答案:

答案 0 :(得分:1)

该功能不会返回功能的分层导航网址。 为了在该数组中具有此功能,您需要执行覆盖:

使用以下内容在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) - 最佳实践

相关问题