我遇到了以下问题。在额外的模块中,我想根据属性的位置对属性的选项进行排序。当我尝试获取属性的选项时,我可以获得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;
但我认为,有更好的选择来获得这个价值。
答案 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();