Magento - getModel () и getResourceModel

0

Я разрабатываю расширение новостей для Magento после официального руководства Magento и книги "Magento PHP Developers Guide".

В книге есть объекты реестра, элементы и тип - и я думаю, что это будет хорошей практикой для будущего добавления, возможно, категорий в расширение новостей. На данный момент у меня только таблица Item, в которой есть только новости.

Согласно книге, я создал структуру папок и разместил свои файлы следующим образом:

-Model
--Mysql4
---Item
----Collection.php
---Item.php
--Resource
----Setup.php
--Item.php

в официальном руководстве есть:

-Model
--Resource
---Item
----Collection.php
---Item.php
--Item.php
  1. В чем разница между этими двумя? Являются ли они оба EAV?

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

Мой config.xml выглядит так:

<global>
    <models>
        <gott_news>
            <class>Gott_News_Model</class>
            <resourceModel>gott_news_mysql4</resourceModel>
        </gott_news>
        <gott_news_mysql4>
            <entities>
                <item>
                    <table>gott_news_item</table>
                </item>
            </entities>
        </gott_news_mysql4>
    </models>
    <resources>
        <gott_news_setup>
            <setup>
                <module>Gott_News</module>
                <class>Gott_News_Model_Resource_Setup</class>
            </setup>
        </gott_news_setup>
    </resources>   

После книги он извлекает данные из БД следующим образом:

$collection = Mage::getModel('gott_news/item')->getCollection();

руководство делает это:

$newsCollection = Mage::getResourceModel('gott_news/item_collection');
$newsCollection->prepareForList($this->getCurrentPage);

Эта функция prepareForList() находится в файле Collection.php. На самом деле я должен закончить этот prepareForList() чтобы передать переменную currentPage

Проблема: для меня это не работает. Он не получает никаких результатов от БД. и когда я использую prepareForList() он говорит, что это не объект

В книге также есть

    <resources>
        <mdg_giftregistry_setup>
            <setup>
                <module>Mdg_Giftregistry</module>
                <class>Mdg_Giftregistry_Model_Resource_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </mdg_giftregistry_setup>
        <mdg_giftregistry_write>
            <connection>
                <use>core_write</use>
            </connection>
        </mdg_giftregistry_write>
        <mdg_giftregistry_read>
            <connection>
                <use>core_read</use>
            </connection>
        </mdg_giftregistry_read>
    </resources>

Это необходимо для получения данных из БД?

В indexController.php indexAction() Я пытаюсь получить данные, но ничего не возвращается:

$blogpost = Mage::getModel('gott_news/item')->getCollection();

Что делать, чтобы заставить его работать?

Теги:
magento
magento-1.8
magento-1.7

1 ответ

0
Лучший ответ

Раньше у меня была такая же проблема, и кажется, что вызов mysql4 - это старая мода, когда теперь используются ресурсы ressources. Я использую что-то подобное, и все работает отлично. Я не знаю, совместим ли он с версиями до 1.7

        <models>
        <gottnews>
            <class>Gott_News_Model</class>
            <resourceModel>gottnews_resource</resourceModel>
        </gottnews>    
        <gottnews_resource>
            <class>Gott_News_Model_Resource</class>
            <entities>
                <item>
                    <table>gott_news</table>
                </item>
            </entities>
        </gottnews_resource>
    </models>
    <resources>
        <gott_news_setup>
            <setup>
                <module>Gott_News</module>
                <class>Mage_Core_Model_Resource_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </gott_news_setup>
        <gottnews_write>
            <connection>
                <use>core_write</use>
            </connection>
        </gottnews_write>
        <gottnews_read>
            <connection>
                <use>core_read</use>
            </connection>
        </gottnews_read>
    </resources>

В таблице core_ressource вам нужно найти имя своего модуля с его версией. Если это не так, сценарий установки работает неправильно, и вам нужно проверить var/log/для получения дополнительной информации, если у вас активирована регистрация в magento. если это так, но вам нужно снова запустить настройку, удалите строку.

  • 0
    Спасибо вам большое за ваш ответ. Я читал что-то подобное о подходе Mysql4, и он сказал, что подход Mysql4 работал только до версии 1.7. И я также проверил, и кажется, что эта книга "Magento PHP Developers Guide" основана на 1.7, поэтому она работает там, но не в 1.9. Я попробую то, что вы написали здесь. Еще раз спасибо
  • 0
    и у меня есть еще один вопрос: вы написали права на запись и чтение в узлах xml. Что это делает? а зачем это нужно? Вы можете объяснить?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню