Frage

Ich habe über einen bizarren Fehler in dem Magento-Shop komme Ich entwickle und trotz meiner Anfragen online, scheint es sonst niemand jemals genau diesen Fehler unter den gleichen Umständen gesehen hat. Lemme ‚splain.

Der vollständige Text der Fehlermeldung ist folgende:

Fatal error: Rufen Sie auf eine Elementfunktion getSku () auf einem Nicht-Objekt in / path / auf / server / app / code / core / Mage / Katalog / Modell / Produkt / Option / Typ / Select.php auf der Leitung 221.

Nun haben andere diese Fehlermeldung bekommen - es wurde angesprochen und fest angeblich in dem 1.3.1-Roadmap ( http://www.magentocommerce.com/roadmap/release/1.3.1 ). Allerdings waren die Umstände dieser anderen Fehlermeldungen, wenn sie einen Artikel in den Warenkorb zu legen versucht -., Wenn das Element benutzerdefinierte Optionen hat, es würde Schleife zu dieser Fehlermeldung

Meine Situation ist, dass ich ein einfaches Element - nicht gebündelt oder konfigurierbar - ohne benutzerdefinierte Optionen. Ich kann es ohne Probleme in den Warenkorb legen. Aber wenn ich durch die gesamte Kasse Prozedur ausführen, auf den Auftrag vergeben, erscheint die Fehlermeldung auf einem weißen Bildschirm. Die URL im Browser zeigt mir, dass ich auf der Kasse Erfolg Seite bin.

AND, erscheint die Reihenfolge durch perfekt zu gehen, sowohl von Magento und Authorize.net registriert zu werden.

Ich habe versucht, den Fehler Debuggen so weit wie ich gehen kann, aber dieses hat mich ratlos.

Als Referenz, ich bin in Magento 1.3.2.4. Als ich zuerst den Fehler erhielt ich neu installierte all Core-Dateien und war noch in der Lage, den Fehler zu reproduzieren.

Ich werde zu testen, um fortzufahren, aber wenn jemand irgendwelche Ideen sind gefragt hat, warum dies geschieht, würde ich gerne Ihre Meinung zu hören. Ich bin so nah zu starten und dieses Ding der kibosh auf der ganzen Sache setzen könnte.

War es hilfreich?

Lösung

Ich habe diesen Fehler hatte vor und wurde auch keine Treffer bekommen, wie es zu lösen. Also, ich hatte die Core-Dateien zu modifizieren, um die Fehlermeldung zu beheben. Das Problem ist Mage_Catalog_Model_Product_Option::getValueById() einen Nullwert zurückgeben kann, aber Catalog/Model/Product/Option/Type/Select.php wird diese Möglichkeit nicht zu überprüfen.

Hier ist die Lösung, die für mich gearbeitet:

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

Ändern Sie Zeile 121 aus:

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

An:

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

Ich hasse immer Core-Dateien ändern, aber wenn ein Fehler gibt es gibt es nicht viel kann ich sonst noch tun!

Andere Tipps

Ich folgte, dass die Schritte, die gebucht pygorex1 sondern auch Linien 191-195 in der Select.php Datei ersetzt, weil ich noch einen ähnlichen Fehler über den getPrice() bekommen wurde. Ich habe Magento ver. 1.3.2.4.

Original-Code von Linien 191-195:

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

Hier ist der Code, den ich erstellt Zeilen ersetzen 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 - Ich bin kein PHP-Programmierer. Ich war zufällig gerade, um herauszufinden, wie Sie den Code zu überarbeiten, um dieses Problem zu beheben, macht basierend auf pygorex1 Code. Also, gibt es eine gute Chance, dass ich es nicht richtig geschrieben hat. Aber es hat das Problem für mich beheben (was ich bin ziemlich stolz:)

Hat gleiches Problem. BACKTRACED es und identifizierte es für mich geschieht, wenn Aufträge in admin und das um mindestens ein Produkt mit einer einzelnen Option bearbeiten, die seit der Bestellung wurde entfernt wurde.

Fixed drei Dateien dann so, dass das Produkt einfach entfernt wird, wenn eine solche Ordnung Bearbeitung - alle Änderungen arbeiten in „local“ scope so Core-Dateien unberührt gelassen:

1. app / code / local / Mage / Katalog / Modell / Produkt / Option / Typ / Select.php: 221

(Suche)

$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 / Vertrieb / Modell / Quote.php: 695

(Suche)

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

(ersetzen)

/* 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 / Vertrieb / Bestellung / create.php: 288

(Suche)

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

(ersetzen)

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

Nun hatte ich den gleichen Fehler für meine Kunden, Magento auf einem Server fein gearbeitet, aber nicht auf der anderen Seite so, obwohl ich es muss etwas falsch mit Neuinstallation sein (nach der Migration). Ich habe nicht mit dem Code spielen, reparierte nur die DB und es begann richtig zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top