在magento中保存多个商店的产品的问题

时间:2013-06-18 10:41:19

标签: magento magento-1.7 product

我在Magento中保存产品时遇到问题。

我有一个产品,并有多个商店(多个组和视图)。

  • 示例网站
    • 商店组1
      • 德国
    • 商店组2
      • 孟加拉
      • 印地文

说我正在为商店French编辑产品,然后点击保存。但问题是,商店French新保存/输入的值会复制到所有商店(EnglishGerman等)。

我只需要为指定的商店保存值(即使是价格值)。不是所有的商店。

如果解决方案是一种编程方式,我同意接受。

由于

新添加:

我还想了解有关保存price, cost, special price, grouped price, tier price

的信息

3 个答案:

答案 0 :(得分:1)

保存之前

设置要保存产品的商店的storeId,同样适用于加载产品

$product->setStoreId('2')->setName('Name for Store 2')->save();

$product->setStoreId('2')->load(17)->getName()

祝你好运!

答案 1 :(得分:1)

我自己解决了price, cost, special price, grouped price, tier price保存问题。

我在Google上搜索并免费获得了一个名为Store View Pricing的扩展程序。这解决了我80%的问题。它只是给每个商店节省价格的机会。

但是,为了使其他字段(成本,特殊价格,分组价格,等级价格)的行为与价格字段/属性相同,我需要将范围(is_global:DB中的列名称)更改为{{1} }(0:设置为DB)。我在DB上运行了以下查询:

Store View

我找到了我需要的属性。并将其SELECT ea.attribute_id, ea.entity_type_id, ea.attribute_code, ea.frontend_label, cea.is_global FROM `eav_attribute` AS ea INNER JOIN `catalog_eav_attribute` AS cea ON ea.attribute_id = cea.attribute_id WHERE `attribute_code` LIKE '%price%' ORDER BY ea.`attribute_id` ASC 值更改为is_global

这样做之后,一切都正常,因为我需要。我知道这种手动过程。我正在尝试获得程序化解决方案。

答案 2 :(得分:0)

我在1.5

中遇到过这个问题

我覆盖app \ code \ core \ Mage \ Catalog \ Model \ Resource \ Eav \ Mysql4 \ Abstract.php

protected function _insertAttribute($object, $attribute, $value) {
        /**
         * save required attributes in global scope every time if store id different from default
         */
        $storeId = Mage::app()->getStore($object->getStoreId())->getId();
        if ($attribute->getIsRequired() && $this->getDefaultStoreId() != $storeId) {

                $bind = array(
                    'entity_type_id' => $attribute->getEntityTypeId(),
                    'attribute_id' => $attribute->getAttributeId(),
                    'store_id' => $this->getDefaultStoreId(),
                    'entity_id' => $object->getEntityId(),
                    'value' => $this->_prepareValueForSave($value, $attribute)
                );
                $this->_getWriteAdapter()->insertOnDuplicate($attribute->getBackend()->getTable(), $bind, array('value'));
            }

protected function _insertAttribute($object, $attribute, $value) {
        /**
         * save required attributes in global scope every time if store id different from default
         */
        $storeId = Mage::app()->getStore($object->getStoreId())->getId();
        if ($attribute->getIsRequired() && $this->getDefaultStoreId() != $storeId) {

            $table = $attribute->getBackend()->getTable();
            $select = $this->_getReadAdapter()->select()
                    ->from($table)
                    ->where('entity_type_id = ?', $attribute->getEntityTypeId())
                    ->where('attribute_id = ?', $attribute->getAttributeId())
                    ->where('store_id = ?', $this->getDefaultStoreId())
                    ->where('entity_id = ?', $object->getEntityId());
            $row = $this->_getReadAdapter()->fetchOne($select);

            if (!$row) {
                $bind = array(
                    'entity_type_id' => $attribute->getEntityTypeId(),
                    'attribute_id' => $attribute->getAttributeId(),
                    'store_id' => $this->getDefaultStoreId(),
                    'entity_id' => $object->getEntityId(),
                    'value' => $this->_prepareValueForSave($value, $attribute)
                );
                $this->_getWriteAdapter()->insertOnDuplicate($attribute->getBackend()->getTable(), $bind, array('value'));
            }
        }