如何为报表中的记录设置自定义值?

高度不规则

下面的代码是我使用SilverStripe 3.1汇总的自定义报告。

Title和ClassName值工作正常,但是尽管我可以获取每个页面的状态,但是我不确定如何针对DataList中的每个页面设置状态值。我怎样才能做到这一点?

完成后,应填充“状态”列。

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);
        foreach ($pages as $pagenum=>$page) {
            $flags = $page->getStatusFlags();
            if ($flags) {
                foreach ($flags as $status) {
//                    if (isset($pages[$pagenum]->Status)) die(array($pages[$pagenum]->Status, $status)); #detect multiple statuses; not sure if this will happen
                    /////////////////////////
                    // The following line needs fixing:
                    /////////////////////////
                    $pages[$pagenum]->Status = "{$status['text']} ({$status['title']})";
                }
            }
        }
//        die($pages->debug());
        return $pages;
    }

    public function columns() {
        return array(
            'Title' => _t('PageListByTypeReport.PageName', 'Page name'),
            'ClassName' => _t('PageListByTypeReport.ClassName', 'Page type'),
            'Status' => _t('PageListByTypeReport.Status', 'Status')
        );
    }
}

编辑:感谢@Turnerj的答案!我的最终工作代码如下:

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 = DataObject::get("SiteTree", "", "");
        return $pages;
    }

    public function columns() {
        return array(
            'Title' => _t('PageListByTypeReport.PageName', 'Page name'),
            'ClassName' => _t('PageListByTypeReport.ClassName', 'Page type'),
            'Status' => _t('PageListByTypeReport.Status', 'Status')
        );
    }
}

在Page.php中:

public function getStatus() {
    $flags = $this->getStatusFlags();
    $result = array();
    if ($flags) {
        foreach ($flags as $status) {
            $result[] = "{$status['text']} ({$status['title']})";
        }
    } else {
        $result[] = 'Published';
    }
    return implode(', ', $result);
}
特纳

经过进一步调查,我重新创建了问题并找到了解决方案。

总体而言,我的解决方案涉及我在注释中建议的有关Page通过添加getStatus功能使状态获取变为实际的建议

我基本上描述了以下内容:

public function getStatus()
{
    return $this->getStatusFlags();
}

技术上讲是正确的,它将获得状态标志,但是您是对的,它不会在报告中显示它们。这是由于此函数返回了报表无法理解的数组。

我的解决方案是更改此函数以返回字符串,因此,通过将您写的内容与我写的内容进行一些简单的编辑,就可以得到以下内容:

public function getStatus()
{
    $flags = $this->getStatusFlags();
    $result = array();
    if ($flags)
    {
        foreach ($flags as $status)
        {
            $result[] = "{$status['text']} ({$status['title']})";
        }
    }
    return implode(', ', $result);
}

在组合代码方面,我有一个独特的想法,我将每个状态添加到数组中,然后将implode其添加回单个字符串中这似乎有点多余,默认情况下getStatusFlag在数组中返回一个键但是,如果您有一个DataExtension具有该updateStatusFlags方法的方法,则可以向结果中添加其他键。

基本上,implode如果将来您的代码确实弄乱了状态标志,那么我将不做任何处理。

现在,您可以使用上的$casting属性执行类似的操作,Page但是鉴于您实质上是为报表添加了此功能,因此直接更新它更为干净。


我确实注意到,如果页面已发布,则状态标志数组实际上为空,这意味着您的报表在已发布的页面旁将没有任何内容。如果那是您的意图,那就太好了!

如果没有,您可以再做一点改动:

public function getStatus()
{
    $flags = $this->getStatusFlags();
    $result = array();
    if ($flags)
    {
        foreach ($flags as $status)
        {
            $result[] = "{$status['text']} ({$status['title']})";
        }
    }
    else
    {
        $result[] = 'Published (The page has been published)';
    }
    return implode(', ', $result);
}

if ($flags)将计算为false在没有当前的状态(亦称页面被出版)由于自动注入

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在自定义通知textview中设置值

来自分类Dev

如何在Flutter中设置自定义FontWeight值

来自分类Dev

如何在自定义通知textview中设置值

来自分类常见问题

当函数产生某些参数的重复项时,如何为UI报表自定义函数[r]

来自分类Dev

当函数产生某些参数的重复项时,如何为UI报表自定义函数[r]

来自分类Dev

Jasper报表中的自定义GROUP BY

来自分类Dev

如何为“自定义” JsonDotNetResult提供可选设置?

来自分类Dev

如何为UIButton设置自定义渐变背景?

来自分类Dev

如何为UIWebView设置自定义键盘

来自分类Dev

Highcharts-如何为系列设置自定义颜色

来自分类Dev

如何为自定义垂直滑块Jquery设置动画

来自分类Dev

如何为自定义JsonConverter设置FloatParseHandling.Decimal?

来自分类Dev

如何为XSD日期设置自定义模式?

来自分类Dev

如何为PowerShell 5.0设置自定义语法颜色?

来自分类Dev

如何为PHP herokuapp设置自定义404?

来自分类Dev

如何为自定义微调框设置默认标题?

来自分类Dev

如何为Piechart元素设置自定义颜色

来自分类Dev

如何为backBarButtonItem设置自定义字体

来自分类Dev

如何为自定义垂直滑块Jquery设置动画

来自分类Dev

如何为“ HyperlinkButton”控件设置自定义标题?

来自分类Dev

如何为文件夹设置自定义图标?

来自分类Dev

如何为团队设置自定义顺序

来自分类Dev

如何为 UIView 的自定义子类设置约束?

来自分类Dev

如何为 bootstrap 年历设置自定义箭头

来自分类Dev

如何为datagridview中的特定列设置自定义日期格式?- C#

来自分类Dev

电子中如何为每个请求发送自定义标头和值?

来自分类Dev

如何在自定义设置器中添加活动记录验证错误?

来自分类Dev

如何获取销售订单 ID 并将其设置在 netsuite 的自定义记录中?

来自分类Dev

如何在Dymola中定义记录的自定义参数?

Related 相关文章

  1. 1

    如何在自定义通知textview中设置值

  2. 2

    如何在Flutter中设置自定义FontWeight值

  3. 3

    如何在自定义通知textview中设置值

  4. 4

    当函数产生某些参数的重复项时,如何为UI报表自定义函数[r]

  5. 5

    当函数产生某些参数的重复项时,如何为UI报表自定义函数[r]

  6. 6

    Jasper报表中的自定义GROUP BY

  7. 7

    如何为“自定义” JsonDotNetResult提供可选设置?

  8. 8

    如何为UIButton设置自定义渐变背景?

  9. 9

    如何为UIWebView设置自定义键盘

  10. 10

    Highcharts-如何为系列设置自定义颜色

  11. 11

    如何为自定义垂直滑块Jquery设置动画

  12. 12

    如何为自定义JsonConverter设置FloatParseHandling.Decimal?

  13. 13

    如何为XSD日期设置自定义模式?

  14. 14

    如何为PowerShell 5.0设置自定义语法颜色?

  15. 15

    如何为PHP herokuapp设置自定义404?

  16. 16

    如何为自定义微调框设置默认标题?

  17. 17

    如何为Piechart元素设置自定义颜色

  18. 18

    如何为backBarButtonItem设置自定义字体

  19. 19

    如何为自定义垂直滑块Jquery设置动画

  20. 20

    如何为“ HyperlinkButton”控件设置自定义标题?

  21. 21

    如何为文件夹设置自定义图标?

  22. 22

    如何为团队设置自定义顺序

  23. 23

    如何为 UIView 的自定义子类设置约束?

  24. 24

    如何为 bootstrap 年历设置自定义箭头

  25. 25

    如何为datagridview中的特定列设置自定义日期格式?- C#

  26. 26

    电子中如何为每个请求发送自定义标头和值?

  27. 27

    如何在自定义设置器中添加活动记录验证错误?

  28. 28

    如何获取销售订单 ID 并将其设置在 netsuite 的自定义记录中?

  29. 29

    如何在Dymola中定义记录的自定义参数?

热门标签

归档