Создайте пользовательскую модель ресурсов, которая извлекает данные из стороннего API (не из БД)
Я хотел бы создать пользовательскую модель, которая подключается к API вместо базы данных Magento. Также было бы неплохо иметь возможность использовать (или расширять) классы коллекций Magento. Не так давно мы создали пользовательский модуль, который хранит информацию в базе данных, но мы перемещаем эту подсистему за пределы Magento и делаем ее доступной через API для Magento и других приложений.
Если я смогу каким-то образом расширить основные абстрактные классы Magento (или, возможно, дополнить некоторые интерфейсы) Я думаю, что мне удастся поменять местами классы моделей без изменения большей части другого кода, который уже существует в контроллерах, блоках, представлениях и т. Д. Прямо сейчас я создал класс, который подключается к API и делает возвращаемые данные доступными в объекте, и (своего рода) класс коллекции, который можно повторять, но мне нужно просмотреть существующий код, чтобы изменить, как все работает, потому что это не дочерние элементы Mage_Core_Model_Abstract
.
Кто-нибудь делал это?
Это что, жизнеспособный? Мне интересно, не потребует ли реализация этих классов слишком много работы, возможно, почти столько же, сколько просто переписать их с нуля.
1 answers
Ответ - Да! Это возможно. Модели ресурсов внутри Magento отвечают за операции CRUD модуля. Итак, исходя из этого, все, что вам нужно сделать, это использовать save()
, delete()
, и load()
методы внутри вашей модели ресурсов и коллекции, следуя одному и тому же определению каждого метода от его родителя.
Вы все еще можете использовать Mage_Core_Model_Abstract
, Mage_Core_Model_Resource_Db_Abstract
, и Mage_Core_Model_Resource_Db_Collection_Abstract
.
Убедитесь, что вы не вызываете родительские методы в переопределенном методе определения. Вы заменяете функциональность, а не добавляете ее.
Вот упрощенный пример:
Модель
На самом деле вам не придется делать здесь ничего другого. Операции CRUD в модели будут связаны с моделью ресурсов.
class Coolryan_Module_Model_Example extends Mage_Core_Model_Abstract {
protected function _construct() {
$this->_init('coolryan_module/example'); // define your resource model
}
}
Модель Ресурсов
Модель ресурсов - это то, где вы будете реализовывать большую часть своих функций.
class Coolryan_Module_Model_Resource_Example extends Mage_Core_Model_Resource_Db_Abstract {
protected function _construct() {
// you may want to connect to your api here...
}
public function save(Mage_Core_Model_Abstract $object) {
// save operations here
// make sure to update your model with the data!
}
public function load(Mage_Core_Model_Abstract $object, $value, $field = null) {
// loading operations here
// make sure to update your model with the data!
}
public function delete(Mage_Core_Model_Abstract $object) {
// delete operations here
}
}
Ресурс Коллекция
Коллекции довольно просты. Единственный метод, который вам нужно будет переопределить по умолчанию, - это метод load()
. Операция сохранения не требуется из-за того, что сохранение повторяется по каждому элементу в коллекции и вызывает метод save()
для каждого из них.
class Coolryan_Module_Model_Resource_Example_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract {
public function load($printQuery = false, $logQuery = false) {
// load collections of data here...
}
}
Надеюсь, это поможет! Счастливого кодирования!