Загрузка удаленного источника данных в сетку продуктов администратора Magento

#php #magento

#php #magento

Вопрос:

Я пытаюсь по существу создать разделенный экран, одну сетку удаленного репозитория, полного продуктов, и другую рядом с ней, показывающую локальный репозиторий в сетке.

Я думаю, что это по сути подводит итог, я отдам частичный кредит, если вы можете сказать мне, как просто включить удаленный источник в сетку… Я думаю, что я мог бы справиться с этим даже оттуда. Пожалуйста, будьте внимательны, я действительно не хочу слышать, как настроить мои ресурсы в config.xml , Я уже могу сделать это с удаленной базой данных, я просто не могу заставить объекты / коллекции загружаться из нее.

Спасибо, ребята.

Комментарии:

1. ну, в настоящее время я пытаюсь создать модель на основе catalog_product_flat_1 в удаленной базе данных, она создает модель нормально, но не загружает никаких данных. Я пробовал несколько других вещей… если все остальное не удастся, я, вероятно, просто создам общие varien_objects и вручную добавлю в них данные и добавлю их в общую коллекцию … я знаю , что это будет работать так же неэлегантно, как и есть.

Ответ №1:

ХОРОШО — итак, для тех из нас, кто пробовал что-то подобное, первое, что вы понимаете, это то, что когда вы хотите использовать более одной базы данных в качестве источника в вашем модуле… на самом деле для этого вам нужно 2 модуля (кто-нибудь вмешается и поправит меня, если я ошибаюсь).

Шаг 1: Создайте «фиктивный» модуль для подключения к удаленной базе данных. Этот модуль должен в значительной степени содержать только etc/ и Model/ — больше ничего не нужно. Мой config.xml выглядит следующим образом:

 <config>
<modules>
    <Mage_RepoDummy>
        <version>0.1.0</version>
    </Mage_RepoDummy>
</modules>

<global>
    <resources>
        <repodummy_write>
            <connection>
                <use>repodummy_database</use>
            </connection>
        </repodummy_write>
        <repodummy_read>
            <connection>
                <use>repodummy_database</use>
            </connection>
        </repodummy_read>
        <repodummy_setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </repodummy_setup>
        <repodummy_database>
            <connection>
                <host><![CDATA[localhost]]></host>
                <username><![CDATA[brandrepo]]></username>
                <password><![CDATA[*******]]></password>
                <dbname><![CDATA[brandrepo]]></dbname>
                <model>mysql4</model>
                <type>pdo_mysql</type>
                <active>1</active>
            </connection>           
        </repodummy_database>                 
    </resources>      
     <models>
        <repodummy>
            <class>Mage_RepoDummy_Model</class>
            <resourceModel>repodummy_mysql4</resourceModel>
        </repodummy>
        <repodummy_mysql4>
            <class>Mage_RepoDummy_Model_Mysql4</class>
            <entities>
                <product>
                    <table>catalog_product_entity</table>
                </product>
            </entities>
        </repodummy_mysql4>
    </models>
</global>

<adminhtml>  
</adminhtml>
  

Теперь вам понадобятся следующие файлы модели и ресурсов:

 /Model/Product.php
/Model/Mysql4/Product.php
/Model/Mysql4/Product/Collection.php
  

В Product.php:

 class Mage_RepoDummy_Model_Product extends Mage_Catalog_Model_Abstract
{
    public function _construct()
    {
        $this->_init('repodummy/product', 'entity_id'); 
    }
} 
  

В Mysql4/Product.php

 class Mage_RepoDummy_Model_Mysql4_Product extends Mage_Catalog_Model_Resource_Abstract
{
    public function __construct()
    {
        parent::__construct();
        $this->setType(Mage_Catalog_Model_Product::ENTITY)
             ->setConnection('repodummy_read', 'repodummy_write');
        $this->_productWebsiteTable  = $this->getTable('catalog/product_website');
        $this->_productCategoryTable = $this->getTable('catalog/category_product');
    }
} 
  

И в Mysql4/Product/Collection.php

 class Mage_RepoDummy_Model_Mysql4_Product_Collection extends Mage_Catalog_Model_Resource_Collection_Abstract {

    protected function _construct()
    {
            $this->_init('repodummy/product');
    }
} 
  

Просто введите материал, как вы бы сделали для любой базовой модели в Magento. Теперь из другого модуля, подключенного к любой другой базе данных, возможно / возможно, к вашему локальному экземпляру, вы можете получить доступ к этому удаленному хранилищу данных, вызвав свой фиктивный объект, если вы хотите протестировать это, просто сделайте что-нибудь простое, например:

     $test = Mage::getModel('repodummy/product')->load(10367);

    die("::".$test->getSku()."::");
  

… и эта модель должна функционировать так же, как ваша типичная модель продукта по большей части, за исключением того, что вы используете удаленную базу данных, счастливого кодирования!

Комментарии:

1. Я хочу продолжить и сказать, что расширенное использование коллекции в этом случае невозможно только с тем, что я здесь привел. Если вы скажете, что скопировали элемент управления сеткой продукта и просто подключили эту новую модель, при прочих равных условиях это не сработало бы … но остальная часть этого ответа немного для пространства здесь — если вы умны, вы должны быть в состоянии получить его так или иначе.

2. Собираюсь проголосовать за видимость, так как я пытаюсь сделать подобное, и этот вопрос было трудно найти. Я предполагаю, что есть множество разработчиков, работающих над миграциями, как я, и старые методы API просто непрактичны — прямое использование моделей Magento намного быстрее при работе с тонной удаленных данных.

3. У вас есть способ добавить префикс таблицы для удаленной таблицы?