Call to a member function extend() on a non-object en Magento

Hace un tiempo ya me encontré con éste error.

En ese momento, en los foros no había información alguna (al principio me pareció estraño y supuse que podría ser algo particular de mi entorno de desarrollo).

El error que se nos imprime es el siguiente:

Fatal error: Call to a member function extend() on a non-object in /var/www/magento/app/code/core/Mage/Core/Model/Mysql4/Config.php on line 136

La clase en la que se da el error es Mage_Core_Model_Mysql4_Config ubicada en:

/app/code/core/Mage/Core/Model/Mysql4/Config.php

El problema lo encontramos a partir de la línea 133 (puede variar dependiendo de la versión de Magento que estemos utilizando). Es ahí donde se presenta un foreach que lee información sobre las configuraciones de la plataforma.

// extend website config values to all associated stores
foreach ($websites as $wId=>$website) {
    $extendSource = $xmlConfig->getNode('websites/'.$website['code']);
    if (isset($website['stores'])) {
        foreach ($website['stores'] as $sId=>$sCode) {
            $storeNode = $xmlConfig->getNode('stores/'.$sCode);
            /**
            * $extendSource need overwrite source
            */
            $storeNode->extend($extendSource, true);
        }
    }
}

Hasta acá todo muy lindo, pero ¿qué significa?.

El error se originó debido a una inconsistencia entre store_id’s. En un proyecto que estamos por poner en producción, utilizamos una buena cantidad de store views. De hecho, va a servir para poner a prueba el rendimiento de la plataforma.

Volviendo al problema, la forma de solucionarlo fue eliminado la información residual que pudiera haber quedado en las tablas core_sotre_group, core_store y core_config_data.

Es recomendable también eliminar la carpeta /var/cache y recién ahí, actualizamos nuestro navegador.

Ahora si, todo debiera volver a la normalidad.

Cabe aclarar que este lío que se me presentó es por la forma en la que, para el proyecto, estamos manejando los store views. Si usamos la herramienta que viene pro defecto, no deberíamos tener mayores problemas.

A lo mejor te interese leer

2 thoughts on “Call to a member function extend() on a non-object en Magento

  1. Hola Damian,

    Pude instalar magento en mi site sin tener que subir los archivos de nuevo. Solo eliminando los que me indicaste.

    Viendo el problema que comentas en este post te queria consultar.

    Yo recien empiezo con php, no en el mundo de la programacion, pero la gran duda es. Suponte que le armo un site a un cliente con magento, suele clavarse sin dar explicaciones y dejarte barado buscando errores en el mar de archivos que tiene?

    Te pregunto esto, porque me parece que magento esta pensado para un grupo grande de programadores con tiempo para buscar y solucionar problemas, puede ser?

    Saludos y hasta pronto.
    Claudio

  2. No estoy muy seguro si estoy coincido con lo de estar pensado para un grupo grande con tiempo para…
    Hay errores de mayor o menor complejidad, pero hasta ahora nunca me pasó de algún error sin explicaciones.
    Llegado el caso, tendrás que empezar a debuguear, ya sea usando herramientas específicas o aplicando algo de experiencia o suerte (je).
    En el caso del error del post, no lo ví en ningún thread del foro oficial, pero buscando un poco por el código no fue muy difícil dar con el problema.
    Igualmente, como alguna vez ya te comenté, paso muchas horas por día con Magento, desde hace mucho tiempo, por lo cual, estoy algo enviciado y naturalizado con el código.
    No me parece que pueda traerte más problemas que cualquier otra aplicación (claro está, cuando uno programa de 0, es más fácil entender la lógica y buscar el error).
    Saludos.