You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.yml
    oro:
        filter:
            date_range:
                yesterday: Yesterday
    
  • 中文:Resources/translations/messages.zh_CN.yml
    oro:
        filter:
            date_range:
                yesterday: 昨日
    

步骤4:清理缓存并验证

执行缓存清理命令:

php bin/console cache:clear --env=prod

刷新仪表盘页面,打开自定义小部件的日期选择器,即可看到新增的「昨日」选项。


内容的提问来源于stack exchange,提问作者Tony Díaz Ramos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:45:38