Создайте пользовательскую модель ресурсов, которая извлекает данные из стороннего API (не из БД)


Я хотел бы создать пользовательскую модель, которая подключается к API вместо базы данных Magento. Также было бы неплохо иметь возможность использовать (или расширять) классы коллекций Magento. Не так давно мы создали пользовательский модуль, который хранит информацию в базе данных, но мы перемещаем эту подсистему за пределы Magento и делаем ее доступной через API для Magento и других приложений.

Если я смогу каким-то образом расширить основные абстрактные классы Magento (или, возможно, дополнить некоторые интерфейсы) Я думаю, что мне удастся поменять местами классы моделей без изменения большей части другого кода, который уже существует в контроллерах, блоках, представлениях и т. Д. Прямо сейчас я создал класс, который подключается к API и делает возвращаемые данные доступными в объекте, и (своего рода) класс коллекции, который можно повторять, но мне нужно просмотреть существующий код, чтобы изменить, как все работает, потому что это не дочерние элементы Mage_Core_Model_Abstract.

Кто-нибудь делал это?

Это что, жизнеспособный? Мне интересно, не потребует ли реализация этих классов слишком много работы, возможно, почти столько же, сколько просто переписать их с нуля.

Author: Vic, 2015-08-05

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

Надеюсь, это поможет! Счастливого кодирования!

 5
Author: Ryan Street, 2015-08-12 04:04:09