#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. У вас есть способ добавить префикс таблицы для удаленной таблицы?