Search code examples
phpattributesmagento-1.9custom-attributes

Get all attributes of an attribute set that is not present in default attribute set


How can I get the list of attributes of an attribute set that are not present in the default attribute set?

I tried the following codes:

$attributeSetId = Mage::getModel('eav/entity_attribute_set')
                ->load($_product->getAttributeSetId())->getId();
$attributes = Mage::getModel('catalog/product_attribute_api')
                ->items($attributeSetId);

echo '<pre>';
print_r($attributes);
die();

But this returned an array with all the attributes including the attributes of default attribute set whereas I just needed the attributes that only belonged to my custom attribute set.


Solution

  • This is the solution I came up with

    public function getSpecificAttributes($product) {
        //get ids of all the attributes in the default attribute set
        $entityTypeId = Mage::getModel('eav/entity')
                ->setType('catalog_product')
                ->getTypeId();
        $attributeSetName = 'Default';
        $defaultAttributeSetId = Mage::getModel('eav/entity_attribute_set')
                ->getCollection()
                ->setEntityTypeFilter($entityTypeId)
                ->addFieldToFilter('attribute_set_name', $attributeSetName)
                ->getFirstItem()
                ->getAttributeSetId();
    
        $defaultAttributes = Mage::getModel('catalog/product_attribute_api')->items($defaultAttributeSetId);
        $defaultAttributeCodes = array();
        foreach ($defaultAttributes as $attributes) {
            $defaultAttributeCodes[] = $attributes['code'];
        }
    
        //get ids of all the attributes in the attribute set specific to the current product
        $attributeSetId = $product->getAttributeSetId();
        $specificAttributes = Mage::getModel('catalog/product_attribute_api')->items($attributeSetId);
        $attributeCodes = array();
        foreach ($specificAttributes as $attributes) {
            $attributeCodes[] = $attributes['code'];
        }
    
        $currentAttributes = array_diff($attributeCodes, $defaultAttributeCodes);
        return $currentAttributes;
    }