Menghubungkan MongoDB ODM ke Magento

15

Saya mencoba menghubungkan ODM Mongo Doctrine ke Magento. Saya telah berhasil menghubungkan zend dengan mongodb. dan saya tidak tahu cara Menghubungkan keduanya. Saya telah menempatkan Mongodb odm di folder "lib" magento dan saya mengalami masalah saat menghubungkan lib ke magento. Saya mencoba untuk "memasukkan" kelas dasar perpustakaan. Tetapi perpustakaan berisi banyak ruang nama. Saya tidak berpikir Magento mendukung namespace. jadi ini menunjukkan kesalahan. . Membantu sangat dihargai. Terima kasih sebelumnya.

Sundar
sumber

Jawaban:

4

Saya pikir ini adalah pertanyaan yang sangat bagus, yang terhubung dengan bagaimana Magento memuat kelas.

Tidak ada cara yang baik untuk memperbaikinya tanpa mengubah file Magento.

Jadi masalah utamanya adalah di 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- metode ini hanya dapat memuat kelas yang mengikuti "konvensi penamaan Pear" - Mage_Core_Model_Config.

Tetapi jika ruang nama yang digunakan $classakan berisi Mage\\Core\\Model\\Config.

Jadi kita bisa menambahkan satu lagi memeriksa dan memperbaiki masalah namespace

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

Sekarang Anda dapat menggunakan perpustakaan yang menggunakan ruang nama.

Selain itu di sini Anda akan menemukan daftar perubahan kode untuk menggunakan ruang nama di Magento.

oleksii.svarychevskyi
sumber
Olekssi, saya mencoba yang ini. Ini tidak bekerja. Saya mengatakan ini dengan lurus. Saya tidak ingin membingungkan Anda. Dapatkah Anda menghubungkan magento dengan mongo dengan bantuan doktrin ODM. Jika Anda punya ide, silakan bagikan dengan saya ..
Sundar
3

coba pendekatan ini, saya bisa menggunakan dua database terpisah pada pengaturan magento tunggal.

untuk itu Anda harus membuat konfigurasi, ikuti langkah-langkah di bawah ini.

di app/etc/modules

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

di app/code/localdan pastikan untuk memperbarui rincian basis data di bawah sini

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

konfigurasi Anda sudah siap, Anda dapat menggunakan string koneksi di bawah ini untuk mengakses db

<?php

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

    print_r($results)
Deepak Mallah
sumber
Anda tahu apakah mungkin menggunakan pendekatan itu dengan konfigurasi mongodb? seperti: <document_db> <connection_string><![CDATA[mongodb://localhost:7017/[[> </connection_string> <dbname><![CDATA[db[[> </dbname> </document_db>
s_h