更改产品的Magento page_layout属性?

时间:2012-12-20 15:34:38

标签: php database magento e-commerce

我有一个包含数千种产品的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;
    }
}

现在我已经缩小了正确的属性,我想设置它。到目前为止我没有太多运气,有这方面的经验吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您是否尝试过$ product-> setPageLayout(null); 编辑:之后是$ product-> save(),当然。

答案 1 :(得分:0)

Stock magento实例中page_layout的可能值为:

  • two_columns_left
  • two_columns_right
  • three_columns

使用'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();