Почему мой пользовательский отчет 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')
            )
        );
    }
}
Author: Highly Irregular, 2015-05-06

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')
        );
    }
}
 3
Author: 3dgoo, 2015-05-05 23:02:23