Connecter MongoDB ODM à Magento

15

J'essaie de connecter Mongo Doctrine ODM à Magento. J'ai réussi à connecter zend avec mongodb. et je ne sais pas comment connecter les deux. J'ai placé Mongodb odm dans le dossier "lib" de magento et j'ai le problème de lier la lib à magento. J'essaie «d'inclure» la classe de base de la bibliothèque. Mais la bibliothèque contient de nombreux espaces de noms. Je ne pense pas que magento supporte l'espace de noms. donc son erreur d'affichage. . Les aides sont très appréciées. Merci d'avance.

Sundar
la source

Réponses:

4

Je pense que c'est une très bonne question, qui est liée à la façon dont Magento charge les classes.

Il n'y a pas de bon moyen de résoudre ce problème sans modifier les fichiers Magento.

Donc, le principal problème est dans 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- cette méthode ne peut charger que les classes qui respectent les "conventions de dénomination de Pear" - Mage_Core_Model_Config.

Mais si des espaces de noms sont utilisés, $classils contiendront Mage\\Core\\Model\\Config.

Nous pouvons donc ajouter une autre vérification et résoudre le problème d'espace de noms

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

Vous pouvez maintenant utiliser des bibliothèques qui utilisent des espaces de noms.

De plus , vous trouverez ici la liste des modifications de code pour utiliser les espaces de noms dans Magento.

oleksii.svarychevskyi
la source
Olekssi, j'ai essayé celui-ci. Ça ne fonctionne pas. Je dis cela directement. Je ne veux pas te confondre. Pouvez-vous connecter magento avec mongo à l'aide de la doctrine ODM. Si vous avez une idée, partagez-la avec moi ..
Dimanche
3

essayez ces approches, j'ai pu utiliser deux bases de données distinctes sur une configuration magento unique.

pour cela, vous devrez créer la configuration, suivez les étapes ci-dessous.

dans app/etc/modules

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

dans app/code/localet assurez - vous de mettre à jour les informations de base de données ci - dessous ici

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

votre config est prête, vous appelez utilisez la chaîne de connexion ci-dessous pour accéder à la base de données

<?php

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

    print_r($results)
Deepak Mallah
la source
savez-vous s'il est possible d'utiliser cette approche avec une configuration mongodb? comme: <document_db> <connection_string> <! [CDATA [MongoDB: // localhost: 27017 /]]> <! [CDATA [db]]> </ connection_string> <dbname> </ dbname> </ document_db>
S_H