เชื่อมต่อ MongoDB ODM กับ Magento


15

ฉันกำลังพยายามเชื่อมต่อ Mongo Doctrine ODM กับ Magento ฉันเชื่อมต่อ zend กับ mongodb สำเร็จแล้ว และฉันไม่รู้วิธีเชื่อมต่อทั้งสองอย่าง ฉันได้วาง Mongodb odm ในโฟลเดอร์ "lib" ของ magento และฉันมีปัญหาในการเชื่อมโยง lib กับ magento ฉันพยายามที่จะ "รวม" ชั้นฐานห้องสมุด แต่ห้องสมุดมีเนมสเปซมากมาย ฉันไม่คิดว่าวีโอไอพีรองรับเนมสเปซ ดังนั้นจึงแสดงข้อผิดพลาด . ช่วยได้รับการชื่นชมอย่างมาก ขอบคุณล่วงหน้า.

คำตอบ:


4

ฉันคิดว่านี่เป็นคำถามที่ดีมากซึ่งเกี่ยวข้องกับวิธีที่ Magento โหลดคลาส

ไม่มีวิธีที่ดีในการแก้ไขโดยไม่ต้องเปลี่ยนไฟล์ Magento

ดังนั้นปัญหาหลักคือ 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- วิธีการนี้เท่านั้นที่สามารถโหลดชั้นเรียนที่ตาม "ลูกแพร์ตั้งชื่อ" Mage_Core_Model_Config-

แต่ถ้ามีการใช้ namespaces จะมี$classMage\\Core\\Model\\Config

ดังนั้นเราสามารถเพิ่มอีกหนึ่งการตรวจสอบและแก้ไขปัญหาเนมสเปซ

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

ตอนนี้คุณสามารถใช้ไลบรารีที่ใช้เนมสเปซได้แล้ว

นอกจากนี้ที่นี่คุณจะได้พบกับรายการการเปลี่ยนแปลงรหัสเพื่อใช้ใน namespaces วีโอไอพี


Olekssi ฉันลองอันนี้ มันไม่ทำงาน ฉันกำลังพูดแบบนี้ ฉันไม่ต้องการที่จะทำให้คุณสับสน คุณสามารถเชื่อมต่อวีโอไอพีด้วย mongo ได้ด้วยความช่วยเหลือของหลักคำสอน ODM หากคุณมีความคิดใด ๆ โปรดร่วมกับฉัน ..
Sundar

3

ลองใช้วิธีเหล่านี้ฉันสามารถใช้สองฐานข้อมูลแยกกันในการตั้งค่าวีโอไอพีเดี่ยว

เพื่อที่คุณจะต้องสร้างการกำหนดค่าทำตามขั้นตอนด้านล่าง

ใน app/etc/modules

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

ในapp/code/localและอย่าลืมอัพเดทรายละเอียดฐานข้อมูลด้านล่างที่นี่

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

การกำหนดค่าของคุณพร้อมแล้วคุณโทรใช้สตริงการเชื่อมต่อด้านล่างเพื่อเข้าถึงฐานข้อมูล

<?php

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

    print_r($results)

คุณรู้ว่ามันเป็นไปได้ที่จะใช้วิธีการที่มีการกำหนดค่า MongoDB? ไลค์: <document_dMB <connection_string><!!CDCDTmongodb://localhost:27017/ เหมือนกัน> </connection_string> <dbname><!!CDCDATA ที่เหมือนกัน> </dbname> </document_dmin
s_h
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.