Подтвердить что ты не робот

Как получить имя набора атрибутов?

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

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

4b9b3361

Ответ 1

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

$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');
}

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

Ответ 2

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

$attributeSetName = Mage::getModel('eav/entity_attribute_set')->load($_product->getAttributeSetId())->getAttributeSetName();

Ответ 3

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

$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;

Найдите дополнительную информацию об атрибуте в в следующей статье.

Спасибо

Ответ 4

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

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

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

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

Ответ 5

Сравнение с текстовым значением может иметь проблемы, если пользователи решают позже изменить этот текст - что легко сделать в 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
}