2

I have a product with a custom attribute, which works fine almost everywhere I use it.

However, when I try to get this attribute's value during the catalog_product_get_final_price event, I get null returned. Also, when I print the product's data, this attribute is not shown.

Is there a logical reason for this? How can I retrieve the value of this attribute?


I suspect that because this event is fired during the create/update of a quote item, not the original product data is used, but a (partial) snapshot of it's data. If that is the case; how might I make my attribute available in this snapshot as well?


config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <My_Module>
            <version>1.0.0</version>
        </My_Module>
    </modules>
    <global>
        <events>
            <catalog_product_get_final_price>
                <observers>
                    <my_observer>
                        <class>My_Module_Model_Observer</class>
                        <method>calculateItemPrice</method>
                    </my_observer>
                </observers>
            </catalog_product_get_final_price>
        </events>
    </global>
</config>

Observer

<?php
class My_Module_Model_Observer
{
    /**
     * 
     * @param  Varien_Event_Observer $observer
     * @return void
     */
    public function calculateItemPrice( Varien_Event_Observer $observer )
    {
        $event   = $observer->getEvent();
        $product = $event->getProduct();

        // folowing returns NULL
        $product->getMyCustromAttribute()
    }
}

UPDATE

When I debug the $observer object in the event observer, I get the following data;

Varien_Event_Observer (
    [_data:protected] => Array
        (
            [event] => Varien_Event(...)
            [product] => Mage_Catalog_Model_Product(...)
            [qty] => 1
        )
    [_hasDataChanges:protected] => TRUE
    [_origData:protected] => NULL
    [_idFieldName:protected] => NULL
    [_underscoreCache:static:protected] => Array(...)
    [_isDeleted:protected] => FALSE
    [_oldFieldsMap:protected] => Array()
    [_syncFieldsMap:protected] => Array()
)
  • Do you want the value of the quote item? Because there are no products in the cart... – Fabian Blechschmidt May 27 '14 at 13:17
  • Can you add your code to the question? – Marius May 27 '14 at 13:43
  • update; added some code – Maurice May 27 '14 at 14:01
2

Not sure about this but I thought to throw it in here, maybe I'm right, or maybe it gives you a nudge in the right direction.
I think your suspicions are right. Because this call is made on a product that comes from a quote item, not all the attributes are loaded.

The quote item loads only the attributes specified in the config node global/sales/quote/item/product_attributes.
Try adding your attribute code between those attributes.
For this create a custom module (or use one that you have) and add this inside the config.xml file inside the <config> tag

<global>
    <sales>
        <quote>
            <item>
                <product_attributes>
                    <my_custrom_attribute /> <!-- your attribute code goes here -->
                </product_attributes>
            </item>
        </quote>
    </sales>
</global>

Clear the cache and give it a go.

  • That was exactly it! Cheers! – Maurice May 27 '14 at 14:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.