我在Magento中保存产品时遇到问题。
我有一个产品,并有多个商店(多个组和视图)。
说我正在为商店French
编辑产品,然后点击保存。但问题是,商店French
新保存/输入的值会复制到所有商店(English
,German
等)。
我只需要为指定的商店保存值(即使是价格值)。不是所有的商店。
如果解决方案是一种编程方式,我同意接受。
由于
新添加:
我还想了解有关保存price, cost, special price, grouped price, tier price
答案 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'));
}
}