Conectando o MongoDB ODM ao Magento

15

Estou tentando conectar o Mongo Doctrine ODM ao Magento. Conectei com êxito o zend com o mongodb. e eu não sei como conectar os dois. Coloquei o Mongodb odm na pasta "lib" do magento e estou tendo o problema de vincular a lib ao magento. Estou tentando "incluir" a classe base da biblioteca. Mas a biblioteca contém muitos espaços para nome. Eu não acho que o magento suporta espaço para nome. então está mostrando erro. . As ajudas são muito apreciadas. Desde já, obrigado.

Sundar
fonte

Respostas:

4

Eu acho que essa é uma pergunta muito boa, que está relacionada à forma como o Magento carrega as classes.

Não há uma boa maneira de corrigir isso sem alterar os arquivos Magento.

Portanto, o principal problema está em 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 pode carregar apenas classes que seguem "Convenções de nomenclatura Pear" - Mage_Core_Model_Config.

Mas se os namespaces forem usados, $classeles conterão Mage\\Core\\Model\\Config.

Assim, podemos adicionar mais uma verificação e corrigir o problema do espaço para nome

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

Agora você pode usar bibliotecas que usam espaços para nome.

Além disso aqui você vai encontrar uma lista alterações no código para namespaces uso em Magento.

oleksii.svarychevskyi
fonte
Olekssi, eu tentei este. Não está funcionando. Eu estou dizendo isso diretamente. Eu não quero te confundir. Você pode conectar o magento ao mongo com a ajuda da doutrina ODM. Se você tem alguma ideia, parte por favor comigo ..
Sundar
3

tente estas abordagens, eu era capaz de usar dois bancos de dados separados na instalação de um único magento.

para isso, você precisará criar a configuração, siga as etapas abaixo.

dentro app/etc/modules

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

em app/code/locale certifique-se de atualizar os detalhes do banco de dados abaixo aqui

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

sua configuração está pronta, você pode usar a seguinte seqüência de conexão para acessar o banco de dados

<?php

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

    print_r($results)
Deepak Mallah
fonte
você sabe se é possível usar essa abordagem com uma configuração mongodb? como: <document_db> <connection_string><![CDATA[mongodb://localhost:27017/ingerie "> </connection_string> <dbname><![CDATA[
dbussysex