2

创建产品时,我可以通过 API 使用以下内容:

$newProductData = array(
                'name'              => (string)$stockItem->STOCK_DESC,
                'websites'          => array(1,2), // array(1,2,3,...)
                'short_description' => (string)$stockItem->STOCK_DESC,
                'description'       => (string)$stockItem->LONG_DESC,
                'status'            => 1,
                'weight'            => $stockItem->WEIGHT,
                'tax_class_id'      => 1,
                'categories'        => array(3108),
                'price'             => $stockItem->SELL_PRICE
            );

            $my_set_id = 9;  // Use whatever set_id you want here
            $type = 'simple';

            $mc = new Mage_Catalog_Model_Product_Api();
            $mc->create($type, $my_set_id, $stockItem->STOCK_CODE, $newProductData);

当我查看$mc->create电话时,我发现它是这样做的:

foreach ($product->getTypeInstance(true)->getEditableAttributes($product) as $attribute) {
}

这表明存在可以针对对象进行编辑的属性列表。

我如何找到这些?是否有特定的位置可以找到此信息?

编辑:我刚刚做了:

Mage::log($product->getTypeInstance(true)->getEditableAttributes($product)); 

并查看了结果。似乎所有可编辑的属性都可以在下面找到,[attribute_code] =>但我仍然想要一种更好的方法来了解在哪里获取此列表。

4

1 回答 1

2

这将完全取决于您尝试编辑的产品的属性集,以及每个单独属性的配置。UI 中没有任何地方可以为您列出这些属性。您最好的选择是为您的产品运行一些自定义代码

$product = Mage::getModel('catalog/product')->load($product_id);
foreach ($product->getTypeInstance(true)->getEditableAttributes($product) as $code=>$attribute)    
{
    var_dump($code); 
}

以下是如何追踪这些信息。如果你跳转到getEditableAttributes方法

#File: app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php
public function getEditableAttributes($product = null)
{
    $cacheKey = '_cache_editable_attributes';
    if (!$this->getProduct($product)->hasData($cacheKey)) {
        $editableAttributes = array();
        foreach ($this->getSetAttributes($product) as $attributeCode => $attribute) {
            if (!is_array($attribute->getApplyTo())
                || count($attribute->getApplyTo())==0
                || in_array($this->getProduct($product)->getTypeId(), $attribute->getApplyTo())) {
                $editableAttributes[$attributeCode] = $attribute;
            }
        }
        $this->getProduct($product)->setData($cacheKey, $editableAttributes);
    }
    return $this->getProduct($product)->getData($cacheKey);
}

您可以看到此方法获取特定产品上所有属性集的列表。(即作为产品属性集成员的所有属性)。一旦有了这个列表,它就会遍历每一个并检查其apply_to属性是否与当前产品的类型 id 匹配。

应用到属性设置为

Catalog -> Attributes -> Manage Attributes -> [Pick Attribute]

在此处输入图像描述

此表单域更新数据库表catalog_eav_attribute。如果您运行以下查询,您可以看到存储的此值的示例

select attribute_id, apply_to from catalog_eav_attribute where apply_to is NOT NULL;
75  simple,configurable,virtual,bundle,downloadable
76  simple,configurable,virtual,bundle,downloadable
77  simple,configurable,virtual,bundle,downloadable
78  simple,configurable,virtual,bundle,downloadable
79  virtual,downloadable    

因此,获取您产品的属性集。获取该集合中的属性列表。比较属性apply_to字段的值与产品的值type_id。这将让您构建这些属性的列表。

于 2013-02-21T17:25:22.173 回答