ফ্রন্টএন্ডে ইভেন্ট পর্যবেক্ষকের অভ্যন্তরে পণ্য সংরক্ষণের চেষ্টা করার সময় ম্যাগ্যান্টো ব্যর্থ?


15

আমার একটি ফাংশন রয়েছে যা ইভেন্ট পর্যবেক্ষকের সাথে আবদ্ধ

প্রয়োজনীয়তাগুলির মধ্যে একটি হ'ল এটি যখন অর্ডার আইটেম ডেটার মাধ্যমে লুপ করে, কোনও নির্দিষ্ট পণ্যের বৈশিষ্ট্য খালি থাকে তা একটি পৃথক মডেল (সূক্ষ্ম কাজ করে) এর মাধ্যমে নির্দিষ্ট ডেটা পাওয়ার অনুরোধ জারি করে।

সমস্যা কোডটি মূলত এটিতে ফোটে

foreach ($order->getAllItems() as $key => $item) {
    /** @var Tantor_Catalog_Model_Product $productData */
    $productData = $item->getProduct();
    $_item = Mage::getModel('catalog/product')->load($productData->getId());
    $_item->setNetsuiteItemIid('foo');
    $_item->save();
}

তবে ম্যাজেন্টো এর ব্যতিক্রম ছুঁড়ে দিচ্ছে

2014-03-05T21:14:14+00:00 ERR (3):
exception 'Exception' with message 'Warning: Invalid argument supplied for foreach()  in /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180' in /var/www/html/app/code/core/Mage/Core/functions.php:245
Stack trace:
#0 /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(1180): mageCoreErrorHandler(2, 'Invalid argumen...', '/var/www/html/a...', 1180, Array)
#1 /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(1123): Mage_Eav_Model_Entity_Abstract->_collectSaveData(Object(Tantor_Catalog_Model_Product))
#2 /var/www/html/app/code/core/Mage/Core/Model/Abstract.php(318): Mage_Eav_Model_Entity_Abstract->save(Object(Tantor_Catalog_Model_Product))
#3 /var/www/html/app/code/local/Tantor/Netsuite/Model/Observer.php(218): Mage_Core_Model_Abstract->save()
#4 /var/www/html/app/code/core/Mage/Core/Model/App.php(1338): Tantor_Netsuite_Model_Observer->saveOrder(Object(Varien_Event_Observer))
#5 /var/www/html/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Tantor_Netsuite_Model_Observer), 'saveOrder', Object(Varien_Event_Observer))
#6 /var/www/html/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('sales_order_pla...', Array)
#7 /var/www/html/app/code/core/Mage/Sales/Model/Order.php(1096): Mage::dispatchEvent('sales_order_pla...', Array)
#8 [internal function]: Mage_Sales_Model_Order->place()
#9 /var/www/html/app/code/core/Mage/Core/Model/Resource/Transaction.php(105): call_user_func(Array)
#10 /var/www/html/app/code/core/Mage/Core/Model/Resource/Transaction.php(159): Mage_Core_Model_Resource_Transaction->_runCallbacks()
#11 /var/www/html/app/code/core/Mage/Sales/Model/Service/Quote.php(189): Mage_Core_Model_Resource_Transaction->save()
#12 /var/www/html/app/code/core/Mage/Sales/Model/Service/Quote.php(249): Mage_Sales_Model_Service_Quote->submitOrder()
#13 /var/www/html/app/code/core/Mage/Checkout/Model/Type/Onepage.php(774): Mage_Sales_Model_Service_Quote->submitAll()
#14 /var/www/html/app/code/core/Mage/Checkout/controllers/OnepageController.php(511): Mage_Checkout_Model_Type_Onepage->saveOrder()
#15 /var/www/html/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Checkout_OnepageController->saveOrderAction()
#16 /var/www/html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('saveOrder')
#17 /var/www/html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#18 /var/www/html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#19 /var/www/html/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#20 /var/www/html/index.php(86): Mage::run('', 'store')
#21 {main}

আমি কেন ম্যাজেন্টো পর্যবেক্ষকের বাইরে একটি তৃতীয় পক্ষের স্ক্রিপ্টে অভিন্ন কোডটি ব্যবহার করতে সক্ষম হব, কিন্তু যখন আমি সেই পর্যবেক্ষকের অভ্যন্তরে এটি চালানোর চেষ্টা করি, তখন এটি এলোমেলো ত্রুটি বার্তায় ব্যর্থ হয়?


এই ত্রুটিটি একটি নন-অ্যারে পার্স হওয়ার সাধারণ foreach। স্ট্যাক ট্রেস আপনাকে দেখায় যে একটি ইভেন্ট প্রেরণ করা হয়েছে এবং পর্যবেক্ষক ত্রুটিযুক্ত। আপনি কি নিশ্চিত $order->getAllItems()যে একটি পুনরায় কাজ করছে array()? ব্যবহার করুন: Zend_Debug::dump($order->getAllItems());। তবে এটি কিছু খারাপ কোড সহ অন্য একটি পর্যবেক্ষক হতে পারে?
ছাই

সমস্যাটি Magento কোর কোডের সাথে নয়, শীর্ষে আমার স্নিপেটের সাথে।
জ্যাক্সুরিয়ান

উত্তর:


33

সমস্যাটি হ'ল, আপনাকে সীমান্ত থেকে পণ্যগুলি সংরক্ষণ করার অনুমতি নেই।

এটি এই সত্যের মাধ্যমে করা হয় যে আপনি যখন কোনও পণ্য সম্মুখভাগে লোড করেন তখন origDataসম্পত্তিটি ভরাট হয় না:

public function setOrigData($key=null, $data=null)
{
    if (Mage::app()->getStore()->isAdmin()) {
        return parent::setOrigData($key, $data);
    }

    return $this;
}

সুতরাং আপনি যখন পণ্যটি সংরক্ষণ করার চেষ্টা করবেন তখন আপনার বর্ণিত ত্রুটিটি উত্থাপিত হবে।

আপনি যখনই বর্তমান স্টোরটি অ্যাডমিনে পরিবর্তন করেন আপনি এই সমস্যার সমাধান করতে পারেন, যেমন @ ম্যাগবয়ের কোড সহ:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

আরও ভাল ব্যবহার Mage_Core_Model_App_Emulation

এবং আমার পছন্দসই সমাধানটি পদ্ধতিটি প্রসারিত Mage_Catalog_Model_Productএবং প্রতিস্থাপন করাsetOrigData

public function setOrigData($key = null, $data = null)
{
    if (is_null($key)) {
        $this->_origData = $this->_data;
    } else {
        $this->_origData[$key] = $data;
    }
    return $this;
}

আমি এখানে পুনর্লিখনের কথা বলছি না ! সংরক্ষণ সক্ষম করতে কেবলমাত্র এই জায়গাটিতে আপনার মডেলটি ব্যবহার করুন। তারপরে আপনার সুরক্ষা বৈশিষ্ট্যটি অন্য যে কোনও স্থানে এখনও সক্রিয় রয়েছে।


7

এই লাইন কোড যুক্ত করার চেষ্টা করুন:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

আমি নিশ্চিত না যে আপনাকে এখন কেন ম্যাগান্টো-র সংস্করণে এটি করতে হবে। অন্য কেউ ব্যাখ্যা করতে পারে?


আমি প্রশাসনের স্রোতশালা সেট করে এবং পণ্যটি সংরক্ষণ করার পরে, আমাকে কী এটি আবার মূল মানটিতে সেট করতে হবে?
জিউসেপ

1
@ জিউজ্পে এটি নির্ভর করে আপনি পরে অনুরোধটি দিয়ে কী করছেন; এটি পরিচ্ছন্ন এবং আপনি যদি এটি করেন তবে কম সমস্যার দিকে নিয়ে যাবে
সিমোন্টেসোরেরার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.