dsztc99732 2017-07-17 16:25
浏览 38

在非对象上调用成员函数getFullActionName()

I am working with Magento 1.9.0 and I am trying to get the cron to pick up an abandoned cart call, but there an exception that keeps happening.

TRIGGER: shutdown function
Last error: 
Array
(
    [type] => 1
    [message] => Call to a member function getFullActionName() on a non-object
    [file] => /chroot/home/abc/URL.com/html/store/app/code/local/Mnwebco/Personalize/Model/Observer.php
    [line] => 9
)

Basically it is failing at that point and not moving forward according to AOEscheduler.

Here is the code of the Local module.

class Mnwebco_Personalize_Model_Observer
{
    public function catalogProductLoadAfter(Varien_Event_Observer $observer)
    {
        // set the additional options on the product
        $action = Mage::app()->getFrontController()->getAction();
        if ($action->getFullActionName() == 'checkout_cart_add' ||  $action->getFullActionName() == 'checkout_cart_updateItemOptions') {
            // assuming you are posting your custom form values in an array called extra_options...
            //if ($options = $action->getRequest()->getParam('extra_options'))
            //Mage::log('req parms '.$action->getRequest()->getParam('custommessage'));
            if ($action->getRequest()->getParam('custommessage')!='') {
                $personvalue = $action->getRequest()->getParam('custommessage');
                $product = $observer->getProduct();

                // add to the additional options array
                $additionalOptions = array();
                if ($additionalOption = $product->getCustomOption('additional_options')) {
                    $additionalOptions = (array) unserialize($additionalOption->getValue());
                }

                $additionalOptions[] = array(
                    'label' => 'Message to add',
                    'value' => $personvalue,
                );

                // add the additional options array with the option code additional_options
                $observer->getProduct()
                    ->addCustomOption('additional_options', serialize($additionalOptions));
            } elseif ($action->getRequest()->getParam('customsigmessage')!='') {
                $personvalue = $action->getRequest()->getParam('customsigmessage');
                $product = $observer->getProduct();

                // add to the additional options array
                $additionalOptions = array();
                if ($additionalOption = $product->getCustomOption('additional_options')) {
                    $additionalOptions = (array) unserialize($additionalOption->getValue());
                }

                $additionalOptions[] = array(
                    'label' => 'Message to add with signature',
                    'value' => $personvalue,
                );

                // add the additional options array with the option code additional_options
                $observer->getProduct()
                    ->addCustomOption('additional_options', serialize($additionalOptions));

                } elseif ($action->getRequest()->getParam('bridesname')!='') {
                    $bride = $action->getRequest()->getParam('bridesname');
                    $groom = $action->getRequest()->getParam('groomsname');
                    $wedding = $action->getRequest()->getParam('weddingdate');

                    $product = $observer->getProduct();

                    // add to the additional options array
                    $additionalOptions = array();
                    if ($additionalOption = $product->getCustomOption('additional_options')) {
                        $additionalOptions = (array) unserialize($additionalOption->getValue());
                    }

                    $additionalOptions[] = array(
                        'label' => 'Personalized Information',
                        'value' => 'Bride: '.$bride.', Groom: '.$groom.', Date: '.$wedding,
                    );

                    /*
                    $additionalOptions[] = array(
                        'label' => 'bridesname',
                        'value' => $bride,
                    );
                    $additionalOptions[] = array(
                        'label' => 'groomsname',
                        'value' => $groom,
                    );
                    $additionalOptions[] = array(
                        'label' => 'weddingdate',
                        'value' => $wedding,
                    );
                    */

                    // add the additional options array with the option code additional_options
                    $observer->getProduct()
                        ->addCustomOption('additional_options', serialize($additionalOptions));
                }
         }
    }

    public function checkoutCartUpdateItemsBefore (Varien_Event_Observer $observer)
    {
        // set the additional options on the product
        $action = Mage::app()->getFrontController()->getAction();
        //Mage::log('!imp '.$action->getFullActionName());
        if ($action->getFullActionName() == 'checkout_cart_updateItemOptions') {
            // assuming you are posting your custom form values in an array called extra_options...
            //if ($options = $action->getRequest()->getParam('extra_options'))
            //Mage::log('req parms '.$action->getRequest()->getParam('custommessage'));
            if ($action->getRequest()->getParam('custommessage')!='') {
                $personvalue = $action->getRequest()->getParam('custommessage');
                $product = $observer->getItem()->getProduct();

                // add to the additional options array
                $additionalOptions = array();
                if ($additionalOption = $product->getCustomOption('additional_options')) {
                    $additionalOptions = (array) unserialize($additionalOption->getValue());
                }

                $additionalOptions[] = array(
                    'label' => 'Message to add',
                    'value' => $personvalue,
                );

                // add the additional options array with the option code additional_options
                $observer->getItem()->getProduct()
                    ->addCustomOption('additional_options', serialize($additionalOptions));
            } elseif ($action->getRequest()->getParam('customsigmessage')!='') {
                $personvalue = $action->getRequest()->getParam('customsigmessage');
                $product = $observer->getItem()->getProduct();

                // add to the additional options array
                $additionalOptions = array();
                if ($additionalOption = $product->getCustomOption('additional_options')) {
                    $additionalOptions = (array) unserialize($additionalOption->getValue());
                }

                $additionalOptions[] = array(
                    'label' => 'Message to add with signature',
                    'value' => $personvalue,
                );

                // add the additional options array with the option code additional_options
                $observer->getItem()->getProduct()
                    ->addCustomOption('additional_options', serialize($additionalOptions));
            } elseif ($action->getRequest()->getParam('bridesname')!='') {
                $bride = $action->getRequest()->getParam('bridesname');
                $groom = $action->getRequest()->getParam('groomsname');
                $wedding = $action->getRequest()->getParam('weddingdate');

                $product = $observer->getItem()->getProduct();

                // add to the additional options array
                $additionalOptions = array();
                if ($additionalOption = $product->getCustomOption('additional_options')) {
                    $additionalOptions = (array) unserialize($additionalOption->getValue());
                }

                $additionalOptions[] = array(
                    'label' => 'Personalized Information',
                    'value' => 'Bride: '.$bride.', Groom: '.$groom.', Date: '.$wedding,
                );

                // add the additional options array with the option code additional_options
                $observer->getItem()->getProduct()
                    ->addCustomOption('additional_options', serialize($additionalOptions));
            }
         }
    }

    public function salesConvertQuoteItemToOrderItem (Varien_Event_Observer $observer)
    {
         $quoteItem = $observer->getItem();
         if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
            $orderItem = $observer->getOrderItem();
            $options = $orderItem->getProductOptions();
            $options['additional_options'] = unserialize($additionalOptions->getValue());
            $orderItem->setProductOptions($options);
        }
    }
}
  • 写回答

1条回答 默认 最新

  • dongsong4418 2017-07-17 16:32
    关注

    Your getAction() is probably returning null. A better approach would be to do

    $action = Mage::app()->getRequest()->getActionName();
    

    This will return a string. So, in your if conditions, use,

    if($action == 'checkout_cart_add' ||  $action == 'checkout_cart_updateItemOptions') {}
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化