Model 更新prestashop中产品的替代模型
我的产品模型覆盖有一个循环问题。我试图实现这个解决方案。以下是模型(带有额外的测试功能): 当我使用$product->save()方法时,数据是从数据库中插入和检索的,但它也在Model 更新prestashop中产品的替代模型,model,prestashop,product,prestashop-1.6,Model,Prestashop,Product,Prestashop 1.6,我的产品模型覆盖有一个循环问题。我试图实现这个解决方案。以下是模型(带有额外的测试功能): 当我使用$product->save()方法时,数据是从数据库中插入和检索的,但它也在hookActionProductUpdate()上创建了一个无限循环 但是,如果我使用自己的函数$product->setDesign(),一切都很好。 所以很明显我错过了一些东西。但是我在上面呆了两天都没看到 因为$product->save()触发hookactionProductUpdate所以hookActio
hookActionProductUpdate()上创建了一个无限循环
但是,如果我使用自己的函数$product->setDesign(),一切都很好。
所以很明显我错过了一些东西。但是我在上面呆了两天都没看到 因为$product->save()
触发hookactionProductUpdate
所以hookActionProductUpdate()
保持循环。所以,这很有意义!谢谢但你有什么建议来正确地做这件事呢?我加上这个作为参考:你到底想做什么?在product backoffice中添加额外字段?您的覆盖是正确的,在hook方法中,您通过调用$product->setDesign()
实现了正确的覆盖。取消对它的注释并删除它上面的行及其精细部分。因为$product->save()
触发hookactionProductUpdate
所以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'));
}