Domanda

Ho riscontrato un bizzarro errore nel negozio Magento che sto sviluppando e nonostante le mie richieste online, sembra che nessun altro abbia mai visto questo errore esatto nelle stesse circostanze. Mi sono spiato.

Il testo completo del messaggio di errore è questo:

Errore irreversibile: chiamata a una funzione membro getSku () su un non oggetto in / path / on / server / app / code / core / Mage / Catalog / Model / Product / Option / Digita / Select.php sulla riga 221.

Ora, altri hanno ricevuto questo messaggio di errore: è stato risolto e presumibilmente corretto nella roadmap 1.3.1 ( http://www.magentocommerce.com/roadmap/release/1.3.1 ). Tuttavia, le circostanze di quegli altri messaggi di errore sono state quelle in cui hanno tentato di aggiungere un articolo al carrello: se l'articolo avesse opzioni personalizzate, sarebbe passato a questo messaggio di errore.

La mia situazione è che ho un oggetto SEMPLICE - non raggruppato o configurabile - senza opzioni personalizzate. Posso aggiungerlo al carrello senza problemi. Ma se eseguo l'intera procedura di pagamento, al momento dell'ordine, il messaggio di errore appare su uno schermo bianco. L'URL nel browser mi mostra I & # 8217; m nella pagina di successo del checkout.

E, l'ordine sembra andare a buon fine, registrandosi sia su Magento che su Authorize.net.

Ho provato a eseguire il debug dell'errore per quanto posso, ma questo mi ha lasciato perplesso.

Per riferimento, I & # 8217; m in Magento 1.3.2.4. Quando ho ricevuto l'errore per la prima volta ho reinstallato tutti i file core ed ero ancora in grado di replicare l'errore.

Continuerò a testare, ma se qualcuno ha QUALUNQUE idea brillante sul perché questo accada, mi piacerebbe sentire i tuoi pensieri. Sono così vicino al lancio e questa cosa potrebbe mettere il kibosh sull'intera faccenda.

È stato utile?

Soluzione

Ho già riscontrato questo errore e non ho riscontrato alcun riscontro su come risolverlo. Quindi, ho dovuto modificare i file core per correggere il messaggio di errore. Il problema è che Mage_Catalog_Model_Product_Option :: getValueById () può restituire un valore null MA Catalog / Model / Product / Option / Type / Select.php NON sta verificando questa possibilità.

Ecco la soluzione che ha funzionato per me:

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

Cambia la riga 121 da:

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

A:

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

Odio sempre cambiare i file core ma quando c'è un bug non c'è molto altro che posso fare!

Altri suggerimenti

Ho seguito i passaggi che pygorex1 ha pubblicato ma ha anche sostituito le righe 191-195 nel file Select.php , perché continuavo a ricevere un altro errore simile sul getPrice () . Ho Magento ver. 1.3.2.4.

Codice originale dalle righe 191-195:

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

Ecco il codice che ho creato per sostituire le righe 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;

Cordiali saluti, NON sono un programmatore PHP. Mi è capitato di capire come rielaborare il codice per risolvere questo problema in base al codice di pygorex1. Quindi, c'è una buona possibilità che non l'ho scritto correttamente. Tuttavia, ha risolto il problema per me (di cui sono piuttosto orgoglioso :)

Ha lo stesso problema. Ho rintracciato e identificato ciò accade per me quando si modificano gli ordini in admin e quell'ordine contiene almeno un prodotto con un'opzione individuale che è stata rimossa dal momento in cui è stato effettuato l'ordine.

Risolti tre file in modo che il prodotto venisse semplicemente rimosso durante la modifica di un tale ordine - tutte le modifiche funzionanti in "quot" local " ambito in modo che i file core non siano stati toccati:

1. app / code / local / Mage / Catalogo / modello / prodotto / Opzione / tipo / Select.php: 221

(ricerca)

$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 / Vendite / Modello / Quote.php: 695

(ricerca)

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

(sostituire)

/* 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 / / Mage / Adminhtml / model / Vendite locali / ordine / create.php: 288

(ricerca)

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

(sostituire)

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

Bene, ho avuto lo stesso errore per il mio client, Magento stava funzionando bene su un server ma non sull'altro, quindi ho pensato che dovesse esserci qualcosa di sbagliato nella nuova installazione (dopo la migrazione). Non ho giocato con il codice, ho appena riparato il DB e ha iniziato a funzionare correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top