Pregunta

Me he encontrado con un error extraño en la tienda de Magento que estoy desarrollando y, a pesar de mis consultas en línea, parece que nadie más ha visto este error exacto en las mismas circunstancias. Lemme 'splain.

El texto completo del mensaje de error es este:

Error grave: llame a una función miembro getSku () en un no-objeto en / path / on / server / app / code / core / Mage / Catalog / Model / Product / Option / Escriba / Select.php en la línea 221.

Ahora, otros han recibido este mensaje de error: se solucionó y supuestamente se corrigió en la hoja de ruta 1.3.1 ( http://www.magentocommerce.com/roadmap/release/1.3.1 ). Sin embargo, las circunstancias de esos otros mensajes de error fueron cuando intentaron agregar un artículo al carrito; si el elemento tuviera opciones personalizadas, aparecería un bucle a este mensaje de error.

Mi situación es que tengo un elemento SIMPLE, no empaquetado ni configurable, sin ninguna opción personalizada. Puedo añadirlo al carrito sin ningún problema. Pero si ejecuto todo el proceso de pago, al realizar el pedido, el mensaje de error aparece en una pantalla blanca. La URL en el navegador me muestra I & # 8217; m en la página de éxito de pago.

Y, el orden parece ir perfectamente, registrándose por Magento Y Authorize.net.

He intentado depurar el error hasta donde puedo ir, pero este me ha dejado perplejo.

Para referencia, I & # 8217; m en Magento 1.3.2.4. Cuando recibí el error por primera vez, reinstalé todos los archivos principales y aún pude replicar el error.

Voy a continuar con las pruebas, pero si alguien tiene ALGUNAS ideas brillantes sobre por qué sucede esto, me encantaría escuchar sus pensamientos. Estoy tan cerca del lanzamiento y esto podría ponerle el puño a todo.

¿Fue útil?

Solución

He tenido este error antes y tampoco recibí ninguna respuesta sobre cómo resolverlo. Por lo tanto, tuve que modificar los archivos principales para corregir el mensaje de error. El problema es Mage_Catalog_Model_Product_Option :: getValueById () puede devolver un valor nulo PERO Catálogo / Modelo / Producto / Opción / Tipo / Select.php NO está verificando esta posibilidad.

Aquí está la solución que funcionó para mí:

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

Cambia la línea 121 desde:

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

Para:

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

Siempre odio cambiar los archivos principales, pero cuando hay un error, ¡no hay mucho más que pueda hacer!

Otros consejos

Seguí los pasos que publicó pygorex1 pero también reemplazé las líneas 191-195 en el archivo Select.php , porque aún recibía otro error similar sobre el getPrice () . Tengo la versión de magento. 1.3.2.4.

Código original de las líneas 191-195:

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

Aquí está el código que creé para reemplazar las líneas 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 - NO soy un programador de PHP. Acabo de descubrir cómo volver a trabajar el código para solucionar este problema según el código de pygorex1. Entonces, hay una buena posibilidad de que no lo haya escrito correctamente. Sin embargo, me solucionó el problema (del cual estoy bastante orgulloso)

Tengo el mismo problema. Retrocedí e identifiqué que me sucede cuando edito pedidos en admin y ese pedido contiene al menos un producto con una opción individual que se eliminó desde que se realizó el pedido.

Se corrigieron tres archivos para que el producto simplemente se elimine al editar dicho pedido; todas las modificaciones funcionan en " local " alcance para que los archivos principales queden intactos:

1. app / code / local / Mage / Catalog / Model / Product / Option / Type / Select.php: 221

(buscar)

$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 / Sales / Model / Quote.php: 695

(buscar)

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

(reemplazar)

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

(buscar)

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

(reemplazar)

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

Bueno, tuve el mismo error para mi cliente, Magento estaba funcionando bien en un servidor pero no en el otro, así que pensé que debía haber algún problema con la nueva instalación (después de la migración). No jugué con el código, simplemente reparé la base de datos y comenzó a funcionar correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top