Silverstripe - 根据选定的DataObject填充字段

时间:2016-09-16 13:25:45

标签: php jquery silverstripe

当我从wagtailimages

中选择名称时,我想在屏幕上显示members个详细信息

更多信息:我有一个提交几个字段的表单。其中我有一个“选择用户”Dropdown来将此人与正在提交的数据相关联

问题是 - 客户希望用户的详细信息在他们选择用户时显示(确保其合适的人等)

我怎样才能做到这一点?有3个单独的输入字段需要包含数据。我知道如何使用原始PHP / javascript,但不知道如何以Dropdown方式实现它

2 个答案:

答案 0 :(得分:1)

您不必使用Ajax,当您在控制器上设置表单时,可以使用loadDataFrom(http://api.silverstripe.org/3.3/class-Form.html#_loadDataFrom)将成员直接加载到表单中。

示例实现可能是(我没有测试过,但它应该可以工作):

class Page_Controller extends ContentController
{

  public function index()
  {
    $member = Member::currentUser();

    $this->customise(array(
      "Form" => $this->Form()->loadDataFrom($member)
    ));
  }

  public function Form() {
    return Form::create(
      $this,
      "Form",
      $fields, // Add your own fields here
      $actions // Add your own actions here
    );
  }
}

答案 1 :(得分:0)

基于此获得解决方案:https://www.silverstripe.org/community/forums/form-questions/show/24628

我这样做是这样的:

SS模板

$("table.myTable").on('change','select#Some_Form',function(){
 $.ajax({
   type: "POST",
   data: {param:param},
   url: window.location.href+"your_action_here",
   success: function(result) {
      var resArr = JSON.parse(result);
      $('input#Some_Field').val(resArr['key']);
    }
 }); 
});

<强>控制器

static $allowed_actions = array('your_action_here');
  //parameter is a SS_HTTPRequest
public function your_action_here($request){
 //assuming my parameter is an ID
 $ID = $request['param'];
 $dataObject = DataObject::get_by_id('Object',$ID);
 $JSONArray = array('key'=>$dataObject->Field);
 echo json_encode($JSONArray);    
}

当选择更改时,获取DataObject并正确填充:)