Почему мой пользовательский отчет SS3.1 возвращает ошибку & quot; Объект [Примечание] объект класса GridState_Data не может быть преобразован в int & quot;

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

2

Решение

Там ошибка двумерного массива в 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')
);
}
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]