Silverstripe自定义GridFieldExportButton的行为

时间:2016-05-11 17:48:31

标签: php silverstripe

在Silverstripe 3.3.1中,GridFieldExportButton似乎无法覆盖。在这种情况下,我使用userforms,我需要控制GridFieldExportButton中的函数,如generateExportFileData(),以便改变某些行为,例如使用字段标签作为csv中的字段名称并包括
标签。

我试过直接延伸

class SubmissionExportButton extends GridFieldExportButton

通过_config.php

Object::add_extension('GridFieldExportButton', 'SubmissionExportButton');

class SubmissionExportButton extends Extension{}

和通过注射器。

class SubmissionExportButton extends GridFieldExportButton{}

Injector:
  GridFieldExportButton:
    class: SubmissionExportButton

我甚至试图完全替换类并扩展UserDefinedForm,但他有一些意想不到的结果。最好只是控制有问题的班级,但正确的程序是什么?

2 个答案:

答案 0 :(得分:1)

我会复制https://github.com/axyr/silverstripe-phpexcel内所采用的方法来创建一个新组件并取消注册默认组件并注册它。

答案 1 :(得分:0)

注射器应该非常适合这种情况,所以只需要仔细检查您的过程:

<强>〜/ mysite的/ _config / config.yml

Injector:
  GridFieldExportButton:
    class: SubmissionExportButton

<强>〜/ mysite的/代码/ SubmissionExportButton.php

class SubmissionExportButton extends GridFieldExportButton
{
    public function generateExportFileData($gridField)
    {
        // override here, retain return types!
    }
    // etc...
}

,然后

  1. 运行~/dev/build/?flush

  2. 运行~/admin/pages/?flush

  3. 我有时会遇到CMS缓存未能以与前端刷新一致的方式清除的问题,但我必须运行它才能在过去进行某些调整。我甚至不得不多次冲洗CMS,但这通常是在我已经到达$utter_frustration_point或凌晨3点时:P

    我还检查silverstripe/silverstripe-userforms只是为了确保它们还没有覆盖GridFieldExportButton - 似乎没有,祝你好运,我希望这会有所帮助:)