Prestashop产品更新挂钩不会更新钩子函数中的产品属性

时间:2016-02-10 14:26:07

标签: prestashop prestashop-1.6

我正在使用overflow:hidden;。我正在更新所有数据但不是属性。

这是钩子函数内的代码:

hookActionProductUpdate

其他所有内容都已更新,但我获得的前端功能是较旧的功能。任何IDEA?

编辑:我也试过了,这是我的新功能:

public function hookActionProductUpdate($params) {
     $prestaObject = new ProductCore($params['id_product'], false, Context::getContext()->language->id);
     $arrrs = $prestaObject->getFrontFeatures(1); 
}

2 个答案:

答案 0 :(得分:0)

您无需实例化新对象。产品对象应该已包含在$params['product']

以下是此Hook被称为的产品类的update()方法:

public function update($null_values = false)
{
    $return = parent::update($null_values);
    $this->setGroupReduction();

    // Sync stock Reference, EAN13 and UPC
    if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && StockAvailable::dependsOnStock($this->id, Context::getContext()->shop->id)) {
        Db::getInstance()->update('stock', array(
            'reference' => pSQL($this->reference),
            'ean13'     => pSQL($this->ean13),
            'upc'        => pSQL($this->upc),
        ), 'id_product = '.(int)$this->id.' AND id_product_attribute = 0');
    }

    Hook::exec('actionProductSave', array('id_product' => (int)$this->id, 'product' => $this));
    Hook::exec('actionProductUpdate', array('id_product' => (int)$this->id, 'product' => $this));
    if ($this->getType() == Product::PTYPE_VIRTUAL && $this->active && !Configuration::get('PS_VIRTUAL_PROD_FEATURE_ACTIVE')) {
        Configuration::updateGlobalValue('PS_VIRTUAL_PROD_FEATURE_ACTIVE', '1');
    }

    return $return;
}

然后您应该使用此代码:

public function hookActionProductUpdate($params) {
    $product = $params['product'];
    $arrrs = $product->getFrontFeatures(1); 
}

答案 1 :(得分:0)

是的,我明白了,它是prestashop中的一个bug,它调用了钩子AdminProductsController

Hook::exec('actionProductSave', array('id_product' => (int)$this->id, 'product' => $this));
Hook::exec('actionProductUpdate', array('id_product' => (int)$this->id, 'product' => $this));

从首先调用的更新方法开始,然后执行功能更新代码。

INSIDE processupdate功能

我找到了这段代码

//this update method calls the HOOK and when this hook get executed it updates features in the database.
if ($object->update()) {
              // If the product doesn't exist in the current shop but exists in another shop
                if (Shop::getContext() == Shop::CONTEXT_SHOP && !$existing_product->isAssociatedToShop($this->context->shop->id)) {
                    $out_of_stock = StockAvailable::outOfStock($existing_product->id, $existing_product->id_shop_default);
                    $depends_on_stock = StockAvailable::dependsOnStock($existing_product->id, $existing_product->id_shop_default);
                    StockAvailable::setProductOutOfStock((int)$this->object->id, $out_of_stock, $this->context->shop->id);
                    StockAvailable::setProductDependsOnStock((int)$this->object->id, $depends_on_stock, $this->context->shop->id);
                }


                PrestaShopLogger::addLog(sprintf($this->l('%s modification', 'AdminTab', false, false), $this->className), 1, null, $this->className, (int)$this->object->id, true, (int)$this->context->employee->id);
                if (in_array($this->context->shop->getContext(), array(Shop::CONTEXT_SHOP, Shop::CONTEXT_ALL))) {
                    if ($this->isTabSubmitted('Shipping')) {
                        $this->addCarriers();
                    }
                    if ($this->isTabSubmitted('Associations')) {
                        $this->updateAccessories($object);
                    }
                    if ($this->isTabSubmitted('Suppliers')) {
                        $this->processSuppliers();
                    }
                    if ($this->isTabSubmitted('Features')) {
                        $this->processFeatures();
                    }