Почему мой пользовательский отчет SS3.1 возвращает ошибку "[Уведомление] Объект данных состояния сетки класса не может быть преобразован в int"
В качестве упражнения, которое поможет мне научиться писать пользовательские отчеты, я написал очень простой пользовательский отчет для перечисления страниц по их типу страницы. Я написал код на основе стандартного отчета cms/code/reports/BrokenLinksReport.php (включено как часть CMS), но я получаю сообщение об ошибке:
[Примечание] Объект класса GridState_Data не удалось преобразовать в int
Я сбросил содержимое $data, чтобы убедиться, что все было так, как ожидалось, и это было так. Что может быть причиной проблема?
Мой код выглядит следующим образом:
class PageListByType extends SS_Report {
function title() {
return "Page List by Type";
}
function description() {
return "List all the pages in the site, along with their page type";
}
public function sourceRecords($params = array(), $sort = null, $limit = null) {
$data = Page::get()->sort($sort);
$returnSet = new ArrayList();
if ($data) foreach ($data as $record) {
$returnSet->push($record);
}
return $returnSet;
}
public function columns() {
return array(
array(
'title'=>_t('PageListByTypeReport.PageName', 'Page name')
),
array(
'className'=>_t('PageListByTypeReport.ClassName', 'Page type')
)
);
}
}
1 answers
Ошибка заключается в том, что двумерный массив в функции columns
устанавливается неправильно. Имя переменной отсутствует и находится в неправильном месте для каждого столбца.
Либо вы можете установить столбцы следующим образом:
public function columns() {
return array(
'Title' => array(
'title'=>_t('PageListByTypeReport.PageName', 'Page name')
),
'ClassName' => array(
'title'=>_t('PageListByTypeReport.ClassName', 'Page type')
)
);
}
Или еще проще, как это:
public function columns() {
return array(
'Title' => _t('PageListByTypeReport.PageName', 'Page name'),
'ClassName' => _t('PageListByTypeReport.ClassName', 'Page type')
);
}
Текущая функция sourceRecords
будет работать, хотя мы можем сделать это намного проще, просто вернув результаты Page::get()
следующим образом:
public function sourceRecords($params = array(), $sort = null, $limit = null) {
$pages = Page::get()->sort($sort);
return $pages;
}
Вот рабочая и упрощенная версия кода отчета:
class PageListByType extends SS_Report {
function title() {
return 'Page List by Type';
}
function description() {
return 'List all the pages in the site, along with their page type';
}
public function sourceRecords($params = array(), $sort = null, $limit = null) {
$pages = Page::get()->sort($sort);
return $pages;
}
public function columns() {
return array(
'Title' => _t('PageListByTypeReport.PageName', 'Page name'),
'ClassName' => _t('PageListByTypeReport.ClassName', 'Page type')
);
}
}