Компонент не выводит данные из БД
Добрый день.
Подскажите, пожалуйста, столкнулся с такой проблемой. пишу компонент, простенький. Пользуюсь для обучения уроками от Василия. На данный момент есть пункт меню, в котором есть одна вкладка. По нажатию на кнопку Создать открывается окно, в которое можно занести данные и они сохраняются в БД. Но в самой таблице ничего не выводится и пишет — «Нет данных для вывода».
В отличие от mod Extra у меня в данной таблице лишь 2 поля: id и category_fabrics. Может ли это быть из-за того, что у меня изменены названия полей в таблице (вернее, это наверное из-за этого), но где тогда еще нужно поправить, чтобы сделать именно вывод в таблице своей в админке данных?
Подскажите, пожалуйста, столкнулся с такой проблемой. пишу компонент, простенький. Пользуюсь для обучения уроками от Василия. На данный момент есть пункт меню, в котором есть одна вкладка. По нажатию на кнопку Создать открывается окно, в которое можно занести данные и они сохраняются в БД. Но в самой таблице ничего не выводится и пишет — «Нет данных для вывода».
В отличие от mod Extra у меня в данной таблице лишь 2 поля: id и category_fabrics. Может ли это быть из-за того, что у меня изменены названия полей в таблице (вернее, это наверное из-за этого), но где тогда еще нужно поправить, чтобы сделать именно вывод в таблице своей в админке данных?
Комментарии: 16
Смотрите что вам возвращает connector в браузере (консоль разработчика F12)
Если там нет ошибки, то проверяйте почему процессор не возвращает (обычно он зовется mgr/getList)
Если там нет ошибки, то проверяйте почему процессор не возвращает (обычно он зовется mgr/getList)
В том то и дело, что консоль девственна…
В процессоре getlist есть такой код:
В процессоре getlist есть такой код:
public function prepareQueryBeforeCount(xPDOQuery $c)
{
$query = trim($this->getProperty('query'));
if ($query) {
$c->where(array(
'name_cat:LIKE' => "%{$query}%",
));
}
return $c;
}
Правильно ли я понимаю, что он и отвечает за вывод?
Ну конкретно этот кусок отвечает за поиск по полю name_cat
Вам нужно в network вкладку смотреть, при обновлении грида (таблицы) вызывается коннектор вашего компонента, посмотрите, что он возвращает.
Вам нужно в network вкладку смотреть, при обновлении грида (таблицы) вызывается коннектор вашего компонента, посмотрите, что он возвращает.
Коннектор компонента возвращает
{success: true, total: «0», results: []}То есть где-то у меня ошибка. Вот куда копать не пойму…
results:[]
success:true
total:«0»
проверьте классы, наследование, поглядите процессоры других компонентов, возможно вы что-то упустили, точно ли записываются данные в базу
Да, данные записываются… Очень странно все…
и что в логах нет ошибок? Наверно в getlist сортировка по полю стоит которого нет или чтото подобное…
Володя, да, ошибок нет никаких…
Вот в getlist
Вот весь getlist
Вот в getlist
public $objectType = 'msFabricsCategory';В данной таблице всего 2 поля: id и category_fabrics
public $classKey = 'msFabricsCategory';
public $defaultSortField = 'id';
public $defaultSortDirection = 'DESC';
Вот весь 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';
Володя, я немного наврал тебе насчет логов, сначала подумал про консоль)) В лога есть матершина такая:
[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
)
Проверьте map файлы
По этому пути?
core/components/name_components/model/name_components/mysql/
Да, проверьте названия классов, таблиц
Алексей и Володя, спасибо. Все дело было в том, что в map файлах было
Спасибо еще раз. Регистр важен значит))
$xpdo_meta_map['msfabricsCategory']= array (А во всех процессорах и т.д. я вызывал как
msFabricsCategoryРазница в регистре одной буквы F. Сменил в map файле на
$xpdo_meta_map['msFabricsCategory']= array (И все стало выводиться как положено.
Спасибо еще раз. Регистр важен значит))
Ругается на синтаксис как я понял. А где этот самый синтаксис можно исправить? В map файлах все так, да там и ошибиться трудно, таблица с одним полем…
Ругается на синтаксис SQL потому что xpdo не получил имя таблицы для класса вашего, возможно где-то опечатка в названии класса или таблицы, проверьте внимательно, все ли вы поменяли
Да, Алексей, коммент выше, я расписал ситуацию.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.