Подключение MongoDB ODM к Magento

15

Я пытаюсь подключить Mongo Doctrine ODM к Magento. Я успешно соединил Zend с mongodb. и я не знаю, как соединить оба. Я поместил Mongodb odm в папку "lib" magento, и у меня возникла проблема с установкой связи между 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» 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.

oleksii.svarychevskyi
источник
Olekssi, я попробовал это. Это не работает. Я говорю это прямо. Я не хочу вас смущать. Можно ли соединить magento с монго с помощью доктрины 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>

ваш конфиг готов, вы звоните, используйте следующую строку подключения для доступа к БД

<?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> <имя_библиотеки> <! [CDATA [db]]> </ dbname> </ document_db>
s_h