Silverstripe 自动完成文本字段
Silverstripe autocomplete textfield
我在网站上使用了 tractorcow's Silverstripe-autocomplete 模块来实现文本字段的自动完成功能。但是,我想知道为什么它 returns ID 字段而不是文本(在 CompanyName 字段上)。
这是代码。
在我的页面上,我在表单上使用了它:
public function MyForm(){
$fields = FieldList::create();
...
$fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCompany','CompanyName')->setAttribute('required','required'));
...
}
那么,我的数据对象如下:
class UserCompany extends DataObject{
private static $db = [
'CompanyID' => 'Int',
'CompanyName' => 'Varchar(512)'
];
private static $summary_fields = [
'CompanyID' => 'CompanyID',
'CompanyName' => 'CompanyName'
];
private static $default_sort = 'CompanyName ASC';
}
刚刚查看了源码,默认的displayField
是Title
。您可以通过将 CompanyName
字段更改为 Title
或使用 setDisplayField
方法来更改 UserCompany
对象。
$fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCompany','CompanyName')->setDisplayField('CompanyName')->setAttribute('required','required'));
编辑
对 Title
使用 setter 函数也应该有效。这意味着您不需要使用 setDisplayField。
class UserCompany extends DataObject {
...
function Title() {
return $this->CompanyName;
}
}
我在网站上使用了 tractorcow's Silverstripe-autocomplete 模块来实现文本字段的自动完成功能。但是,我想知道为什么它 returns ID 字段而不是文本(在 CompanyName 字段上)。
这是代码。
在我的页面上,我在表单上使用了它:
public function MyForm(){
$fields = FieldList::create();
...
$fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCompany','CompanyName')->setAttribute('required','required'));
...
}
那么,我的数据对象如下:
class UserCompany extends DataObject{
private static $db = [
'CompanyID' => 'Int',
'CompanyName' => 'Varchar(512)'
];
private static $summary_fields = [
'CompanyID' => 'CompanyID',
'CompanyName' => 'CompanyName'
];
private static $default_sort = 'CompanyName ASC';
}
刚刚查看了源码,默认的displayField
是Title
。您可以通过将 CompanyName
字段更改为 Title
或使用 setDisplayField
方法来更改 UserCompany
对象。
$fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCompany','CompanyName')->setDisplayField('CompanyName')->setAttribute('required','required'));
编辑
对 Title
使用 setter 函数也应该有效。这意味着您不需要使用 setDisplayField。
class UserCompany extends DataObject {
...
function Title() {
return $this->CompanyName;
}
}