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

Php 如何获取属性选项在Magento中的位置?,php,sorting,magento,attributes,Php,Sorting,Magento,Attributes,我有以下问题。在一个额外的模块中,我想根据属性的位置对选项进行排序。当我尝试获取属性的选项时,我可以获取Id和标签,但在该对象中没有其他内容 例如,我可以这样做: $attribute = $_product->getResource()->getAttribute($code)->getOptionsText($value): 或者只是getOptionId($value),但是没有任何东西可以获取位置,该位置在后端是可编辑的。那么,如何得到这个呢?在网上还没有找到任何有用

我有以下问题。在一个额外的模块中,我想根据属性的位置对选项进行排序。当我尝试获取属性的选项时,我可以获取Id和标签,但在该对象中没有其他内容

例如,我可以这样做:

$attribute = $_product->getResource()->getAttribute($code)->getOptionsText($value):
或者只是getOptionId($value),但是没有任何东西可以获取位置,该位置在后端是可编辑的。那么,如何得到这个呢?在网上还没有找到任何有用的东西

(同样,类似的问题也没有任何帮助)

编辑: 我所做的是直接执行SQL语句,如下所示:

SELECT sort_order FROM mag_eav_attribute_option WHERE option_id = 114 AND attribute_id = 533;
但我认为,有一个更好的选项可以获得该值。

然后开始调试:

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

我自己找到了答案,想和大家分享

$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);
我希望它能帮助别人。

来自:

如何获取属性值排序顺序

下面是使用SQL获取属性值排序位置的快捷方法。 更改以下代码中变量的值:

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


如果你看一看@
Mage\u Eav\u Block\u Adminhtml\u Attribute\u Edit\u Options\u 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());
}

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

好的,你有属性代码
$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();

当然我已经这么做了。正如我所说,属性本身只有getOptionId和getOptionText,但没有位置。+1我非常喜欢你的解决方案,非常想添加到它,我们可以在循环中执行$opt->getData(),我们也将为每个位置设置标签,这将非常有用,就像一个符咒一样。令人惊叹的。
$source = $product->getResource()->getAttribute($code)->getSource();
$optionId = $source->getOptionId($product->getData($code));
$optionSortOrder = Mage::getResourceModel('eav/entity_attribute_option_collection')
                    ->setIdFilter($_optionId)
                    ->getFirstItem()
                    ->getSortOrder();