【问题标题】:Add all my EAV attributes to a product将我的所有 EAV 属性添加到产品中
【发布时间】:2013-04-05 01:35:56
【问题描述】:

所以我将通过 Alan Storm 的 Magento 教程并完成有关 EAV 属性的此页面。 http://alanstorm.com/magento_advanced_orm_entity_attribute_value_part_1

它运行完美,但我有几个问题。我有一个 XML 提要,我正在尝试从数据库中读取产品并将其存储在数据库中。虽然这有效,并且它们被添加到创建的新表中,但当我在管理 - > 产品下查看管理时,没有列出任何产品。

当我转到目录时,我还在管理员中注意到-->管理属性,我没有看到所有新的 EAV 属性。根据他的解释,并查看新的数据库表,我看到了实际产品数据和属性元数据的存储位置;在我新创建的表格中。

但我想:

  1. 在管理员的管理产品中查看我保存到数据库中的所有这些新产品
  2. 确保我添加的新 EAV(基于 XML 字段名称)在放置在主管理产品视图中时与这些项目相关联

我完全按照他的代码,只是根据我的实验更改了名称:

foreach ($xml as $c) {
        $car = Mage::getModel('vehicleimport/eavvehicle');
        ...
        ...
        ...
        $car->save();
}

【问题讨论】:

    标签: magento magento-1.7


    【解决方案1】:

    如果想使用 Magento 产品管理器,那么您应该坚持使用 Magento 核心功能。 Catalog > Manage Products 中没有产品,因为您没有使用 Mage_Catalog 模块及其实体来存储这些产品。

    相反,您使用的是自定义模块。这不是存储目录的正确方法。

    您似乎想在您的产品上使用一些自定义属性。这很好而且正确。但是您需要将它们添加到catalog_product 实体,而不是您自定义的eavvehicle

    要添加新的产品属性,请转到管理面板Catalog > Manage Attributes 并创建新属性。有一种方法可以动态创建它们。只需使用Mage_Catalog_Model_Resource_Setup 对象,例如:

    
    $catalogSetup = Mage::getResourceModel('catalog/setup','default_setup');
    $catalogSetup->addAttribute('catalog_product', 'attribute_name', array $attributeDefinition);
    

    或者您可以使用您的模块定义设置,然后在需要时使用升级脚本添加新属性。

    您还可以定义属性集来分组属性。这允许您只在产品上添加必要的属性。

    您想使用Mage::getModel('catalog/product') 添加您的产品。所以你的循环看起来像:

    
    foreach ($xml as $c) {
            $car = Mage::getModel('catalog/product');
            ...
            ...
            ...
            $car->save();
    }
    

    如果您使用多个商店视图(可能是语言版本),那么您可以为同一产品设置不同的语言值。要将它们保存到正确的商店,您需要设置正确的商店视图,例如:

    
    $car = Mage::getModel('catalog/product');
    $car->setStoreId(Mage::app()->getStore('french')->getId());
    $car->setName('French Name of the car');
    $car->save();
    

    如果您不使用多个商店视图,那么在保存之前在产品上设置 admin 商店 id 是安全的。

    在 Magento 中创建新产品的必填字段/属性:

    • attribute_set_id
    • type_id(即简单、可配置、分组等)
    • website_ids(作为数组)
    • is_active
    • 状态(不确定是否强制)
    • 可见性
    • 按要求设置的属性集中分组的所有属性(即 sku、名称、价格、tax_class_id 等)

    【讨论】:

    • 非常感谢您。 Magento 慢慢开始变得有意义。我从学习他们的布局系统开始,现在尝试处理产品数据以及如何显示它们。这个周末我会试一试。
    • 嘿,我在尝试保存时收到关于无效外键限制的错误。我的所有属性都已添加。单步执行代码,在尝试向catalog_product_entity 表添加一行时它会死掉。 attribute_set_id 字段丢失。我是否需要以某种方式分配默认属性集?我见过这种方法->setAttributeSetId(4);,但是默认属性集是否有全局 ENV 类型?我猜 4 是示例中的 PK,但我不想那样硬编码。
    • 是的,attribute_set_id 在创建新产品时是强制性的。所有属性集都存储在eav_attribute_set 表中,并且可以在目录 > 属性 > 管理属性集中查看/编辑。您可以使用Mage_Eav_Model_Entity_Attribute_Set 模型按名称加载它们,例如'Mage::getModel('eav/entity_attribute_set')->load('Default', 'name');` 然后$car->setAttributeSetId($attributeSet->getId()); 我已经用其他强制性设置更新了第一篇文章。
    猜你喜欢
    • 2018-05-04
    • 2019-07-11
    • 2017-06-26
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多