我有一个包含数千种产品的Magento商店,其中一部分商品的“page_layout”属性设置为“no update”以外的其他商品。即使在catalog.xml中将布局设置为1列,显示的布局也对应于“page_layout”属性中的值。
我想以编程方式一次性更改每个产品的此属性。到目前为止,我很幸运获得了这个产品的价值:
$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
$attributeCode = $attribute->getAttributeCode();
$code = 'page_layout';
if ($attributeCode == $code)
{
$label = $attribute->getStoreLabel($product);
$value = $attribute->getFrontend()->getValue($product);
echo $attributeCode . '-' . $label . '-' . $value;
}
}
现在我已经缩小了正确的属性,我想设置它。到目前为止我没有太多运气,有这方面的经验吗?谢谢!
答案 0 :(得分:1)
您是否尝试过$ product-> setPageLayout(null); 编辑:之后是$ product-> save(),当然。
答案 1 :(得分:0)
Stock magento实例中page_layout的可能值为:
使用'two_columns_left'作为示例,将此值设置为网站中的每个产品:
$pageLayout = 'two_columns_left';
$productCollection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->setDataToAll('page_layout', $pageLayout)
->save()
;
由于你有这么多产品,这很可能需要一段时间才能运行。为了加快速度,您可以更改索引模式。通过管理员或直接在您的代码中:
$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach ($processCollection as $process) {
$process->setMode(Mage_Index_Model_Process::MODE_MANUAL)
->save();
}
改回后语:
$process->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)
->save();