【问题标题】:Silverstripe autocomplete textfieldSilverstripe 自动完成文本字段
【发布时间】:2018-06-15 05:56:39
【问题描述】:

我在网站上使用tractorcow's Silverstripe-autocomplete 模块在文本字段上实现自动完成功能。但是,我想知道为什么它返回 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';
}

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    我刚刚查看了源代码,默认displayFieldTitle。您可以通过将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;
      }
    }
    

    【讨论】:

    • 感谢@Gavin,这是导致它的原因,但更改 CompanyName 列可能会令人困惑,因为我们将它用作导入 CSV 数据的标题。我所做的是更改 __construct() 方法并通过检查其计数将字段设置为 $sourceFields。这样,我还可以在其他数据对象上重用该类。 if(count($this->sourceFields) == 1){ $this->displayField = $this->sourceFields[0]; ... }
    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 2021-06-21
    • 2018-09-24
    • 2011-03-17
    • 2012-05-24
    • 2013-11-07
    相关资源
    最近更新 更多