0

我有一个 Magento 商店,里面有几千种产品,其中一部分的“page_layout”属性设置为“无更新”以外的属性。即使在 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;
    }
}

现在我已经缩小了正确的属性,我想设置它。到目前为止,我运气不佳,对此有什么经验吗?谢谢!

4

2 回答 2

1

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

于 2012-12-20T15:45:07.063 回答
0

股票 magento 实例中 page_layout 的可能值为:

  • 空值
  • 空的
  • two_columns_left
  • two_columns_right
  • 三列

以“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();
于 2012-12-20T20:08:29.880 回答