2011-10-24 69 views
3

我有以下問題。在一個額外的模塊中,我想根據它們的位置對屬性的選項進行排序。當我嘗試獲得屬性的選項時,我可以得到Id和標籤,但是沒有任何東西存在於該對象中。如何獲得Magento中屬性選項的位置?

我可以做,例如這樣的:

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

或者只是getOptionId($值),但並沒有什麼得到的位置,這是在後臺編輯。那麼,如何得到這個?還沒有發現任何東西(有用)。

(也是類似的問題magento sort attribute option collection by position?犯規給任何幫助)

編輯: 我設法做,是做一個直接的SQL語句,就像這樣:

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

但我認爲,有是獲得該價值的更好選擇。

回答

1

,我發現自己的答案,並願意與您分享。

$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

工作就像一個魅力。真棒。 –

0

開始調試,然後:

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

當然,我已經這樣做了。正如我所說,屬性本身只有getOptionId和getOptionText,但不是位置。 –

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"); 
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()); 
} 

我看你想出了類似的東西了,不過我想我會張貼這個,因爲它可能對別人有幫助。

+1

+1我非常喜歡你的解決方案,希望能夠在循環中添加$ opt-> getData(),並且我們也會爲每個位置添加標籤,這些標籤非常有用 – Nickool

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(); 
相關問題