Podłączanie MongoDB ODM do Magento

15

Próbuję połączyć Mongo Doctrine ODM z Magento. Z powodzeniem połączyłem Zend z Mongodb. i nie wiem jak połączyć oba. Umieściłem Mongodb odm w folderze „lib” magento i mam problem z połączeniem lib z magento. Próbuję „dołączyć” klasę bazową biblioteki. Ale biblioteka zawiera wiele przestrzeni nazw. Nie sądzę, że Magento obsługuje przestrzeń nazw. więc pokazuje błąd. . Pomaga być bardzo ceniony. Z góry dziękuję.

Sundar
źródło

Odpowiedzi:

4

Myślę, że to bardzo dobre pytanie związane z tym, jak Magento ładuje klasy.

Nie ma dobrego sposobu, aby to naprawić bez zmiany plików Magento.

Więc głównym problemem jest 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- ta metoda może ładować tylko klasy zgodne z „Konwencjami nazewnictwa gruszek” - Mage_Core_Model_Config.

Ale jeśli zostaną użyte przestrzenie nazw, $classbędą zawierać Mage\\Core\\Model\\Config.

Możemy więc dodać jeszcze jedno sprawdzenie i naprawić problem przestrzeni nazw

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

Teraz możesz korzystać z bibliotek korzystających z przestrzeni nazw.

Ponadto tutaj znajdziesz listę zmian kodu, aby korzystać z przestrzeni nazw w Magento.

oleksii.svarychevskyi
źródło
Olekssi, próbowałem tego. To nie działa. Mówię to wprost. Nie chcę cię mylić. Czy możesz połączyć magento z mongo za pomocą doktryny ODM. Jeśli masz jakiś pomysł, podziel się ze mną ..
Sundar
3

wypróbuj te podejście, byłem w stanie użyć dwóch osobnych baz danych na jednej instalacji Magento.

w tym celu musisz utworzyć konfigurację, wykonaj poniższe czynności.

w app/etc/modules

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

w app/code/locali należy zaktualizować dane baz danych poniższych tutaj

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

Twoja konfiguracja jest gotowa, wywołujesz używając poniższego ciągu połączenia, aby uzyskać dostęp do bazy danych

<?php

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

    print_r($results)
Deepak Mallah
źródło
czy wiesz, czy można zastosować to podejście w konfiguracji mongodb? jak: <document_db> <connection_string><![CDATA[mongodb://localhost:27017/]]> </connection_string> <dbname><![CDATA[db]]> </dbname> </document_db>
s_h