Сортировка по полям сетки обеспечивается классом 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;
}