Компонент не выводит данные из БД

Добрый день.
Подскажите, пожалуйста, столкнулся с такой проблемой. пишу компонент, простенький. Пользуюсь для обучения уроками от Василия. На данный момент есть пункт меню, в котором есть одна вкладка. По нажатию на кнопку Создать открывается окно, в которое можно занести данные и они сохраняются в БД. Но в самой таблице ничего не выводится и пишет — «Нет данных для вывода».
В отличие от mod Extra у меня в данной таблице лишь 2 поля: id и category_fabrics. Может ли это быть из-за того, что у меня изменены названия полей в таблице (вернее, это наверное из-за этого), но где тогда еще нужно поправить, чтобы сделать именно вывод в таблице своей в админке данных?
Андрей
04 февраля 2017, 16:42
modx.pro
3 049
0

Комментарии: 16

Алексей Ерохин
04 февраля 2017, 21:37
0
Смотрите что вам возвращает connector в браузере (консоль разработчика F12)
Если там нет ошибки, то проверяйте почему процессор не возвращает (обычно он зовется mgr/getList)
    Андрей
    04 февраля 2017, 21:40
    0
    В том то и дело, что консоль девственна…
    В процессоре getlist есть такой код:
    public function prepareQueryBeforeCount(xPDOQuery $c)
        {
            $query = trim($this->getProperty('query'));
            if ($query) {
                $c->where(array(
                    'name_cat:LIKE' => "%{$query}%",
                ));
            }
    
            return $c;
        }
    Правильно ли я понимаю, что он и отвечает за вывод?
      Алексей Ерохин
      04 февраля 2017, 21:42
      0
      Ну конкретно этот кусок отвечает за поиск по полю name_cat

      Вам нужно в network вкладку смотреть, при обновлении грида (таблицы) вызывается коннектор вашего компонента, посмотрите, что он возвращает.
        Андрей
        04 февраля 2017, 21:44
        0
        Коннектор компонента возвращает
        {success: true, total: «0», results: []}
        results:[]
        success:true
        total:«0»
        То есть где-то у меня ошибка. Вот куда копать не пойму…
          Алексей Ерохин
          04 февраля 2017, 21:57
          0
          проверьте классы, наследование, поглядите процессоры других компонентов, возможно вы что-то упустили, точно ли записываются данные в базу
            Андрей
            04 февраля 2017, 21:59
            0
            Да, данные записываются… Очень странно все…
              Володя
              04 февраля 2017, 22:17
              0
              и что в логах нет ошибок? Наверно в getlist сортировка по полю стоит которого нет или чтото подобное…
                Андрей
                04 февраля 2017, 22:22
                0
                Володя, да, ошибок нет никаких…
                Вот в getlist
                public $objectType = 'msFabricsCategory';
                public $classKey = 'msFabricsCategory';
                public $defaultSortField = 'id';
                public $defaultSortDirection = 'DESC';
                В данной таблице всего 2 поля: id и category_fabrics

                Вот весь getlist
                <?php
                
                class msFabricsCategoryGetListProcessor extends modObjectGetListProcessor
                {
                    public $objectType = 'msFabricsCategory';
                    public $classKey = 'msFabricsCategory';
                    public $defaultSortField = 'id';
                    public $defaultSortDirection = 'DESC';
                    //public $permission = 'list';
                
                
                    /**
                     * @param xPDOQuery $c
                     *
                     * @return xPDOQuery
                     */
                    public function prepareQueryBeforeCount(xPDOQuery $c)
                    {
                        $query = trim($this->getProperty('query'));
                        if ($query) {
                            $c->where(array(
                                'category_fabrics:LIKE' => "%{$query}%",
                            ));
                        }
                
                        return $c;
                    }
                
                
                    /**
                     * @param xPDOObject $object
                     *
                     * @return array
                     */
                
                    public function prepareRow(xPDOObject $object) {
                        $array = $object->toArray();
                        return $array;
                    }
                
                }
                
                return 'msFabricsCategoryGetListProcessor';
                  Андрей
                  04 февраля 2017, 22:35
                  0
                  Володя, я немного наврал тебе насчет логов, сначала подумал про консоль)) В лога есть матершина такая:
                  [2017-02-04 22:24:25] (ERROR @ /core/xpdo/xpdo.class.php: 1320) Could not get table class for class: msFabricsCategory
                  [2017-02-04 22:24:25] (ERROR @ /core/xpdo/xpdo.class.php: 1289) Could not get table name for class: msFabricsCategory
                  [2017-02-04 22:24:25] (ERROR @ /core/xpdo/xpdo.class.php: 1320) Could not get table class for class: msFabricsCategory
                  [2017-02-04 22:24:25] (ERROR @ /core/xpdo/xpdo.class.php: 1289) Could not get table name for class: msFabricsCategory
                  [2017-02-04 22:24:25] (ERROR @ /core/xpdo/om/xpdoobject.class.php: 240) Error 42000 executing statement:
                  Array
                  (
                  [0] => 42000
                  [1] => 1064
                  [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `msFabricsCategory` ORDER BY `msFabricsCategory`.`id` DESC LIMIT 20' at line 1
                  )
                    Алексей Ерохин
                    04 февраля 2017, 23:07
                    0
                    Проверьте map файлы
                      Андрей
                      04 февраля 2017, 23:12
                      0
                      По этому пути?
                      core/components/name_components/model/name_components/mysql/
                        Алексей Ерохин
                        04 февраля 2017, 23:14
                        0
                        Да, проверьте названия классов, таблиц
                        Андрей
                        04 февраля 2017, 23:18
                        0
                        Алексей и Володя, спасибо. Все дело было в том, что в map файлах было
                        $xpdo_meta_map['msfabricsCategory']= array (
                        А во всех процессорах и т.д. я вызывал как
                        msFabricsCategory
                        Разница в регистре одной буквы F. Сменил в map файле на
                        $xpdo_meta_map['msFabricsCategory']= array (
                        И все стало выводиться как положено.
                        Спасибо еще раз. Регистр важен значит))
                      Андрей
                      04 февраля 2017, 23:15
                      0
                      Ругается на синтаксис как я понял. А где этот самый синтаксис можно исправить? В map файлах все так, да там и ошибиться трудно, таблица с одним полем…
                        Алексей Ерохин
                        04 февраля 2017, 23:18
                        0
                        Ругается на синтаксис SQL потому что xpdo не получил имя таблицы для класса вашего, возможно где-то опечатка в названии класса или таблицы, проверьте внимательно, все ли вы поменяли
                        Андрей
                        04 февраля 2017, 23:23
                        0
                        Да, Алексей, коммент выше, я расписал ситуацию.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    16