문제

나는 내가 개발하고있는 마젠토 상점에서 기괴한 오류를 발견했으며 온라인 문의에도 불구하고 같은 상황 에서이 정확한 오류를 본 적이없는 것으로 보입니다. lemme 'splain.

오류 메시지의 전체 텍스트는 다음과 같습니다.

치명적 오류: 221 행에서/spath/on/server/app/code/mage/mage/catalog/model/product/option/type/select.php에서 nonobject에서 member function getSku ()로 호출하십시오.

이제 다른 사람들은이 오류 메시지를 받았습니다. 1.3.1 로드맵에서 해결되었고 아마도 고정되었습니다.http://www.magentocommerce.com/roadmap/release/1.3.1). 그러나 다른 오류 메시지의 상황은 항목을 카트에 추가하려고 시도한 곳이었습니다. 항목에 사용자 정의 옵션이있는 경우이 오류 메시지로 고정됩니다.

내 상황은 사용자 정의 옵션없이 번들 또는 구성 가능하지 않은 간단한 항목이 있다는 것입니다. 문제없이 카트에 추가 할 수 있습니다. 그러나 전체 체크 아웃 절차를 실행하면 순서를 작성하면 오류 메시지가 흰색 화면에 나타납니다. 브라우저의 URL은 내가 결제 성공 페이지에 있다는 것을 보여줍니다.

그리고 주문은 Magento와 Authorize.net에 의해 등록되어 완벽하게 진행되는 것으로 보입니다.

내가 갈 수있는 한 오류를 디버깅하려고 시도했지만, 이것은 나를 괴롭 혔습니다.

참고로, 나는 Magento 1.3.2.4에 있습니다. 처음 오류를 받았을 때 모든 핵심 파일을 다시 설치하고 오류를 여전히 복제 할 수있었습니다.

나는 계속 테스트 할 것입니다. 그러나 누군가가 왜 이런 일이 일어나고 있는지에 대한 밝은 아이디어가 있다면, 나는 당신의 생각을 듣고 싶습니다. 나는 발사에 너무 가깝고이 일은 Kibosh를 모든 것에 넣을 수 있습니다.

도움이 되었습니까?

해결책

나는 전에이 오류가 있었고 그것을 해결하는 방법에 대한 조회를 얻지 못했습니다. 따라서 오류 메시지를 수정하려면 코어 파일을 수정해야했습니다. 문제는 Mage_Catalog_Model_Product_Option::getValueById() 널 값을 반환 할 수 있지만 Catalog/Model/Product/Option/Type/Select.php 이 가능성을 확인하지 않습니다.

다음은 저를 위해 일한 솔루션입니다.

열려 있는 app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php

Line 121 변경 :

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

에게:

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

나는 항상 핵심 파일을 바꾸는 것을 싫어하지만 버그가 있으면 할 수있는 일이 많지 않습니다!

다른 팁

나는 Pygorex1이 게시 한 단계를 따랐지만 191-195 행을 대체했습니다. Select.php 파일, 나는 여전히 또 다른 비슷한 오류가 발생했기 때문에 getPrice(). 나는 Magento Ver가 있습니다. 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;

참고 - 저는 PHP 프로그래머가 아닙니다. 방금 Pygorex1의 코드를 기반 으로이 문제를 해결하기 위해 코드를 재 작업하는 방법을 알아 냈습니다. 따라서 올바르게 쓰지 않은 좋은 기회가 있습니다. 그러나 그것은 나에게 문제를 해결했다 (나는 오히려 자랑 스럽다 :)

같은 문제가 있습니다. admin에서 주문을 편집 할 때 그것을 뒤로하고 확인했으며 해당 주문에는 주문이 배치 된 이후로 제거 된 개별 옵션이있는 하나 이상의 제품이 포함되어 있습니다.

그러한 순서를 편집 할 때 제품이 단순히 제거되도록 3 개의 파일을 수정했습니다. "로컬"범위에서 작동하는 모든 수정 사항이 있으므로 코어 파일이 손대지 않은 상태로 남겨 둡니다.

1. 앱/코드/로컬/마법사/카탈로그/모델/제품/옵션/유형/select.php : 221

(검색)

$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. 앱/코드/로컬/마법사/판매/모델/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;
}

글쎄, 나는 내 클라이언트에 대해 동일한 오류가 있었는데, Magento는 한 서버에서는 잘 작동했지만 다른 서버에서는 잘 작동하지 않았으므로 새 설치 후에는 문제가되지 않아야합니다 (마이그레이션 후). 나는 코드를 가지고 놀지 않았고 방금 DB를 수리했고 제대로 작동하기 시작했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top