Question

J'ai rencontré une erreur bizarre dans la boutique Magento que je développe et, malgré mes recherches en ligne, il semble que personne d'autre n'ait jamais vu cette erreur exacte dans les mêmes circonstances. Lemme 'splain.

Le texte complet du message d'erreur est le suivant:

Erreur fatale: Appel d'une fonction membre getSku () sur un non-objet dans / chemin / sur / serveur / app / code / core / Mage / Catalogue / Modèle / Produit / Option / Tapez / Select.php à la ligne 221.

À présent, ce message d'erreur a été envoyé à d'autres personnes - le problème a été résolu et supposé avoir été corrigé dans la feuille de route 1.3.1 ( http://www.magentocommerce.com/roadmap/release/1.3.1 ). Cependant, les circonstances de ces autres messages d'erreur ont été celles où ils ont essayé d'ajouter un article au panier. Si l'article avait des options personnalisées, le message d'erreur s'afficherait en boucle.

Mon cas est que j’ai un élément SIMPLE - non groupé ni configurable - sans options personnalisées. Je peux l'ajouter au panier sans problème. Mais si je lance toute la procédure de paiement, lors de la commande, le message d'erreur apparaît sur un écran blanc. L’URL du navigateur m’indique que je suis sur la page de réussite du paiement.

AND, la commande semble parfaitement passer et a été enregistrée à la fois par Magento ET Authorize.net.

J'ai essayé de corriger l'erreur autant que possible, mais celle-ci me laisse perplexe.

Pour référence, je & # 8217; m dans Magento 1.3.2.4. Lorsque j'ai reçu l'erreur pour la première fois, j'ai réinstallé tous les fichiers de base et j'étais toujours en mesure de répliquer l'erreur.

Je vais continuer à tester, mais si quelqu'un a des idées brillantes sur la raison pour laquelle cela se produit, j'aimerais entendre vos pensées. Je suis si proche de lancer et cette chose pourrait mettre le kibosh sur le tout.

Était-ce utile?

La solution

J'ai déjà eu cette erreur et je ne savais pas comment la résoudre. J'ai donc dû modifier les fichiers de base pour corriger le message d'erreur. Le problème est que Mage_Catalog_Model_Product_Option :: getValueById () peut renvoyer une valeur nulle. MAIS Catalogue / Modèle / Produit / Option / Type / Select.php ne vérifie pas cette possibilité.

Voici la solution qui a fonctionné pour moi:

Ouvrez app / code / core / Mage / Catalogue / Modèle / Produit / Option / Type / Select.php

Modifier la ligne 121 de:

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

À:

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

Je déteste toujours changer les fichiers core, mais quand il y a un bogue, je ne peux pas faire grand chose d'autre!

Autres conseils

J'ai suivi les étapes que pygorex1 a postées, mais j'ai également remplacé les lignes 191 à 195 dans le fichier Select.php , car je rencontrais encore une erreur similaire à propos de getPrice () . J'ai Magento ver. 1.3.2.4.

Code original des lignes 191-195:

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

Voici le code que j'ai créé pour remplacer les lignes 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 - Je ne suis pas un programmeur PHP. Il m'est arrivé de comprendre comment retravailler le code pour résoudre ce problème en fonction du code de pygorex1. Donc, il y a de bonnes chances que je ne l'aie pas écrit correctement. Cependant, cela a résolu le problème pour moi (ce dont je suis plutôt fier:)

Vous avez le même problème. La retracer et l'identifier se produit lorsque je modifie des commandes dans admin et que cette commande contient au moins un produit avec une option individuelle qui a été supprimée depuis la commande.

Nous avons corrigé trois fichiers afin que le produit soit simplement supprimé lors de la modification d'un tel ordre - toutes les modifications fonctionnent dans "local". portée pour les fichiers de base laissés intacts:

1. app / code / local / Mage / Catalogue / Modèle / Produit / Option / Type / Sélection.php: 221

(recherche)

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

(préfixe)

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

(recherche)

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

(remplacer)

/* 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 / Modèle / Vente / Commande / Create.php: 288

(recherche)

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

(remplacer)

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 bien, j'avais la même erreur pour mon client, Magento fonctionnait correctement sur un serveur mais pas sur l'autre. J'ai donc pensé qu'il devait y avoir un problème avec la nouvelle installation (après la migration). Je n'ai pas joué avec le code, j'ai juste réparé la base de données et tout a commencé à fonctionner correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top