Как я могу использовать объекты коллекции Magento - PullRequest
1 голос
/ 28 марта 2012

Я работаю над пользовательским модулем администратора для magento и одновременно пытаюсь изучить подход magento =).В настоящее время я нахожусь на версии CE 1.6.

Я следил за несколькими учебными пособиями и статьями и сумел настроить пользовательскую таблицу БД, и, думаю, мне удалось работать с классом make collection.(Я должен сказать, что я новичок в Zend Framework / Magento и начинающий опытный программист).По крайней мере, следующий код дает мне правильный результат:

$department_collection = Mage::getModel('custom/systemconfig')->getCollection()
                            ->addFilter('name','departments');

Когда я var_dump это с $department_collection->getData(), я получаю массив с отфильтрованными строками из моей БД.

Теперь, когда япопробуйте сделать это:

foreach ($department_collection as $department) {
        $department->delete();
    }

Я получаю исключение от Magento:

-Внимание: include (Mage \ Upperfield \ Model \ Systemconfig.php) [function.include]: не удалосьоткрытый поток: нет такого файла или каталога в D: \ wamp \ www \ magento \ lib \ Varien \ Autoload.php в строке 93

Проблема в том, что я предполагаю, что неправильно настроил структуру каталогов, но простоне понимаю, что это такое.И трассировка не очень помогает, так как она сцеплена и показывает только несущественную информацию.

Моя структура каталогов выглядит следующим образом:

+app
  +code
     +local
       +Namespace
         +Module
           +Model
             +Mysql4
                +Systemconfig
                   Collection.php
                Systemconfig.php
             Systemconfig.php

Я загрузил свои модели:

//file: ../Mysql4/Systemconfig.php
class Namespace_Module_Model_Mysql4_Systemconfig extends Mage_Core_Model_Mysql4_Abstract{
    protected function _construct()
    {
        $this->_init('module/systemconfig', 'systemconfig_id');
    }
}



// file: ../Mysql4/Systemconfig/Collection.php
class Namespace_Module_Model_Mysql4_Systemconfig_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
    protected function _construct()
    {
        $this->_init('namespace/systemconfig');
    }
}

В настоящее время мой config.xml выглядит следующим образом (отрывок):

<models>
  <module>
        <class>Namespace_Module_Model</class>
    <resourceModel>module_mysql4</resourceModel>
</module>

<module_mysql4>
    <class>Namespace_Module_Model_Mysql4</class>
    <entities>
        <systemconfig>
            <table>module_systemconfig</table>
        </systemconfig>
    </entities>
</module_mysql4>

Я думаю, либо: я установил класс коллекции с неправильной структурой, либо янедопонимание, как использовать объект коллекции.

Любой мудрец, который мог бы объяснить мне, что здесь происходит?Благодарю за любую помощь.

С наилучшими пожеланиями Adde

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Ошибка, которую вы получили из-за неправильных определений XML или ИЛИ именования классов / структуры файла - что должно быть идентично. Когда автозагрузчик прочитал ваш config.xml и посмотрел, куда вы сказали это в упомянутом config.xml, он не нашел нужные файлы.

Небольшая информация о коллекциях и их родительских моделях, если это поможет:

Если вы работаете непосредственно с коллекцией, вы должны использовать:

$_collection = Mage::getResourceModel('namespace/model_collection');

Если вы работаете с моделью, которая берет данные коллекции и изменяет данные (например, суммирует, добавляет дополнительные данные, удаляет вещи и т. Д.), Вы должны назвать модель следующим образом:

$_collection = Mage::getModel('namespace/model')->getCollection();

В любом случае, в вашем config.xml вы должны указать, что вы используете модель ресурса и с какими таблицами (если у вас есть пользовательские таблицы), с которыми она должна работать. Вам никогда не придется писать новую коллекцию для взаимодействия с таблицами Magento по умолчанию, поскольку уже есть коллекции, которые вы можете вызывать ИЛИ расширять (не рекомендуется, вам следует использовать Observers).

Вот пример правильного определения коллекции в config.xml:

<models>
    <modulename>
        <resourceModel>modulename_mysql4</resourceModel>
    </modulename>
    <modulename_mysql4>
        <class>Namespace_ModuleName_Model_Mysql4</class>
        <entities>
            <modulename>
                <table>modulename_custom</table>
            </modulename>
        </entities>
    </modulename_mysql4>
</models>
<resources>
    <modulename_setup>
        <setup>
            <module>Namespace_ModuleName</module>
        </setup>
        <connection>
            <use>core_setup</use>
        </connection>
    </modulename_setup>
    <modulename_write>
        <connection>
            <use>core_write</use>
        </connection>
    </modulename_write>
    <modulename_read>
        <connection>
            <use>core_read</use>
        </connection>
    </modulename_read>
</resources>

В этом файле встроенные определения и узлы, которые я написал, ДОЛЖНЫ быть написаны так, вы не можете иметь возврат, это должна быть та же самая строка. Это небольшой недостаток работы автозагрузчика Magento.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...