Как вы фильтруете экспорт CSV на CMS Silverstripe? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь экспортировать CSV-данные моих данных, которые в данный момент отображаются в разделе моей CMS Silverstripe, отфильтрованные по определенному диапазону дат. Он отлично работает в момент экспорта всего содержимого, но я хотел бы иметь возможность фильтровать экспортируемые результаты, чтобы он возвращал все результаты в пределах определенного диапазона дат.

В моей базе данных есть столбец, в котором записана дата создания - в формате '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.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете добавить пользовательские поля поиска в ModelAdmin через getSearchContext() и настроить запрос на основе них с помощью getList(). См. этот раздел документации SilverStripe.

Вот пример исключения результатов со значением 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 и фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...