خطأ فادح في الماجنتو:استدعاء دالة العضو getSku() على كائن غير كائن

StackOverflow https://stackoverflow.com/questions/1801311

سؤال

لقد صادفت خطأً غريبًا في متجر Magento الذي أقوم بتطويره، وعلى الرغم من استفساراتي عبر الإنترنت، يبدو أنه لم يسبق لأحد أن رأى هذا الخطأ بالضبط في نفس الظروف.Lemme 'splain.

النص الكامل لرسالة الخطأ هو كما يلي:

خطأ فادح: استدعاء وظيفة العضو getSku() على غير الكائن في /path/on/server/app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php على السطر 221.

الآن، تلقى الآخرون رسالة الخطأ هذه - تمت معالجتها ومن المفترض إصلاحها في خريطة الطريق 1.3.1 (http://www.magentocommerce.com/roadmap/release/1.3.1).ومع ذلك، كانت ظروف رسائل الخطأ الأخرى تلك هي حيث حاولوا إضافة عنصر إلى سلة التسوق - إذا كان العنصر يحتوي على خيارات مخصصة، فسيتم تكراره إلى رسالة الخطأ هذه.

موقفي هو أن لدي عنصرًا بسيطًا - غير مجمع أو قابل للتكوين - بدون أي خيارات مخصصة.يمكنني إضافته إلى سلة التسوق دون أي مشكلة.ولكن إذا قمت بإجراء عملية الدفع بأكملها، عند تقديم الطلب، تظهر رسالة الخطأ على شاشة بيضاء.يُظهر لي عنوان URL الموجود في المتصفح أنني في صفحة نجاح الدفع.

ويبدو أن الطلب يسير بشكل مثالي، حيث تم تسجيله بواسطة كل من Magento وAuthorize.net.

لقد حاولت تصحيح الخطأ بقدر ما أستطيع، ولكن هذا الأمر جعلني في حيرة من أمري.

للإشارة، أنا في Magento 1.3.2.4.عندما تلقيت الخطأ لأول مرة، قمت بإعادة تثبيت كافة الملفات الأساسية وما زلت قادرًا على تكرار الخطأ.

سأستمر في الاختبار، ولكن إذا كان لدى أي شخص أي أفكار مشرقة حول سبب حدوث ذلك، فأنا أحب أن أسمع أفكارك.أنا قريب جدًا من الإطلاق وهذا الشيء يمكن أن يضع كيبوش على الأمر برمته.

هل كانت مفيدة؟

المحلول

ولقد كان هذا الخطأ قبل وكان أيضا لا تحصل على أي يضرب على كيفية حلها. لذا، كان لي لتعديل الملفات الأساسية لإصلاح رسالة الخطأ. المشكلة هي Mage_Catalog_Model_Product_Option::getValueById() يمكن إرجاع قيمة خالية BUT Catalog/Model/Product/Option/Type/Select.php لا يتم التحقق من وجود هذا الاحتمال.

وهنا الحل الذي عملت بالنسبة لي:

فتح app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php

وتغيير خط 121 من:

$result = $option->getValueById($optionValue)->getSku();

ل:

$o= $option->getValueById($optionValue);
$result = is_object($o) ? $o->getSku() : null;

وأنا دائما يكرهون تغيير الملفات الأساسية ولكن عندما يكون هناك خلل ليس هناك الكثير آخر يمكنني القيام به!

نصائح أخرى

وتابعت أن الخطوات التي pygorex1 نشرها ولكن أيضا استبدال خطوط 191-195 في ملف Select.php، لأنني كنت لا يزال الحصول على خطأ مماثل آخر عن getPrice(). لدي الماجنتو الاصدار. 1.3.2.4.

ورمز الأصلي من خطوط 191-195:

$result = $this->_getChargableOptionPrice(
$option->getValueById($optionValue)->getPrice(),
$option->getValueById($optionValue)->getPriceType() == 'percent',
$basePrice
);

وهنا هو رمز أنا خلقت ليحل محل خطوط 191-195:

$z= $option->getValueById($optionValue);
$result = is_object($z) ? $z ->getPrice() : null;

$zz = $option->getValueById($optionValue);
$result = is_object($zz) ? $zz ->getPriceType() == 'percent' : $basePrice;

وFYI - أنا لست مبرمج PHP. أنا مجرد حدث لمعرفة كيفية إعادة صياغة قانون لجعل حل هذه المشكلة على أساس قانون pygorex1 ل. لذلك، هناك فرصة جيدة أنا لم أكتب بشكل صحيح. ومع ذلك، فإنه لم يحل المشكلة بالنسبة لي (وأنا فخور بدلا من:)

حصلت على نفس المشكلة.لقد قمت بتتبعه وحدد أنه يحدث بالنسبة لي عند تحرير الطلبات في المشرف ويحتوي هذا الطلب على منتج واحد على الأقل مع خيار فردي تمت إزالته منذ تقديم الطلب.

تم إصلاح ثلاثة ملفات بحيث تتم إزالة المنتج ببساطة عند تحرير مثل هذا الطلب - تعمل جميع التعديلات في النطاق "المحلي" بحيث يتم ترك الملفات الأساسية دون تغيير:

1.app/code/local/Mage/Catalog/Model/Product/Option/Type/Select.php:221

(يبحث)

$result = $option->getValueById($optionValue)->getSku();

(ملحق)

/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
if (is_null($option->getValueById($optionValue))) {
    throw new Exception('missing product option');
}

2.app/code/local/Mage/Sales/Model/Quote.php:695

(يبحث)

$item = $this->_addCatalogProduct($candidate, $candidate->getCartQty());

(يستبدل)

/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
try {
    $item = $this->_addCatalogProduct($candidate, $candidate->getCartQty());
} catch ( Exception $e ) {
    if ($e->getMessage()=='missing product option') { return null; }
        throw new Exception($e->getMessage());
}

3.app/code/local/Mage/Adminhtml/Model/Sales/Order/Create.php:288

(يبحث)

if (is_string($item)) {
    return $item;
}

(يستبدل)

if (is_string($item)) {
    return $item;
/* hotfix for - PHP Fatal error:  Call to a member function getSku() on a non-object - occurs on admin order edit if a product option has been removed */
} elseif (is_null($item)) {
    return $this;
}

حسنا، كان لي نفس الخطأ لموكلي، والماجنتو تعمل بشكل جيد على خادم واحد ولكن ليس من جهة أخرى لذلك أنا على الرغم من أنه يجب أن يكون هناك شيء خاطئ مع تثبيت جديد (بعد الهجرة). لم ألعب مع رمز، إصلاح فقط DB والتي تعمل بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top