将MongoDB ODM连接到Magento


15

我正在尝试将Mongo Doctrine ODM连接到Magento。我已成功将zend与mongodb连接。而且我不知道如何连接两者。我将Mongodb odm放在了magento的“ lib”文件夹中,并且遇到了将lib链接到magento的问题。我正在尝试“包括”库基类。但是该库包含许多名称空间。我不认为magento支持名称空间。所以它显示错误。。非常感谢您的帮助。提前致谢。

Answers:


4

我认为这是一个非常好的问题,与Magento如何加载类有关。

如果不更改Magento文件,则没有解决此问题的好方法。

所以主要问题在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-此方法只能加载遵循“梨命名约定”的类Mage_Core_Model_Config

但是,如果使用名称空间,$class则将包含Mage\\Core\\Model\\Config

因此,我们可以再添加一个检查并修复名称空间问题

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

现在,您可以使用使用名称空间的库。

另外您会在这里找到代码更改列表,以在Magento中使用名称空间。


Olekssi,我尝试了这个。它不起作用。我是直说这个。我不想让你感到困惑。您可以在教义ODM的帮助下将magento与mongo连接。如果您有什么想法,请与我分享..
孙大信

3

尝试这些方法,我能够在单个magento设置上使用两个单独的数据库。

为此,您必须创建配置,请按照以下步骤操作。

app/etc/modules

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

app/code/local并确保更新下面这里的数据库的详细信息

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

您的配置已准备就绪,您可以使用以下连接字符串进行调用以访问数据库

<?php

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

    print_r($results)

您知道是否可以在mongodb配置中使用该方法吗?像:<document_db> <connection_string> <![CDATA [mongodb:// localhost:27017 /]]> </ connection_string> <dbname> <![CDATA [db]]> </ dbname> </ document_db>
s_h
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.