2009-11-10 65 views
1

我有一个'精选'属性,它有一个是/否的选择列表作为管理员输入。我认为是和否的值是1和0,因为它们是每隔一个是/否列表。但是,如果我尝试并筛选使用“特色”属性的集合,这是行不通的:如何通过YesNo类型属性过滤集合?

$feat_attribute = $_product->getResource()->getAttribute($featuredattribute)->getSource()->getOptionId(1); 

但是,如果我有一个下拉列表中选择“功能”属性,写我自己是和否,那么它的作用如下:

$feat_attribute = $_product->getResource()->getAttribute($featuredattribute)->getSource()->getOptionId('Yes'); 

任何任何想法?我也尝试过将值作为真/假,是/否,开/关等,但没有喜悦。

+0

是和否不总是1和0.有时它是0和-1,我敢打赌这里有其他定义。 – 2009-11-11 07:52:18

+0

对不起,我应该说Magento中的其他所有是/否列表 - 我在Magento输出1和0中使用的所有其他列表。 – 2009-11-11 09:50:24

+0

您是否能够找到解决方案? – jayarjo 2011-08-08 13:54:24

回答

0

也许你应该使用'1'和'0'而不是整数值?

像:

$feat_attribute = $_product->getResource()->getAttribute($featuredattribute)->getSource()->getOptionId('1'); 
+0

试过了!我认为我已经尝试过所有可能的变化,但没有喜悦。 – 2009-11-10 22:40:16

0

每当Magento的行为混淆了我,我开始黑客攻击的核心源(开发副本,当然),看看它在做什么,为什么做什么,我认为这应该。我没有做过与管理UI的东西,所以我不100%理解你的问题太多的出场左右,但看看在getOption功能

File: /app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Abstract.php 

public function getOptionId($value) 
{ 
    foreach ($this->getAllOptions() as $option) { 
     if (strcasecmp($option['label'], $value)==0 || $option['value'] == $value) { 
      return $option['value']; 
     } 
    } 
    return null; 
} 

我想补充一些Mage::Log和/或var_dump电话在那里为$option['label']$option['value']的值,看看为什么你的比较失败。

+0

我已经试过这个了 - 我做了一个vardump,值表示它是布尔值,但是不管它是否设置为true,都显示false,所以我非常难过! – 2009-11-11 09:48:20

+0

此外,我检查了Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Boolean,列出的值是0和1.这是否与我执行过滤器的方式有关?适用于下拉菜单,但可能需要以不同的方式进行是/否? – 2009-11-11 15:22:49

+0

这是一个是/否,你在界面中设置自己?当您设置它时,也许eav business缺少一些关键信息。这将是我的下一个猜测,如果这是我的问题。这是我如何调试它。使用mysqldump转储数据库的内容(非二进制文件)更改其中一个可用的Yes/No菜单,并进行另一个数据库转储。区分这两个文件以查看更改的内容。然后,追踪问题菜单项的数据库的类似区域,看看有没有看起来“错误”。 (含糊而乏味,但这是一个没有记录的系统) – 2009-11-11 17:25:19

2

这似乎是一个古老的线程,但无论如何,我只是有同样的问题,我设置该属性在产品列表和产品视图中可见,然后将addAttributeToFilter(feature_product_attribute, 1)应用于是/否类型。

+0

是啊@Atabtab再次摇摆你的世界...... – Jimmy 2012-12-27 08:41:44