2010-01-19 15 views
29

Estoy tratando de obtener el nombre del conjunto de atributos en la plantilla de vista de producto de Magento. Puedo obtener el valor del atributo por $_product->getAttributeText('attribute'), pero ¿cómo obtengo el nombre del conjunto de atributos?¿Cómo obtengo el nombre del conjunto de atributos?

Me gustaría mostrar un atributo solo si pertenece a un determinado conjunto de atributos.

Respuesta

66

Siempre que tenga un objeto producto, puede acceder a su conjunto de atributos como esto:

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

esto le dará el nombre del conjunto de atributos, que luego se puede comparar usando strcmp:

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

Espero que ayude!

+0

Un usuario anónimo ofreció una edición sugerencia, corrección de '' $ attributeSet' a # attributeSetName'. Parecía razonable, así que lo aprobé. Sin embargo, no conozco este idioma, así que verifique si es correcto. – abcd

+0

La última línea debería decir: '$ attributeSetName = $ attributeSetModel-> getAttributeSetName();' sin el ')' al final – Yeroon

+0

¿Opción extraña de la función strcmp? ¿Por qué no usar la comparación directa con ===? –

1

La respuesta de Joe requiere un par de modificaciones para que funcione.

En primer lugar, debe ser $ _product not not $ product, y en segundo lugar, hay un ')' erróneo en la última línea.

El siguiente código debe ser correcta:

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

Para más sexyness puede acortarlo a:

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

Pruebe el siguiente código:

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

Más información acerca de Conjunto de atributos en el following article.

Gracias

0

en comparación con un valor de texto pueden tener problemas si los usuarios deciden cambiar después de que el texto - que es fácil de hacer en Magento para conjuntos de atributos. Otra opción es usar la identificación subyacente en su lugar, que nunca va a cambiar.

Usted puede obtener esta buscando el valor de la columna attribute_set_id en la base de datos utilizando

select * from eav_attribute_set; 

Este número también se encuentra en el enlace editar en el administrador que está en negrita a continuación

http://.../index.php/admin/catalog_product_set/edit/id//clave/6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3/

Su código entonces simplemente utilizar dicha propiedad del producto. Base en el identificador de 10 en el enlace de arriba esta no sería más que

if (10 == $_product->getAttributeSetId()) { 
    //Do work 
} 
Cuestiones relacionadas