3.1 Поиск DataObjects и выбор полей
Начиная с обновления до 3.1, я замечаю, что поля выбора, возвращаемые в форме поиска для объектов данных для значений перечисления, не возвращают параметр по умолчанию 'any', а скорее первое значение. Это позволяет пользователям искать конкретное значение для этого поля, а не "любое".
в dataobject.php
public function getCustomSearchContext() {
$fields = $this->scaffoldSearchFields(array(
'restrictFields' => array('Field1', 'Field1')
));
$filters = array(
'SomeField' => new PartialMatchFilter('Field1'),
.....etc
);
return new SearchContext(
$this->class,
$fields,
$filters
);
}
SomePage.php
public function DOSearch() {
$context = singleton('DataObject')->getCustomSearchContext();
$fields = $context->getSearchFields();
$form = new Form($this, "DOSearch",
$fields,
new FieldList(
new FormAction('doDOSearch')
)
);
return $form;
}
public function doDOSearch($data, $form) {
$context = singleton('DataObject')->getCustomSearchContext();
$set = ArrayList::create( $context->getResults($data)->toArray() );
return $this->customise(array(
'Set1' => $Set1
))->renderWith(array('DOResults', 'Page'));
}
Объект данных настраивается с помощью столбца Enum и набора $searchable_fields. Я хочу, чтобы у пользователей была опция 'any' вместо того, чтобы выбирать 1 из установленных значений, которые будут возвращены.
2 ответа
Вы должны иметь возможность редактировать DropdownField
в getCustomSearchContext()
функционировать после эшафот $fields
либо с:
$fields->fieldByName('TheNameOfTheDropdownField')->setHasEmptyDefault(true);
это позволит отменить выбор или:
$fields->fieldByName('TheNameOfTheDropdownField')->setEmptyString('Any');
который добавит пустую опцию "Any" в поле.
Это ошибка в SilverStripe, которая исправлена через https://github.com/silverstripe/silverstripe-framework/pull/2566 и, надеемся, скоро появится в ядре.