【问题标题】:How to update the values of Magento products using installer/update scripts and Magento abstractions?如何使用安装程序/更新脚本和 Magento 抽象来更新 Magento 产品的值?
【发布时间】:2011-12-15 02:22:45
【问题描述】:

我使用安装程序脚本向我的 Magento 应用程序产品实体添加了一个自定义 eav 属性(基本上,遵循此处描述的过程:Installing Custom Attributes with Your Module)。现在,我想使用更新脚本根据某些标准(基于产品类别)更改(填充)每个产品的此属性的值。我尝试使用的脚本基本上是这样的:

$attributeValues = array(...) // Map from $productId to the desired  $value
$product = Mage::getModel('catalog/product');
foreach($attributeValues as $productId=>$value){
    $product->load($productId)->setMyAttribute($value);
    $product->save();
}

然后我的问题是:可以在更新脚本中使用这种抽象级别(Mage::getModel('catalog/product') 及其方法)吗?如果不是,您建议如何使用更新脚本(无需 sql)更改这些属性值?

我使用的脚本(直到现在)没有工作并且失败并出现错误:

Call to a member function getStoreIds() on a non-object

在一个magento核心文件中。

我不知道这个错误是 Magento 错误还是我使用更新脚本的方式有问题。

我正在使用 Magento 1.4.0.1

【问题讨论】:

    标签: sql magento installation entity-attribute-value


    【解决方案1】:

    数据更新脚本是要走的路

    只需为此使用数据升级脚本。这是放置在data 文件夹而不是sql 文件夹中的脚本。这些脚本在数据库结构更新之后运行,并允许访问更多功能。

    示例文件名:

    app/code/local/My/Module/data/your_setup/data-install-0.1.0.php
    app/code/local/My/Module/data/your_setup/data-upgrade-0.1.0-0.2.0.php
    

    这个is already available in Magento 1.4

    【讨论】:

    • 您能否举例说明无法安装脚本的数据脚本还有什么可用的?
    • 查看\Mage_Core_Model_App::run,它在控制器调度之前运行applyAllDataUpdates。正常的更新脚本在加载模块之后但在初始化数据库之前在\Mage_Core_Model_App::_initModules 中运行。
    【解决方案2】:

    尝试在您的 sql 升级脚本中添加 Mage::app()->setUpdateMode(false)。例如

    $installer = new Mage_Eav_Model_Entity_Setup('core_setup');;
    $installer->startSetup();
    Mage::app()->setUpdateMode(false);
    Mage::app()->setCurrentStore('your_store_code_here');
    

    如果您查看Mage::app()->getStore(),您将看到以下 sn-p,它返回了保存产品所需的错误商店。

    if (!Mage::isInstalled() || $this->getUpdateMode()) {
            return $this->_getDefaultStore();
        }
    

    【讨论】:

    • 数据更新脚本更简单、更干净。看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多