如何在OroCRM仪表盘自定义小部件的日期范围列表中添加“昨日”选项?
为OroCRM自定义仪表盘小部件添加「昨日」日期范围选项
实现思路
OroCRM的日期范围选项由DateRangeProviderInterface的实现类统一提供,我们通过装饰原提供者的方式新增自定义范围,无需修改核心代码。
步骤1:创建自定义日期范围提供者类
在你的自定义Bundle(比如AcmeDashboardBundle)下创建扩展类,继承并扩展原有提供者的逻辑:
<?php namespace Acme\DashboardBundle\Provider; use Oro\Bundle\FilterBundle\Provider\DateRangeProviderInterface; class CustomDateRangeProvider implements DateRangeProviderInterface { private $originalProvider; public function __construct(DateRangeProviderInterface $originalProvider) { $this->originalProvider = $originalProvider; } // 保留原有日期格式规则 public function getDateRangeFormats() { return $this->originalProvider->getDateRangeFormats(); } // 新增「昨日」范围选项 public function getDateRanges() { $defaultRanges = $this->originalProvider->getDateRanges(); // 将「昨日」插入到「今日」之前(位置可自行调整) $newRanges = []; foreach ($defaultRanges as $key => $range) { if ($key === 'today') { $newRanges['yesterday'] = [ 'label' => 'oro.filter.date_range.yesterday', 'start' => 'yesterday 00:00:00', 'end' => 'yesterday 23:59:59' ]; } $newRanges[$key] = $range; } // 如果默认列表里没有「今日」,直接追加到末尾 if (!isset($newRanges['yesterday'])) { $newRanges['yesterday'] = [ 'label' => 'oro.filter.date_range.yesterday', 'start' => 'yesterday 00:00:00', 'end' => 'yesterday 23:59:59' ]; } return $newRanges; } // 保留原有类型定义 public function getType() { return $this->originalProvider->getType(); } }
步骤2:配置服务装饰器
在Bundle的Resources/config/services.yml中配置服务,用自定义类装饰原有日期范围提供者:
services: acme.dashboard.provider.custom_date_range: class: Acme\DashboardBundle\Provider\CustomDateRangeProvider decorates: oro_filter.provider.date_range arguments: - '@acme.dashboard.provider.custom_date_range.inner'
步骤3:添加多语言翻译
在Bundle的翻译文件中添加「昨日」的对应文本:
- 英文:
Resources/translations/messages.en.ymloro: filter: date_range: yesterday: Yesterday - 中文:
Resources/translations/messages.zh_CN.ymloro: filter: date_range: yesterday: 昨日
步骤4:清理缓存并验证
执行缓存清理命令:
php bin/console cache:clear --env=prod
刷新仪表盘页面,打开自定义小部件的日期选择器,即可看到新增的「昨日」选项。
内容的提问来源于stack exchange,提问作者Tony Díaz Ramos
相关产品推荐
相关产品推荐

