MongoDB ODM mit Magento verbinden

15

Ich versuche, Mongo Doctrine ODM mit Magento zu verbinden. Ich habe zend erfolgreich mit mongodb verbunden. und ich weiß nicht, wie man die beiden verbindet. Ich habe Mongodb odm im "lib" -Ordner von Magento abgelegt und habe das Problem, die lib mit Magento zu verknüpfen. Ich versuche, die Basisklasse der Bibliothek "einzuschließen". Die Bibliothek enthält jedoch viele Namespaces. Ich glaube nicht, dass Magento Namespace unterstützt. so zeigt es Fehler. . Hilfen werden sehr geschätzt. Danke im Voraus.

Sundar
quelle

Antworten:

4

Ich denke, das ist eine sehr gute Frage, die damit zusammenhängt, wie Magento Klassen lädt.

Es gibt keine gute Möglichkeit, dies zu beheben, ohne die Magento-Dateien zu ändern.

Das Hauptproblem liegt also in 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::autoloadDiese Methode kann nur Klassen laden, die den "Pear-Namenskonventionen" folgen Mage_Core_Model_Config.

Aber wenn Namespaces verwendet werden, $classwird enthalten Mage\\Core\\Model\\Config.

So können wir ein weiteres Problem mit dem Prüf- und Behebungs-Namespace hinzufügen

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

Jetzt können Sie Bibliotheken verwenden, die Namespaces verwenden.

Außerdem finden Sie hier eine Liste mit Codeänderungen, um Namespaces in Magento zu verwenden.

oleksii.svarychevskyi
quelle
Olekssi, ich habe es versucht. Es funktioniert nicht. Ich sage das direkt. Ich möchte dich nicht verwirren. Kannst du Magento mit Mongo mit Hilfe von Doctrine ODM verbinden? Wenn Sie eine Idee haben, teilen Sie sie mir bitte mit.
Sundar
3

Versuchen Sie diesen Ansatz, ich war in der Lage, zwei separate Datenbanken auf einzelne Magento-Setup zu verwenden.

Führen Sie dazu die folgenden Schritte aus.

im app/etc/modules

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

in app/code/localund sicher sein , die Datenbank Details hier unten aktualisieren

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

Wenn Ihre Konfiguration fertig ist, rufen Sie die folgende Verbindungszeichenfolge auf, um auf die Datenbank zuzugreifen

<?php

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

    print_r($results)
Deepak Mallah
quelle
Wissen Sie, ob es möglich ist, diesen Ansatz mit einer Mongodb-Konfiguration zu verwenden? wie: <document_db> <connection_string> <! [CDATA [mongodb: // localhost: 27017 /]]> </ connection_string> <dbname> <! [CDATA [db]]> </ dbname> </ document_db>
s_h