2010-05-21 155 views
2

我已创建自定义的我模块的属性类别安装脚本,像这样:Magento的loadByAttribute自定义类别属性

$attrib = array(
     'type'   => 'varchar', 
     'group'   => 'My Data', 
     'backend'  => '', 
     'frontend'  => '', 
     'label'   => 'My Custom Field', 
     'input'   => 'text', 
     'class'   => '', 
     'source'  => '', 
     'global'  => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE, 
     'visible'  => true, 
     'required'  => false, 
     'user_defined' => false, 
     'default'  => '', 
     'searchable' => false, 
     'filterable' => false, 
     'comparable' => false, 
     'visible_on_front' => false, 
     'unique'  => true, 
    ); 
$installer->addAttribute(3, 'custom_field', $attrib); 

该字段显示了在管理精细,当我创建我的脚本类像这样:

$p_category = Mage::getModel('catalog/category') 
      ->setStoreId(0) 
      ->load(2); 
$category = Mage::getModel('catalog/category'); 
$category->setStoreId(0) 
    ->setName('Test Category') 
    ->setCustomField('abcd') 
    ->setDisplayMode('PRODUCTS') 
    ->setAttributeSetId($category->getDefaultAttributeSetId()) 
    ->setIsActive(1) 
    ->setIsAnchor(1) 
    ->setPath(implode('/',$p_category->getPathIds())) 
    ->setInitialSetupFlag(true) 
    ->save(); 

我可以在Magneto管理界面看到'abcd'的值。但是当我拨打下面的代码:

<?php 
$category = Mage::getModel('catalog/category')->loadByAttribute('custom_field', 'abcd'); 
print_r($category); 
?> 

我没有得到任何结果。但如果我使用'名称'字段设置为'测试类别'loadByAttribute,我会得到一个结果。

因此,在数据库中,我查看了catalog_category_entity_varchar表,发现'name'属性有一个store_id = 0和store_id = 1的条目,而'custom_field'属性只有store_id = 1的条目。

当我在catalog_category_entity_varchar表中为'custom_field'添加store_id = 0条目并将值设置为'abcd'时,loadByAttribute获得了预期结果。

我的问题是,为什么'name'字段在catalog_category_entity_varchar中获得store_id = 0条目,而我的自定义字段不是?
如何通过自定义属性加载类别?

回答

0

我正在运行1.4.1.1,并发现与自定义产品属性相似的问题。如果按该属性必须有默认店以及你有兴趣在店里值的属性筛选集合,你可以看到为什么,如果你做以下

Mage::Log($collection->getSelect()->__toString()); 

当你看在日志文件中的查询,你会看到磁做一个内部联接到为STORE_ID 0的属性表,因此,如果您还没有店面零创造了一个价值它不能给你结果。看起来像一个错误,我认为Magento应该做一个左连接。

1

更多猜测这里比知道的粟特任何东西,因为你有很多事情,我不知道如果我按照你对STORE_ID(不,这是一个有效的关注关心,我只是不知道在哪里它进入当你设置你的属性,你用

'filterable' => false, 

尝试建立与此设置为true的新属性的图片)

。如果你看看loadByAttribute源代码,它使用属性过滤来工作,所以如果你想使用这个方法,你需要可过滤的属性。

+0

我试过了,仍然没有运气。我认为store_id与该属性是否可访问有关。就像我说的,添加store_id = 0的条目允许我按预期加载。 – chris 2010-05-21 23:22:49

2

如果你改变了以下主要对全球那么就应该将其添加两个商店

'global'  => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 
0

清除缓存加载自定义属性的模型前,loadByAttribute工作正常。