2014-11-19 2 views
0

Я разрабатываю расширение для Magento после официального руководства Magento и книги «Magento PHP Developers Guide».Magento - getModel() и getResourceModel

В книге есть элементы, элементы и тип реестра, и я думаю, что это будет хорошей практикой для будущего добавления, возможно, категорий в расширение новостей. На данный момент у меня только таблица 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 и template, и я пытаюсь отобразить данные из базы данных.

Мой 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> 

После книге retrives данные из БД, как это:

$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(); 

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

ответ

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. Я попробую то, что вы написали здесь. Еще раз спасибо – mrGott

+0

, и у меня есть еще один вопрос: вы написали права на чтение и чтение в узлах xml. Что это делает? и зачем он нужен? Вы можете объяснить? – mrGott

+0

Извините, но я никогда не задумывался об этом, потому что он работает без него. Я считаю, что это необходимо, когда у вас есть разные типы соединений для вашего модуля. –

Смежные вопросы