MongoDB ODM'yi Magento'ya bağlama


15

Mongo Doktrin ODM'yi Magento'ya bağlamaya çalışıyorum. Zend'i mongodb ile başarıyla bağladım. ve ikisini de nasıl bağlayacağımı bilmiyorum. Magento "lib" klasörüne Mongodb odm yerleştirdim ve ben lib Magento bağlama sorunu yaşıyorum. "Kütüphane temel sınıfı" dahil etmeye çalışıyorum. Ancak kütüphane birçok isim alanı içeriyor. Magento'nun isim alanını desteklediğini sanmıyorum. böylece gösteren hatası. . Yardımlar çok takdir edilmektedir. Şimdiden teşekkürler.

Yanıtlar:


4

Bence bu çok iyi bir soru, bu da Magento'nun sınıfları nasıl yüklediğiyle bağlantılı.

Magento dosyalarını değiştirmeden bunu düzeltmenin iyi bir yolu yoktur.

Ana sorun 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 - bu yöntem yalnızca "Armut adlandırma kurallarını" takip eden sınıfları yükleyebilir - Mage_Core_Model_Config .

Ama ad kullanılırsa $classiçerecektirMage\\Core\\Model\\Config .

Böylece, ad alanı sorununu bir kez daha kontrol edip düzeltebiliriz

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

Artık ad alanları kullanan kütüphaneleri kullanabilirsiniz.

Ayrıca burada Magento'da ad alanlarını kullanmak için kod değişiklikleri listesini bulacaksınız.


Olekssi, bunu denedim. Çalışmıyor. Bunu düz söylüyorum. Seni karıştırmak istemiyorum. U doktrin ODM yardımıyla magoto mongo ile bağlayabilirsiniz. Herhangi bir fikriniz varsa, lütfen benimle paylaşın ..
Sundar

3

Bu yaklaşımı deneyin, tek magento kurulumda iki ayrı veritabanı kullanabildim.

bunun için yapılandırma oluşturmanız gerekecek, aşağıdaki adımları izleyin.

içinde app/etc/modules

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

yazın app/code/localve aşağıdaki veritabanı ayrıntılarını güncellediğinizden emin olun.

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

yapılandırmanız hazır, db'ye erişmek için aşağıdaki bağlantı dizesini kullanın

<?php

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

    print_r($results)

bir mongodb konfigürasyonu ile bu yaklaşımı kullanmak mümkün olup olmadığını biliyor musunuz? beğen: <document_db> <connection_string><![CDATA[mongodb://localhost:27017/ Başarısız> </connection_string> <dbname><![CDATA[
dbictionaryülür
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.