В качестве упражнения, помогающего мне научиться писать собственные отчеты, я написал очень простой специальный отчет для списка страниц по типу. Я написал код на основе стандартного отчета 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')
)
);
}
}
Там ошибка двумерного массива в 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')
);
}
}
Других решений пока нет …