2010-01-19 11 views
29

Sto cercando di ottenere il nome del set di attributi nel modello di visualizzazione del prodotto Magento. Posso ottenere il valore dell'attributo per $_product->getAttributeText('attribute'), ma come posso ottenere il nome del set di attributi?Come si ottiene il nome del set di attributi?

Vorrei visualizzare un attributo solo se appartiene a un determinato set di attributi.

risposta

66

Ogni volta che si dispone di un oggetto prodotto, è possibile accedere al suo attributo impostato in questo modo:

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

Questo vi darà il nome del set di attributi, che è quindi possibile confrontare usando strcmp:

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

Spero che questo aiuti!

+0

Un utente anonimo ha offerto una modifica proposta, correggendo '$ attributeSet' a' # attributeSetName'. Sembrava ragionevole, quindi l'ho approvato. Tuttavia, non conosco questa lingua, quindi controlla se è corretta. – abcd

+0

L'ultima riga dovrebbe contenere: '$ attributeSetName = $ attributeSetModel-> getAttributeSetName();' senza ')' alla fine – Yeroon

+0

Strana scelta della funzione strcmp? Perché non utilizzare il confronto diretto con ===? –

1

La risposta di Joe richiede un paio di modifiche affinché funzioni.

In primo luogo dovrebbe essere $ _prodotto non $ prodotto, e in secondo luogo c'è un ')' errato nell'ultima riga.

Il seguente codice dovrebbe essere corretto:

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

Per ulteriori sexyness è possibile abbreviare a:

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

Provate il seguente codice:

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

Più informazioni su Attributo impostato su .

Grazie

0

Confrontando ad un valore di testo possono avere problemi se gli utenti decidono di cambiare in seguito che il testo - che è facile da fare in Magento per i set di attributi. Un'altra opzione è quella di usare l'id sottostante che non cambierà mai.

È possibile ottenere questo, cercando il valore della colonna attribute_set_id nel database utilizzando

select * from eav_attribute_set; 

Questo numero è anche nel link modifica in admin che è in grassetto sotto

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

il tuo codice sarebbe quindi sufficiente utilizzare la proprietà del prodotto. Base sul id del 10 nel link qui sopra questo sarebbe solo

if (10 == $_product->getAttributeSetId()) { 
    //Do work 
} 
Problemi correlati