属性テキスト/ラベルから属性値/ IDを取得する


7

商品をフィルタリングするために、URLに属性ラベルを表示する必要があります。属性ラベルを使用してURLを生成できます。これで、属性ラベルを属性ID /値(例:1,2)に変換するだけで、シーンの背後にあるコードが(属性値/ IDに基づいて)そのまま機能します。

apply()関数内でapp/code/core/Mage/Catalog/Model/Layer/Filter/Attribute.php属性ラベルを取得しています$filter = $request->getParam($this->_requestVar);(例:青)。

この属性ラベルを属性ID(たとえば緑の場合は2)に変換して、それを渡して $this->_getResource()->applyFilterToCollection($this, $filter);バックエンド機能をそのまま機能させるにはどうすればよいですか?試しましたが$filter->getId()、うまくいき$filter->getValue()ません。

属性ラベルから属性値/ IDを取得することは可能ですか?

回答:


19

属性テキスト/ラベルから属性値/ IDを取得します。

$attr = 'your_attribute';
$_product = Mage::getModel('catalog/product');
$attr = $_product->getResource()->getAttribute($attr);
if ($attr->usesSource()) {
    echo $color_id = $attr->getSource()->getOptionId("Purple");
}

これは、コードによって属性のIDを取得しますが、ラベルによって属性オプションのIDを取得しません:)
Sander Mangel

1
私の更新されたコードをチェックしてください
Manashvi Birla

1
素晴らしい、ほんの数行のコード
Sander Mangel

@Manashvibirla:どうすれば$attr = $_product->getResource()->getAttribute("color");動的にすることができますか?場合によっては、色のセクションから、場合によっては製造元などから属性ラベルを送信します
amitshree

更新されたansをチェック
Manashvi Birla 2015

5

これを行う単純なメソッドは実際にはありませんが、これでうまくいくはずです。

$attribute = Mage::getModel('eav/entity_attribute')->loadByCode(Mage_Catalog_Model_Product::ENTITY, 'color');

$values = Mage::getResourceModel('eav/entity_attribute_option_collection')
    ->setAttributeFilter($attribute->getId())
    ->addFieldToFilter('tsv.value', 'Bleu')
    ->setStoreFilter(Mage::app()->getStore()->getId(), false)
    ->addFieldToSelect('option_id');
$values->getSelect()->limit(1);

var_dump($values->getFirstItem()->getId());

値はラベルと正確に同じである必要があることに注意してください。


3

属性オプション値を取得する

 getOptionvalue('your attribute code like color','your attribute label like blue');

    function getOptionvalue($arg_attribute, $arg_value) 
        {
            $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $arg_attribute);

            foreach ( $attribute->getSource()->getAllOptions(true, true) as $option )
            {

                if($arg_value == $option['label'])
                {

                    unset($attribute);
                    return $option['value'] ; 
                }
            }

$ arg_valueが変更されるため、そこで$ arg_attributeを動的に取得することは可能ですか(例:場合によってはカラーセクションから、時にはメーカーから)。
amitshree 2015年

はい、関数getOptionvalue( 'color'、blue);を呼び出します。またはgetOptionvalue( 'manufacture'、 'some value');
Mufaddal 2015年

1
すべてのオプションをループすることは良い考えではありません-特にオプションがたくさんある場合は。
Simon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.