正确的步骤是什么-而不是删除产品,然后再次开始向现有可配置产品添加或删除属性。
创建可配置产品时,系统会要求您选择要用于该产品的属性。
我有很多产品,现在我需要删除一些最初选择的属性,有些还需要添加最初没有选择的属性。
感谢您提供任何帮助-删除产品似乎并不是解决此问题的最佳方法。尤其是与产品相关的许多其他事物。
正确的步骤是什么-而不是删除产品,然后再次开始向现有可配置产品添加或删除属性。
创建可配置产品时,系统会要求您选择要用于该产品的属性。
我有很多产品,现在我需要删除一些最初选择的属性,有些还需要添加最初没有选择的属性。
感谢您提供任何帮助-删除产品似乎并不是解决此问题的最佳方法。尤其是与产品相关的许多其他事物。
Answers:
这是适合我的工作,可用于从可配置产品中删除属性。
这是方案。
所有可配置产品的属性创建错误,brand
因为该属性是具有约200个简单关联产品的约50个可配置产品的可配置属性。
与可配置属性关联的所有简单产品均具有相同的品牌。这个想法是brand
从可配置属性中删除,并将其作为简单属性分配给具有一个简单产品之一的值的可配置产品。
这是执行此操作的代码。该代码仅运行一次。可以将其添加到升级脚本或简单的php文件中。
<?php
//==>this is required only if you use a simple php file
error_reporting(E_ALL | E_STRICT);
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app();
//<==
$brand = 'brand';
//get the attribute instance
$brandAttribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $brand);
//if this attribute exists
if ($brandAttribute->getId()){
//make the attribute apply to al types of products in case it's not
$brandAttribute->setApplyTo(null);
$brandAttribute->save();
$resource = Mage::getSingleton('core/resource');
//get an object with access to direct queries
$connection = $resource->getConnection('core_write');
//get all configurable products - you can specify additional filters here
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('type_id', 'configurable');
foreach ($collection as $product){
//the configurable attributes are stored in the table 'catalog_product_super_attribute'
//remove the attribute references from that table.
//The constraints will take care of the cleanup.
$q = "DELETE FROM {$resource->getTableName('catalog_product_super_attribute')}
WHERE attribute_id = {$brandAttribute->getId()} AND product_id = {$product->getId()}";
$connection->query($q);
//get the simple products in the configurable product
$usedProducts = $product->getTypeInstance(true)->getUsedProducts(null, $product);
foreach ($usedProducts as $p){
//identify the first simple product that has a value for brand
//set that value to the configurable product.
if ($brandValue = $p->getData($brand)){
Mage::getSingleton('catalog/product_action')
->updateAttributes(array($product->getId()), array($brand=>$brandValue), 0);
break;
}
}
}
}
对于上面列出的数字,这需要大约15秒才能在我的本地计算机(不是功能强大的计算机)上运行。我确信可以对此进行优化。很有可能没有必要获得可配置产品的所有简单产品来获得brand
价值,但是我没有打扰。
catalog_product_super_attribute
中将起作用?否则我需要修改其他表?就像在stackoverflow.com/a/13381381/1749007
这需要直接编辑数据库,而Magento的第一个定律是不直接编辑数据库。
但是,如果您疯狂到足以继续进行,几个月前的StackOverflow上已经介绍了这一点:
ucts。我已经在CE 1.6.2上测试了以下数据库变通方法黑客,它似乎正在起作用:
- 创建属性
- 将其拖动到适当的属性集
- 转到数据库编辑器或phpmyadmin,表'catalog_eav_attribute'并查看最后一个,记下'attribute id',还记下产品ID->转到catalog_product_entity并查找所需的可配置产品,并记下entity_id->此是product_id
- 转到catalog_product_super_attribute并插入带有product_id和attribute_id的新记录,注意product_super_attribute_id
- 转到catalog_product_super_attribute_label并插入带有product_super_attribute_id和新属性值的新记录,例如在管理中添加该属性时使用的“颜色”或“大小”
- 返回到admin并单击可配置产品,您将注意到没有任何子产品与可配置产品相关联。
- 单击其中一个子产品,然后选择适当的属性值,也可以更改sku。
- 导出所有子产品,然后向其添加新的属性和sku值,然后将其重新导入,就可以完成了,或者您可能必须在管理员中手动更改所有内容而不使用数据流。
图片来源:https://stackoverflow.com/questions/5658197/add-new-attribute-to-existing-configurable-product-magento
未经测试-YMMV。
要从所有可配置产品中删除一个超级产品属性(称为),您可以在数据库中执行以下SQL查询:
DELETE FROM catalog_product_super_attribute
WHERE attribute_id = <id>;
在这里,是存储在eav_attribute表中关于attribute_code的属性的id。表catalog_product_super_attribute将产品链接到超级产品属性。您可以在其中添加和删除属性以创建可配置产品。
DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
有一个肮脏的技巧来打开可配置产品,然后选择重复项,选择旧属性和新属性,在没有SKU的情况下进行重复,然后删除原始可配置产品和简单产品。之后,您可以给相同的SKU复制。然后,您只需要制造新的简单产品即可。
如果没有那么多简单的产品,这是一种快速的解决方法。
我需要从“可配置产品”的“可配置”属性之一中删除一个属性。
上面有关catalog_product_super_attribute的引用是正确的。使用Navicat数据库工具,我依次进行了一些操作。
为了测试更改了Attribute_Id,将其更改为其他产品中正在使用的另一个字段。(确认这是有争议的记录)。为防万一,写下了完整的记录数据集(product_super_attribute_id,product_id,attribute_id,位置)
最后一起删除记录。
做到了。我还记下了我假设需要再次执行此操作的注意事项。
再次:删除“ catalog_product_super_attribute”中的记录解决了我的问题,该问题似乎与上述其他问题有关。
额外信息:要将“ attribute_id”与正确的命名列表相关联,请务必注意:catalog_super_attribute_label->并通过product_super_attribute_id进行关联。
我一直在寻找一个相关的“ attribute_id”字段(尚未找到)。
“ product_super_attribute_id”起到了告诉您“ attribute_id”实际上是什么的作用。(我仍然想找到“ attribute_id”的“默认”数据集,以了解如何在数据库中首先定义属性)。