Model 更新prestashop中产品的替代模型

Model 更新prestashop中产品的替代模型,model,prestashop,product,prestashop-1.6,Model,Prestashop,Product,Prestashop 1.6,我的产品模型覆盖有一个循环问题。我试图实现这个解决方案。以下是模型(带有额外的测试功能): 当我使用$product->save()方法时,数据是从数据库中插入和检索的,但它也在hookActionProductUpdate()上创建了一个无限循环 但是,如果我使用自己的函数$product->setDesign(),一切都很好。 所以很明显我错过了一些东西。但是我在上面呆了两天都没看到 因为$product->save()触发hookactionProductUpdate所以hookActio

我的产品模型覆盖有一个循环问题。我试图实现这个解决方案。以下是模型(带有额外的测试功能):

当我使用$product->save()方法时,数据是从数据库中插入和检索的,但它也在
hookActionProductUpdate()上创建了一个无限循环

但是,如果我使用自己的函数$product->setDesign(),一切都很好。
所以很明显我错过了一些东西。但是我在上面呆了两天都没看到

因为
$product->save()
触发hook
actionProductUpdate
所以
hookActionProductUpdate()
保持循环。所以,这很有意义!谢谢但你有什么建议来正确地做这件事呢?我加上这个作为参考:你到底想做什么?在product backoffice中添加额外字段?您的覆盖是正确的,在hook方法中,您通过调用
$product->setDesign()
实现了正确的覆盖。取消对它的注释并删除它上面的行及其精细部分。因为
$product->save()
触发hook
actionProductUpdate
所以
hookActionProductUpdate()
保持循环。所以,这是有意义的!谢谢但你有什么建议来正确地做这件事呢?我加上这个作为参考:你到底想做什么?在product backoffice中添加额外字段?您的覆盖是正确的,在hook方法中,您通过调用
$product->setDesign()
实现了正确的覆盖。取消对其注释并删除其上方的行及其精细部分。
<?php
Class Product extends ProductCore
{
    // new field in product table
    public $design;
    public $fabric_front;
    public $fabric_back;
    public $fabric_front_border;
    public $fabric_back_border;

    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
        // adding new fields in product's model definition
        self::$definition['fields']['design'] = array(
            'type' => self::TYPE_HTML, 
            'validate' => 'isCleanHtml',
        );
        self::$definition['fields']['fabric_front'] = array(
            'type' => self::TYPE_INT,
            'validate' => 'isUnsignedInt',
        );
        self::$definition['fields']['fabric_back'] = array(
            'type' => self::TYPE_INT,
            'validate' => 'isUnsignedInt',
        );
        self::$definition['fields']['fabric_front_border'] = array(
            'type' => self::TYPE_INT,
            'validate' => 'isUnsignedInt',
        );
        self::$definition['fields']['fabric_back_border'] = array(
            'type' => self::TYPE_INT,
            'validate' => 'isUnsignedInt',
        );

        // resume normal process
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }

    public function setDesign()
    {
        $sql = 'UPDATE '._DB_PREFIX_.'product SET design="'.$this->design.'" WHERE id_product='.$this->id.';';
        if (!($update = Db::getInstance()->execute($sql)))
            return false;

        return true;
    }

}
public function hookDisplayAdminProductsExtra($params)
{
    $id_product = (int)Tools::getValue('id_product');
    if (Validate::isLoadedObject($product = new Product($id_product))) {

        if (!empty($product) && isset($product->id)) 
            $this->context->smarty->assign(array(
                'design_svg_img' => $product->design,
            ));

        return $this->display(__FILE__,'views/templates/admin/build_design.tpl');

    } else 
        return $this->displayWarning($this->l('You must save this product before adding a design.'));
}

public function hookActionProductUpdate($params)
{
    // get params from template
    $id_product = (int)Tools::getValue('id_product');
    $svg_content = Tools::getValue('design_svg_upload');

    if (Validate::isLoadedObject($product = new Product($id_product))) {

        // attribute values to model members
        $product->design = $svg_content;

        if (!$product->save())
        // if (!$product->setDesign())
            return $this->displayWarning($this->l('Impossible to update product'));

    } else
        return $this->displayWarning($this->l('Product not found'));
}