为所有产品添加全局自定义字段-PrestaShop 1.6

时间:2019-02-14 22:40:47

标签: prestashop prestashop-1.6 prestashop-1.7 prestashop-1.5

我想添加自定义字段,但所有产品一个,而不是每个产品一个。 为此,我创建了override/classes/Product.php

class Product extends ProductCore{

    public $is_exclusive = null;

    function __construct( $id_product = null, $full = false, $id_lang = null, 
                             $id_shop = null, Context $context = null ) {

        Product::$definition['fields']['is_exclusive'] = 
             array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml');
    }

我可以在ps_product_lang中创建一个字段,但这将为每个产品创建一行。

我想要的是所有产品的一个领域。可以在“产品”页面中对其进行编辑。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以在ps_product表中创建它,以便仅在覆盖Product类和覆盖产品页面的BO的情况下将其显示一次。

我推荐的任何一种方法都是创建一个将嫁接到“ displayAdminProductsExtra”钩子上的模块,以便在产品的BO中具有更多字段。因此,您可以在不更改Prestashop的结构的情况下获得其他信息表。

然后您可以放置​​一个tpl以便将其显示在FO中所需的钩子上。

致谢

答案 1 :(得分:1)

如果所有产品只需要一个字段,则必须添加一个配置。

您可以覆盖Product类并将其添加到构造方法(如果此字段仅可读)

function __construct( $id_product = null, $full = false, $id_lang = null, 
                         $id_shop = null, Context $context = null ) {

    $this->is_exclusive = Configuration::get('custom_key');
}

还必须手动将自定义值添加到“配置”表


正确的方法是创建新模块。您可以在模块配置页面中管理您的配置:

Configuration::updateValue($key, $value); // save data

Configuration::get($key, $id_lang); // get data

如果您的数据与该语言相关联:

$value = [
    1 => 'value 1', // for language 1
    2 => 'value 2', // for language 2
    3 => 'value 3', // for language 3
];
Configuration::updateValue($key, $value); // save data

Configuration::get($key, 2); // get data of language 2

提示:最简单的方法是通过PrestaShop module creator创建一个新模块,然后对其进行编辑。