如何在Magento中获取属性选项的位置?

时间:2011-10-24 10:04:05

标签: php sorting magento attributes

我遇到了以下问题。在额外的模块中,我想根据属性的位置对属性的选项进行排序。当我尝试获取属性的选项时,我可以获得Id和标签,但是没有任何东西可以使用该对象。

我可以这样做,例如:

$attribute = $_product->getResource()->getAttribute($code)->getOptionsText($value):

或者只是getOptionId($ value),但没有任何东西可以获得位置,这在后端是可编辑的。那么,如何获得这个?在网上还没有找到任何(有用的)。

(类似问题magento sort attribute option collection by position?也没有提供任何帮助)

编辑: 我设法做的是做一个直接的SQL语句,如下所示:

SELECT sort_order FROM mag_eav_attribute_option WHERE option_id = 114 AND attribute_id = 533;

但我认为,有更好的选择来获得这个价值。

5 个答案:

答案 0 :(得分:2)

我自己找到了答案并希望与您分享。

$attribute = Mage::getModel('eav/entity_attribute')->load( $code, 'attribute_code');
$option_col = Mage::getResourceModel( 'eav/entity_attribute_option_collection')
 ->setAttributeFilter( $attribute->getId() )
 ->setStoreFilter()
 ->setPositionOrder( 'ASC' );
$option_col->getSelect()->order('main_table.sort_order '.$orderby);

我希望它有所帮助。

答案 1 :(得分:1)

如果你看看@ Mage_Eav_Block_Adminhtml_Attribute_Edit_Options_Abstract

,这实际上非常简单
$attributeId = 230;
$options = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter($attributeId)
            ->setPositionOrder('desc', true)
            ->load();

foreach($options as $opt){
    Mage::log($opt->getSortOrder());
}

我看到你已经提出类似的东西,但我想我会发布这个,因为它可能对其他人有所帮助。

答案 2 :(得分:0)

然后开始调试:

print_r($_product->getResource()->getAttribute($code));
print_r($_product->getResource()->getAttribute($code)->getData());
print_r(get_class_methods($_product->getResource()->getAttribute($code)));

答案 3 :(得分:0)

来自:http://www.phptechi.com/getting-product-attributes-values-and-labels.html

如何获取属性值排序顺序?

以下是使用SQL获取属性值排序定位的快速简便方法。 在以下代码中更改变量的值:

$ CurtAtr是当前属性,如颜色,大小等 $ attrVal是属性值,例如尺寸有“小,中,大等”

$resource = Mage::getSingleton('core/resource');
$read = $resource->getConnection('catalog_read');  
$read->fetchAll("SELECT ao.sort_order FROM eav_attribute_option_value as aov, eav_attribute_option as ao where value='$attrVal' and aov.option_id = ao.option_id and attribute_id=$CurtAtr limit 1");

答案 4 :(得分:0)

好的,您可以使用属性代码$code和属性选项值$value。然后你可以得到相应的排序顺序:

$source = $product->getResource()->getAttribute($code)->getSource();
$optionId = $source->getOptionId($product->getData($code));
$optionSortOrder = Mage::getResourceModel('eav/entity_attribute_option_collection')
                    ->setIdFilter($_optionId)
                    ->getFirstItem()
                    ->getSortOrder();