Conectando MongoDB ODM a Magento

15

Estoy tratando de conectar Mongo Doctrine ODM a Magento. He conectado con éxito zend con mongodb. y no sé cómo conectar los dos. He colocado Mongodb odm en la carpeta "lib" de magento y tengo el problema de vincular la lib a magento. Estoy tratando de "incluir" la clase base de la biblioteca. Pero la biblioteca contiene muchos espacios de nombres. No creo que magento sea compatible con el espacio de nombres. así que muestra error. . Las ayudas son muy apreciadas. Gracias por adelantado.

Sundar
fuente

Respuestas:

4

Creo que esta es una muy buena pregunta, que está relacionada con la forma en que Magento carga las clases.

No hay una buena manera de solucionarlo sin cambiar los archivos de Magento.

Entonces, el problema principal está en lib / Varien / Autoload.php

public function autoload($class)
{
    if ($this->_collectClasses) {
        $this->_arrLoadedClasses[self::$_scope][] = $class;
    }
    if ($this->_isIncludePathDefined) {
        $classFile =  COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
    } else {
        $classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
    }
    $classFile.= '.php';
    return include $classFile;
}

Varien_Autoload::autoload- este método solo puede cargar clases que siguen las "convenciones de nomenclatura de Pear" - Mage_Core_Model_Config.

Pero si se utilizan espacios de nombres $classcontendrá Mage\\Core\\Model\\Config.

Entonces podemos agregar una comprobación más y corregir el problema del espacio de nombres

public function autoload($class)
{
    if ($this->_collectClasses) {
        $this->_arrLoadedClasses[self::$_scope][] = $class;
    }
    if ($this->_isIncludePathDefined) {
        $classFile =  COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
    } else if (strpos($class, "\\") !== false) {
        $classFile = str_replace("\\", DIRECTORY_SEPARATOR, $class);
    } else {
        $classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
    }
    $classFile.= '.php';
    return include $classFile;
}

Ahora puede usar bibliotecas que usan espacios de nombres.

Además, aquí encontrará una lista de cambios de código para usar espacios de nombres en Magento.

oleksii.svarychevskyi
fuente
Olekssi, probé este. No funciona. Estoy diciendo esto en línea recta. No quiero confundirte. ¿Se puede conectar magento con mongo con la ayuda de la doctrina ODM? Si tienes alguna idea, por favor comparte conmigo ..
Sundar
3

intente con este enfoque, pude usar dos bases de datos separadas en una sola configuración de magento.

para eso tendrá que crear la configuración, siga los pasos a continuación.

en app/etc/modules

<?xml version="1.0"?>
<config>
    <modules>
        <Deph_Externaldb>
            <active>true</active>
            <codePool>local</codePool>
        </Deph_Externaldb>
    </modules>
</config>

en app/code/localy asegúrese de actualizar los datos de bases de datos por debajo de aquí

<?xml version="1.0"?>
<config>
    <modules>
        <Deph_Externaldb>
            <version>0.1.0</version>
        </Deph_Externaldb>
    </modules>
    <global>
        <resources>
            <externaldb_write>
                <connection>
                    <use>externaldb_database</use>
                </connection>
            </externaldb_write>
            <externaldb_read>
                <connection>
                    <use>externaldb_database</use>
                </connection>
            </externaldb_read>
            <externaldb_setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </externaldb_setup>
            <externaldb_database>
                <connection>
                    <host><![CDATA[localhost]]></host>
                    <username><![CDATA[db_username]]></username>
                    <password><![CDATA[db_password]]></password>
                    <dbname><![CDATA[db_name]]></dbname>
                    <model>mysql4</model>
                    <type>pdo_mysql</type>
                    <active>1</active>
                </connection>
            </externaldb_database>
        </resources>
    </global>
</config>

su configuración está lista, llame usando la siguiente cadena de conexión para acceder a la base de datos

<?php

    $resource   = Mage::getSingleton('core/resource');
    $conn       = $resource->getConnection('externaldb_read');
    $results    = $conn->query('SELECT * FROM tblName');

    print_r($results)
Deepak Mallah
fuente
¿Sabes si es posible usar ese enfoque con una configuración mongodb? como: <document_db> <connection_string><![CDATA[mongodb://localhost:27017/font>font>> </connection_string> <dbname><![CDATA[dbfont>font>> </dbname> </document_db>
s_h