如何在类中查找可编辑属性列表 - Magento

时间:2013-02-21 16:49:41

标签: magento magento-1.7

创建产品时,我可以通过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] =>下找到,但我仍然想要一个更好的方法来知道在哪里查看这个列表。

1 个答案:

答案 0 :(得分: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]

enter image description here

此表单字段更新数据库表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的值。这将允许您构建这些属性的列表。