Magento Ölümcül Hata: Nesne olmayan üye işlev getSku () Çağrı

4 Cevap php

Ben geliştiriyorum Magento dükkanda tuhaf bir hata karşısında gelmiş ve çevrimiçi benim sorular rağmen, o başka hiç kimse aynı koşullar altında tam olarak bu hatayı gördü görünür. Lemme 'Splain.

Hata mesajının tam metni şudur:

Fatal error: olmayan bir nesne / yol / ilgili / sunucu / app / kod / çekirdek / Büyücü / Katalog / Model / Ürün / Seçenek / Tür / Select.php on on) (bir üye işlev getSku Çağrı line 221.

Şimdi, diğerleri bu hata mesajı aldık - bu 1.3.1 yol haritası ele ve sözde tespit edildi (http://www.magentocommerce.com/roadmap/release/1.3.1). Madde olduğu için özel seçenekler olsaydı, bu hata mesajı döngü olur - onlar sepetinize bir öğe eklemek için çalıştı nerede Ancak, bu diğer hata iletileri koşullar vardı.

Herhangi bir özel seçenekleri olmadan - birlikte veya yapılandırılabilir değil - benim durum ben bir BASİT öğesi olması. Ben herhangi bir sorun olmadan sepetinize ekleyebilirsiniz. Ben tüm çıkış prosedürü aracılığıyla Ama kaçarsan, sipariş üzerine, hata mesajı beyaz bir ekranda görüntülenir. Tarayıcıda URL ben ödeme başarı sayfada olduğumu gösterir.

VE, sipariş Magento VE Authorize.net ikisi tarafından tescil alma, mükemmel geçmesi için görünür.

Ben bildiğim kadarıyla gitmek gibi hata ayıklama denedim, ancak bu kişinin beni şaşkına var.

Başvuru için, ben Magento 1.3.2.4 değilim. Ben ilk hatayı aldığımda tüm çekirdek dosyaları yeniden ve hala hata çoğaltmak mümkün oldu.

Ben test etmeye devam edeceğim, ama herkes bu neden oluyor hakkında HERHANGİ parlak fikirleri varsa, ben sizin düşüncelerinizi duymak isteriz. Ben başlatmak çok yakın olduğum ve bu şey her şey üzerinde saçma koyabilirsiniz.

4 Cevap

Ben daha önce bu hatayı yaşadım ve ayrıca bunu çözmek konusunda herhangi bir hit elde değildi. Yani, ben hata mesajı düzeltmek için çekirdek dosyaları değiştirmek zorunda kaldı. Sorun Mage_Catalog_Model_Product_Option::getValueById() null değeri döndürebilir ANCAK Catalog/Model/Product/Option/Type/Select.php bu olasılığı kontrol değildir.

İşte benim için çalıştı çözüm:

Açık app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php

Değişim line 121 den:

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

Için:

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

Ben her zaman çekirdek dosyalarını değiştirerek nefret ediyorum ama bir hata var ne yapabilirim çok başka değil!

Ben hala getPrice() ile ilgili benzer bir başka hata alıyorum, çünkü aynı zamanda yayınlanmıştır pygorex1 ancak adımlar, çizgileri Select.php dosyasındaki 191-195 yerini aldığı izledi. Ben ver Magento var. 1.3.2.4.

Original code from lines 191-195:

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

Here is the code I created to replace lines 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;

Bilginize - Ben bir PHP programcısı değilim. Ben sadece pygorex1 koduna göre bu sorunu gidermek için kod rework anlamaya oldu. Yani, doğru yazmadım iyi bir şans var. Ancak, ben çok gurur duyuyorum ki (benim için sorunu çözmek mi :)

Var aynı sorun. Bunu Backtraced ve admin emir düzenlerken benim için olur ve bu düzenin siparişin beri çıkarıldı bireysel seçeneği ile en az bir ürünü içerir belirledi.

Böyle bir emri düzenlerken o ürünün sadece kaldırılır böylece sonra üç dosyaları düzeltildi - "local" kapsamı çok çekirdek dosyaların çalışan tüm değişiklikler dokunulmaz:

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

(Arama)

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

(Prepend)

/* 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

(Arama)

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

(Yerine)

/* 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

(Arama)

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

(Yerine)

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;
}

Eh, benim müşteri için aynı hata vardı, Magento tek bir sunucu üzerinde para cezası çalışıyordu ama diğer yandan bu yüzden (geçişten sonra) yeni yükleme ile yanlış bir şey olmalı ama. Ben kodu ile oynamak sadece DB tamir ve düzgün çalışmaya başladı yaramadı.