2016-09-16 60 views
1

我想,當我從一個DropdownSilverstripe - 填充字段根據所選數據對象

更多信息選擇他們的名字在屏幕上顯示一個members細節:我有一個提交幾個字段的形式。他們當中我有一個「選擇用戶」 Dropdown這個人鏈接到提交

問題是 - 客戶希望用戶的詳細信息顯示,當他們選擇一個用戶的數據(確保其正確的人等)

我該如何做到這一點?有3個獨立的輸入字段需要包含數據。我知道如何使用原始PHP/JavaScript來做到這一點,但不知道如何在Silverstripe的方式實現這一

+0

應該在這裏足夠的信息來複制... https://github.com/sheadawson/ silverstripe-dependentdropdownfield(而不是另一個下拉菜單,你正在填充一個div或其他東西......) – Barry

回答

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和正確填充:)

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 
    ); 
    } 
} 
+0

這是正確的,但只會顯示當前用戶的數據,而不是基於Dropdown的任何用戶或其他DataObjects的數據說我必須在以後的某個地方重用它:))。但是,謝謝 –