Collegamento MongoDB ODM a Magento


15

Sto cercando di collegare Mongo Doctrine ODM a Magento. Ho collegato con successo zend con mongodb. e non so come collegare entrambi. Ho inserito Mongodb odm nella cartella "lib" di magento e sto avendo il problema di collegare la lib a magento. Sto cercando di "includere" la classe base della libreria. Ma la libreria contiene molti spazi dei nomi. Non credo che Magento supporti lo spazio dei nomi. quindi sta mostrando errore. . Gli aiuti sono molto apprezzati. Grazie in anticipo.

Risposte:


4

Penso che questa sia un'ottima domanda, collegata al modo in cui Magento carica le classi.

Non esiste un buon modo per risolverlo senza modificare i file Magento.

Quindi il problema principale è in 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- questo metodo può caricare solo classi che seguono "Convenzioni di denominazione di Pear" - Mage_Core_Model_Config.

Ma se vengono utilizzati spazi dei nomi $classconterrà Mage\\Core\\Model\\Config.

Quindi possiamo aggiungere un altro controllo e risolvere il problema dello spazio dei nomi

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

Ora puoi usare le librerie che usano gli spazi dei nomi.

Inoltre qui troverai l'elenco delle modifiche al codice per utilizzare gli spazi dei nomi in Magento.


Olekssi, ho provato questo. La sua non funziona. Lo sto dicendo in modo diretto. Non voglio confonderti. Puoi connettere magento con mongo con l'aiuto della dottrina ODM. Se hai qualche idea, per favore condividi con me ..
Sundar

3

prova questo approccio, sono stato in grado di utilizzare due database separati su una singola installazione di Magento.

per questo dovrai creare la configurazione, seguire i passaggi seguenti.

nel app/etc/modules

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

in app/code/localed essere sicuri di aggiornare i dettagli del database qui sotto qui

<?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>

la tua configurazione è pronta, chiami usa la stringa di connessione sottostante per accedere al db

<?php

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

    print_r($results)

sai se è possibile usare quell'approccio con una configurazione mongodb? ad esempio: <document_db> <connection_string><![CDATA[mongodb://localhost:27017/××> </connection_string> <dbname><![CDATA[db
lasting×
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.