我安装了Magento 1.5.0.1,包含3个不同的商店视图。在某些方面,两个商店不使用产品属性的默认值。我试图找到一种方法使所有产品都使用所有商店的默认值,这样客户只需要在一个地方更新东西。我找到了this文章,但它似乎只适用于特别调用的产品。任何人都可以解释如何在我的情况下使用该代码?或建议新代码?
答案 0 :(得分:7)
我能让这个工作的唯一方法是通过MySQL:
DELETE FROM `catalog_product_entity_text` where store_id != 0;
DELETE FROM `catalog_product_entity_datetime` where store_id != 0;
DELETE FROM `catalog_product_entity_decimal` where store_id != 0;
DELETE FROM `catalog_product_entity_int` where store_id != 0;
DELETE FROM `catalog_product_entity_varchar` where store_id != 0;
以上将重置所有产品以使用所有属性的默认值。
答案 1 :(得分:0)
您应该使用Mage :: getSingleton('catalog / product_action')连续更新大量产品。
1°)获取所需产品的ID,以供所有产品使用:
$ids = Mage::getModel('catalog/product')->getCollection()->getAllIds();
2°)制作属性列表并将值“false”
关联$attributes = array('name'=>false,'description'=>false,....)
3°)拿起要更改的商店ID列表,并将其设置为数组:
$stores = array(1,2,3);
然后创建你的脚本:
foreach ($stores as $store_id)
{
Mage::getSingleton('catalog/product_action')->updateAttributes($ids, $attributes, $store_id);
}
它将更新所有产品(ID),以便在store_id中将属性设置为默认值(由于“false”值)。
答案 2 :(得分:0)
这将获取已在任何商店中设置的值,并将这些值合并为所有产品的默认值:
<?php
$cat = mysql_connect("host", "user", "password") or die(mysql_error());
mysql_select_db("database",$cat) or die(mysql_error());
$types = array(
'catalog_product_entity_text',
'catalog_product_entity_datetime',
'catalog_product_entity_decimal',
'catalog_product_entity_int',
'catalog_product_entity_varchar'
);
foreach($types as $type){
$result = mysql_query("select * from $type where store_id != 0",$cat) or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
if(!is_null($row['value'])){
mysql_query("update $type set value = '".mysql_real_escape_string(stripslashes($row['value']))."'
where store_id = '0'
and entity_id = '".$row['entity_id']."'
and attribute_id = '".$row['attribute_id']."'",$cat) or die(mysql_error());
}
mysql_query("delete from $type where value_id = '".$row['value_id']."'",$cat) or die(mysql_error());
}
}
?>