Michael
Michael

Reputation: 499

Get value from custom category attribute

I am trying to get the value from a custom category attribute in Magento. The attribute is a select field and is been made with the install script below:

$this->startSetup();

$this->addAttribute('catalog_category', 'category_categorycolor', array(
    'group'         => 'General Information',
    'input'         => 'select',
    'type'          => 'varchar',
    'label'         => 'Categorie kleur',
    'backend'       => '',
    'visible'       => 1,
    'required'      => 0,
    'user_defined'  => 1,
    'option'            => array (
                                    'value' => array('yellow' => array('Geel'),
                                                     'purple' => array('Paars'),
                                                     'blue' => array('Blauw'),
                                                     'red' => array('Rood'),
                                                     'orange' => array('Oranje'),
                                                     'green' => array('Groen'),
                                                     'darkblue' => array('Donkerblauw'),
                                                     'lightgreen' => array('Lichtgroen'),                                               
                                                )
                                ),
    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));

$this->endSetup();

Unfortunately only getting numbers and not text value. I use this line to retrieve the value:

<?php $_category_categorycolor = $_category->getData('category_categorycolor'); if($_category_categorycolor): ?> <?php echo $_category_categorycolor; ?> <?php endif; ?>

Can someone help me?

Upvotes: 1

Views: 5658

Answers (3)

Vlad Preda
Vlad Preda

Reputation: 9930

The sollution is pretty messy (the only one I know of).

$opt = array(); // will contain all options in a $key => $value manner
$attribute = Mage::getSingleton('eav/config')->getAttribute('catalog_category', 'category_categorycolor');
    if ($attribute->usesSource()) {
        $options = $attribute->getSource()->getAllOptions(false);
        foreach ($options as $o) {
            $opt[$o['value']] = $o['label'];
        }
    }

$categoryColorId = $_category->getData('category_categorycolor');
$categoryColorLabel = $opt[$categoryColorId];

// if you have problems, do a Zend_Debug::dump($opt); 
// - it should contain an array of all the options you added

Didn't test it out, let me know if it works or not.

PS: can't reply to your comment, not sure why. What does $opt contain ?

Upvotes: 3

CarComp
CarComp

Reputation: 2026

The numbers you are getting back are the id's of each value in the dropdown. You have to load the dropdown values too.

See the following page. It helped me understand this.

http://www.sharpdotinc.com/mdost/2009/04/06/magento-getting-product-attributes-values-and-labels/

Upvotes: 0

Pavel Novitsky
Pavel Novitsky

Reputation: 1694

Something like this:

$category_id = '10';
$attribute_code = 'category_categorycolor';
$category = Mage::getModel('catalog/category')->load($category_id);

echo $category->getResource()->getAttribute($attribute_code)->getFrontend()->getValue($category);

Upvotes: 4

Related Questions