如何在silverstripe CMS上过滤CSV导出?

问题描述 投票:2回答:1

我正在尝试导出我的数据的CSV,该CSV当前显示在我的Silverstripe CMS的一部分中,按特定日期范围过滤。它在导出整个内容时工作正常,但我希望能够过滤导出的结果,以便返回特定日期范围内的所有结果。

我的数据库有一列记录创建的日期 - 格式为'D-M-Y; H-M-S'我认为可以用来进行过滤,但我无法弄清楚如何设置搜索过滤器。我知道如果你使用可搜索的字段然后导出,你只导出过滤的搜索结果,所以假设这是最好的方法,但无法弄清楚如何实现它。

任何建议将不胜感激。

- 免责声明 - 我本来想把它放在silverstripe论坛上,但由于某些原因我完全无法注册 - 我从未收到过电子邮件确认。 ---

<?php
namespace AffiliateProgram;

use SilverStripe\Forms\GridField\GridField;
use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
use SilverStripe\Security\Permission;
use SilverStripe\ORM\DataObject;


class MemberBonus extends DataObject
 {
private static $db = [
    'Amount' => 'Currency',
    'Confirmed' => 'Boolean',
    'Level' => 'Int',
    'Percentage' => 'Int'
];

private static $has_one = [
    'Member' => 'AffiliateProgram\Member',
    'MemberPayment' => 'AffiliateProgram\MemberPayment',
    'PaymentType' => 'AffiliateProgram\PaymentType',
    'ProgramType' => 'AffiliateProgram\ProgramType'
];

private static $summary_fields = [
    'Amount' => 'Amount (USD)',
    'Member.Email' => 'Email', 
    'Level',
    'MemberPayment.PaymentType.Symbol' => 'Recieved As',
    'Percentage' => 'Percentage Bonus Applied',
    'ProgramType.Name' => 'Program Type',
    'MemberPayment.Created' => 'Payment Date',
    'Confirmed' => 'Confirmed?',
    'MemberPayment.ID' => 'Payment ID'
];
}

表上还有一个DateCreated列。

silverstripe silverstripe-4
1个回答
3
投票

您可以通过getSearchContext()将自定义搜索字段添加到ModelAdmin,并使用getList()基于它们自定义查询。请参阅SilverStripe文档的this section

以下是排除CreatedAt值低于搜索字段中提供的日期的结果的示例(假设您的ModelAdmin仅管理MemberBonus):

<?php

use SilverStripe\Admin\ModelAdmin;
use SilverStripe\Forms\DatetimeField;

class MemberBonusAdmin extends ModelAdmin
{
    ...

    public function getSearchContext()
    {
        $context = parent::getSearchContext();

        $context->getFields()->push(new DatetimeField('q[CreatedAfter]', 'Created After'));

        return $context;
    }

    public function getList() 
    {
        $list = parent::getList();

        $params = $this->getRequest()->requestVar('q');

        if (!empty($params['CreatedAfter'])) {
            $list = $list->exclude('CreatedAt:LessThan', $params['CreatedAfter']);
        }

        return $list;
    }
}

要使范围有效,您只需添加CreatedBefore字段和过滤器即可。

© www.soinside.com 2019 - 2024. All rights reserved.