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.

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.


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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.