Pergunta

Eu vim através de um erro bizarro no Magento loja que estou desenvolvendo e apesar dos meus inquéritos on-line, parece que ninguém jamais viu esse erro exata nas mesmas circunstâncias. splain Lemme'.

O texto completo da mensagem de erro é o seguinte:

Erro fatal: chamada para uma função membro getSku () em um não-objeto em / path / on / servidor / app / code / core / Mago / Catálogo / modelo / product / Opção / tipo / Select.php na linha 221.

Agora, outros têm conseguido esta mensagem de erro - ela foi dirigida e supostamente fixado no 1.3.1 roteiro ( http://www.magentocommerce.com/roadmap/release/1.3.1 ). No entanto, as circunstâncias dessas outras mensagens de erro foram onde eles tentaram adicionar um item ao carrinho -. Se o item teve opções personalizadas, seria loop para esta mensagem de erro

A minha situação é que eu tenho um simples item - não empacotados ou configurável - sem quaisquer opções personalizadas. I pode adicioná-lo ao carrinho sem nenhum problema. Mas se eu correr por todo o procedimento de check-out, após a colocação da ordem, a mensagem de erro aparece em uma tela branca. O URL nos shows navegador me que eu sou na página de checkout sucesso.

E, a ordem parece passar perfeitamente, sendo registrado por ambos Magento E Authorize.net.

Eu tentei depurar o erro, tanto quanto eu posso ir, mas esse mundo tem me perplexo.

Para referência, eu estou em Magento 1.3.2.4. Quando eu recebi o erro que eu reinstalado todos os arquivos principais e ainda foi capaz de replicar o erro.

Vou continuar a testar, mas se alguém tiver alguma idéia brilhante sobre por que isso está acontecendo, eu adoraria ouvir seus pensamentos. Estou tão perto de lançar e isso poderia colocar o kibosh sobre a coisa toda.

Foi útil?

Solução

Eu tive esse erro antes e também não estava recebendo qualquer hits sobre como resolvê-lo. Então, eu tive que modificar os arquivos principais para corrigir a mensagem de erro. O problema é Mage_Catalog_Model_Product_Option::getValueById() pode retornar um valor nulo, mas Catalog/Model/Product/Option/Type/Select.php não está verificando para esta possibilidade.

Aqui está a solução que funcionou para mim:

Open app/code/core/Mage/Catalog/Model/Product/Option/Type/Select.php

Alterar linha 121 de:

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

Para:

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

Eu sempre odeio mudando arquivos principais, mas quando há um bug que não há muito que eu possa fazer!

Outras dicas

Eu segui esse passos que pygorex1 postados mas também substituíram linhas 191-195 no arquivo Select.php, porque eu ainda estava recebendo outro erro semelhante sobre a getPrice(). Eu tenho Magento ver. 1.3.2.4.

código original de linhas 191-195:

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

Aqui está o código que eu criei para substituir linhas 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 - Eu não sou um programador PHP. Aconteceu de eu descobrir como refazer o código para fazer corrigir esse problema com base no código de pygorex1. Então, há uma boa chance de eu não escrevê-lo corretamente. No entanto, ele fez solucione o problema para mim (que estou um pouco orgulhoso de:)

Tem mesmo problema. Backtraced-lo e identificado acontece para mim durante a edição de ordens em administração e que a ordem contém pelo menos um produto com uma opção individual que foi removido desde a ordem foi colocada.

Fixed três arquivos, em seguida, de modo que o produto é simplesmente removido durante a edição de uma tal ordem - todas as modificações trabalhando no escopo "local" para arquivos principais deixado intocado:

1. app / code / local / Mago / Catálogo / modelo / product / Opção / Tipo / Select.php: 221

(busca)

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

(precedido)

/* 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 / código / local / Mago / Vendas / Modelo / Quote.php: 695

(busca)

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

(substituir)

/* 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 / Mago / Adminhtml / Modelo / Vendas / Order / Create.php: 288

(busca)

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

(substituir)

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

Bem, eu tive o mesmo erro para o meu cliente, Magento estava funcionando bem em um servidor, mas não no outro, então eu embora deva haver algo de errado com a nova instalação (após a migração). Eu não jogar com o código, apenas reparou o DB e começou a funcionar correctamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top