Как получить имя набора атрибутов? - PullRequest
29 голосов
/ 19 января 2010

Я пытаюсь получить имя набора атрибутов в шаблоне представления продукта Magento.Я могу получить значение атрибута по $_product->getAttributeText('attribute'), но как мне получить имя набора атрибутов?

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

Ответы [ 5 ]

70 голосов
/ 19 января 2010

Всякий раз, когда у вас есть объект продукта, вы можете получить доступ к его атрибуту, установленному так:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load($product->getAttributeSetId());
$attributeSetName  = $attributeSetModel->getAttributeSetName();

Это даст вам имя набора атрибутов, которое вы затем сможете сравнить, используя strcmp:

if(0 == strcmp($attributeSetName, 'My Attribute Set')) {
    print $product->getAttributeText('attribute');
}

Надеюсь, это поможет!

24 голосов
/ 29 июня 2011

Для большей сексуальности вы можете сократить ее до:

$attributeSetName = Mage::getModel('eav/entity_attribute_set')->load($_product->getAttributeSetId())->getAttributeSetName();
13 голосов
/ 18 ноября 2011

Попробуйте следующий код:

$entityTypeId = Mage::getModel('eav/entity')
                ->setType('catalog_product')
                ->getTypeId();
$attributeSetName   = 'Default';
$attributeSetId     = Mage::getModel('eav/entity_attribute_set')
                    ->getCollection()
                    ->setEntityTypeFilter($entityTypeId)
                    ->addFieldToFilter('attribute_set_name', $attributeSetName)
                    ->getFirstItem()
                    ->getAttributeSetId();
echo $attributeSetId;

Подробнее о наборе атрибутов см. В следующей статье .

Спасибо

1 голос
/ 11 марта 2011

Для ответа Джо требуется несколько изменений, чтобы он заработал.

Во-первых, это должен быть $ _product, а не $ product, а во-вторых, в последней строке есть ошибочный символ ')'.

Следующий код должен быть правильным:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load($_product->getAttributeSetId());
$attributeSetName = $attributeSetModel->getAttributeSetName();
0 голосов
/ 25 февраля 2012

Сравнение с текстовым значением может вызвать проблемы, если пользователи решат позже изменить этот текст - что легко сделать в Magento для наборов атрибутов. Еще один вариант - использовать базовый идентификатор, который никогда не изменится.

Вы можете получить это, посмотрев значение столбца attribute_set_id в базе данных, используя

select * from eav_attribute_set;

Этот номер также есть в ссылке для редактирования в админке, которая выделена жирным шрифтом ниже

Http: //.../index.php/admin/catalog_product_set/edit/id/10/key/6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3/

Ваш код будет просто использовать это свойство продукта. Основываясь на идентификаторе 10 в ссылке выше, это будет просто

if (10 == $_product->getAttributeSetId()) {
  //Do work
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...