Я разрабатываю расширение новостей для 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
Я установил все (скрипты установщика) в соответствии с книгой, и все прошло отлично. Теперь у меня есть 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();
Что делать, чтобы заставить его работать?
Раньше у меня была такая же проблема, и кажется, что вызов 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. если это так, но вам нужно снова запустить настройку, удалите строку.