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


15

Я намагаюся підключити доктрина монго ODM до Магенто. Я успішно пов’язав zend з mongodb. і я не знаю, як з'єднати обидва. Я помістив Mongodb odm в папку "lib" Магенто, і у мене виникає проблема зв'язати ліб з магенто. Я намагаюся "включити" базовий клас бібліотеки. Але бібліотека містить багато просторів імен. Я не думаю, що 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- цей метод може завантажувати лише класи, які відповідають "Умовам грушного іменування" - 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.


Олекссі, я спробував це. Не працює. Я говорю це прямо. Я не хочу вас бентежити. Чи можете ви з'єднати магенто з монго за допомогою доктрини ODM. Якщо у вас є ідея, будь ласка, поділіться зі мною ..
Сундар

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: // локальний: 27017 /]]> <! [CDATA [дБ]]> </ connection_string> <імя_бд> </ імя_бд> </ document_db>
S_H
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.