Manish Shrestha
Manish Shrestha

Reputation: 96

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.

Upvotes: 0

Views: 1159

Answers (1)

Manish Shrestha
Manish Shrestha

Reputation: 96

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

Upvotes: 0

Related Questions