【问题标题】:How to add extra summary_field in Silverstripe when extending an object?扩展对象时如何在 Silverstripe 中添加额外的 summary_field?
【发布时间】:2014-04-02 22:09:52
【问题描述】:

我想扩展现有的 Silverstripe 模块 (Swipestripe),其中 Attribute has_many Options.

以下代码成功扩展了 Option,因此每个 Option 都添加了 Cost。

class OptionCost extends DataExtension {

  private static $db = array(
      'Cost' => 'Decimal(19,4)'
  );

  public function getCMSFields() {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.Main', new PriceField('Cost'));
    return $fields;
  }
}

但是,当通过父属性查看选项时,不会显示成本。这是通过 $summary_fields 静态控制的,但我不知道如何将成本添加为新的汇总字段。

我尝试将以下代码添加到 OptionCost 和 Attribute 的扩展中 - 但两种方法都不起作用。

private static $summary_fields = array(
  'Cost' => 'Cost'
);

将 Cost 添加到 summary_fields 表的正确方法是什么?

提前感谢您的任何建议。

【问题讨论】:

    标签: php oop silverstripe


    【解决方案1】:

    在 Silverstripe 3.1 中,在扩展程序中将字段添加到 $summary_fields 是正确的方法。

    以下代码对我有用:

    class OptionCost extends DataExtension  {
    
        private static $db = array(
            'Cost' => 'Decimal(19,4)'
        );
    
        private static $summary_fields = array(
            'Cost'
        );
    
        public function getCMSFields() {
            $fields = parent::getCMSFields();
            $fields->addFieldToTab('Root.Main', new PriceField('Cost'));
            return $fields;
        }
    
    }
    

    在您的配置或配置 yaml 文件中声明扩展。

    config.yml

    ...
    Attribute:
      extensions:
        - OptionCost
    ...
    

    运行dev/build?flush=all

    还要确保您在管理页面上调用?flush=all

    【讨论】:

    • 谢谢@3dgoo - 这是我缺少的 ?flush=all。我扩展了选项而不是属性,它与 $summary_fields 一起使用。我发现的另一件事是扩展 $summary_fields 覆盖而不是附加。再次感谢。
    • 如有疑问,请冲洗。如果原始类有自己的$summary_fields 声明,则附加$summary_fieldsAttribute 有一个 $summary_fields。如果您要扩展Attribute,它将附加$summary_fieldsOption 没有声明 $summary_fields。因此它使用您在扩展程序的$summary_fields 中设置的字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多