Сортировка столбцов Silverstripe не работает на price.nice - PullRequest
0 голосов
/ 19 октября 2018

Сортировка столбца администрирования Silverstripe 3.6 не работает на price.nice.У меня есть следующий код

 private static $summary_fields = array (
    'GridThumbnail'           => '',
    'PricePerNight.nice'      => 'Price',
    'Title'                   => 'Title',
    'Status'                  => 'Status',
    'Proptype.Title'          => 'Type',
    'Pricetype.Title'         => 'Type',
    'Bedrooms'                => 'Beds',
    'NiceDate.Nice'           => 'Updated',
    'CreatedDate'             => 'Added',
    'FeaturedOnHomepage.nice' => 'Featured?'
);

Когда я использую PricePerNight.nice, он убирает столбец сортировки вверх и вниз, когда я удаляю его, он позволяет столбцу сортировки любые идеи, как обойти это, или этоошибка?По сути, любой столбец, в котором есть .nice, не сортируется.

1 Ответ

0 голосов
/ 22 октября 2018

Сортировка по полям сетки обеспечивается классом GridFieldSortableHeader.Сортирует с помощью запроса.Когда вы вызываете PricePerNight.nice, вы ссылаетесь на метод Nice() в классе Currency, который изменяет данные, поступающие из базы данных.

Это можно исправить, вызвав метод setFieldSorting onGridFieldSortableHeader.Для этого метода требуется массив с вашими пользовательскими именами полей и фактическим именем поля в качестве значения для сортировки.

Из кода, который, я полагаю, вы следуете за уроками SilverStripe и работаете в ModelAdmin.

Для ModelAdmin:

public function getEditForm($id = null, $fields = null)
{
    $form = parent::getEditForm($id, $fields);

    if($gridField = $form->Fields()->dataFieldByName($this->sanitiseClassName($this->modelClass))) {
        $config = $gridField->getConfig();
        $sortableHeader = $config->getComponentByType(GridFieldSortableHeader::class);

        $sortableHeader->setFieldSorting([
            'PricePerNight.nice'      => 'PricePerNight',
            'NiceDate.Nice'           => 'NiceDate',
            'FeaturedOnHomepage.nice' => 'FeaturedOnHomepage'
        ]);
    }

    return $form;
}

Для объектов данных (страниц):

public function getCMSFields()
{
    $fields = parent::getCMSFields();

    if($gridField = $fields->dataFieldByName('Property')) { //relationname
        $config = $gridField->getConfig();
        $sortableHeader = $config->getComponentByType(GridFieldSortableHeader::class);

        $sortableHeader->setFieldSorting([
            'PricePerNight.nice' => 'PricePerNight',
            'NiceDate.Nice' => 'NiceDate',
            'FeaturedOnHomepage.nice' => 'FeaturedOnHomepage'
        ]);
    }

    return $fields;
}
...