Как мне получить Положение атрибута-опции в Magento? - PullRequest
3 голосов
/ 24 октября 2011

У меня следующая проблема.В дополнительном модуле я хочу отсортировать параметры атрибута, основываясь на их позиции.Когда я пытаюсь получить опцию атрибута, я могу получить идентификатор и метку, но в этом объекте ничего нет.

Я могу, например, сделать следующее:

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

Или просто getOptionId ($ value), но нет ничего, чтобы получить Позицию, которую можно редактировать в бэкэнде.Итак, как это получить?Ничего (полезного) в сети еще не нашел.

(Также похожий вопрос Сортировка параметров атрибута сортировки magento по позиции? не помогает)

РЕДАКТИРОВАТЬ: То, что мне удалось сделать, это сделать прямой оператор SQL, например:

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

Но я думаю, есть лучший вариант получить это значение.

Ответы [ 5 ]

2 голосов
/ 09 ноября 2011

Я нашел ответ сам и хочу поделиться им с вами.

$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 голос
/ 07 марта 2015

Это на самом деле довольно просто, если вы посмотрите @ 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());
}

Я вижу, вы уже придумали нечто подобное, но я подумал, что опубликую это, поскольку это может быть полезно для других.

0 голосов
/ 17 июня 2016

Хорошо, у вас есть код атрибута $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();
0 голосов
/ 24 декабря 2012

От: 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");
0 голосов
/ 24 октября 2011

Начните отладку, затем:

print_r($_product->getResource()->getAttribute($code));
print_r($_product->getResource()->getAttribute($code)->getData());
print_r(get_class_methods($_product->getResource()->getAttribute($code)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...