Magento에 MongoDB ODM 연결


15

Mongo Doctrine ODM을 Magento에 연결하려고합니다. zend를 mongodb와 성공적으로 연결했습니다. 둘 다 연결하는 방법을 모르겠습니다. Mongodb odm을 magento의 "lib"폴더에 넣고 lib를 magento에 연결하는 데 문제가 있습니다. 라이브러리 기본 클래스를 "포함"하려고합니다. 그러나 라이브러리에는 많은 네임 스페이스가 포함되어 있습니다. magento가 네임 스페이스를 지원한다고 생각하지 않습니다. 따라서 오류를 표시합니다. . 도움을 주셔서 감사합니다. 미리 감사드립니다.

답변:


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-이 메소드는 "Pear naming conventions"-을 따르는 클래스 만로드 할 수 있습니다 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의 도움으로 몽고와 마 젠토를 연결할 수 있습니까? 당신이 어떤 아이디어가 있다면, 나와 공유하십시오 ..
Sundar

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>

구성이 준비되면 아래 연결 문자열을 사용하여 DB에 액세스하십시오.

<?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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.