Kết nối MongoDB ODM với Magento


15

Tôi đang cố gắng kết nối Mongo Doctrine ODM với Magento. Tôi đã kết nối thành công zend với mongodb. và tôi không biết làm thế nào để kết nối cả hai. Tôi đã đặt Mongodb odm trong thư mục "lib" của magento và tôi đang gặp vấn đề liên kết lib với magento. Tôi đang cố gắng "bao gồm" lớp cơ sở thư viện. Nhưng thư viện chứa nhiều không gian tên. Tôi không nghĩ magento hỗ trợ không gian tên. Vì vậy, nó hiển thị lỗi. . Giúp được đánh giá cao. Cảm ơn trước.

Câu trả lời:


4

Tôi nghĩ rằng đây là một câu hỏi rất hay, được kết nối với cách Magento tải các lớp.

Không có cách nào tốt để khắc phục điều đó mà không thay đổi các tệp Magento.

Vì vậy, vấn đề chính là ở 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 - phương thức này chỉ có thể tải các lớp tuân theo "quy ước đặt tên Pear" - Mage_Core_Model_Config .

Nhưng nếu không gian tên được sử dụng $classsẽ chứaMage\\Core\\Model\\Config .

Vì vậy, chúng ta có thể thêm một kiểm tra và khắc phục vấn đề không gian tên

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

Bây giờ bạn có thể sử dụng các thư viện sử dụng không gian tên.

Ngoài ra, ở đây bạn sẽ tìm thấy danh sách thay đổi mã để sử dụng không gian tên trong Magento.


Olekssi, tôi đã thử cái này Nó không hoạt động. Tôi đang nói điều này thẳng. Tôi không muốn làm bạn bối rối. Bạn có thể kết nối magento với mongo với sự trợ giúp của học thuyết ODM. Nếu bạn có bất kỳ ý tưởng nào, xin vui lòng chia sẻ với tôi ..
Sundar

3

Hãy thử những cách tiếp cận này, tôi đã có thể sử dụng hai cơ sở dữ liệu riêng biệt trên thiết lập magento duy nhất.

để làm được điều đó, bạn sẽ phải tạo cấu hình, làm theo các bước dưới đây.

trong app/etc/modules

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

trong app/code/localvà chắc chắn để cập nhật các chi tiết cơ sở dữ liệu dưới đây ở đây

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

cấu hình của bạn đã sẵn sàng, bạn gọi sử dụng chuỗi kết nối bên dưới để truy cập db

<?php

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

    print_r($results)

Bạn có biết nếu có thể sử dụng phương pháp đó với cấu hình mongodb không? như: <document_db> <connection_string> <! [CDATA [MongoDB: // localhost: 27.017 /]]> <! [CDATA [db]]> </ connection_string> <dbname> </ dbname> </ document_db>
s_h
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.