2016-09-16 2 views
1

Я хочу, чтобы отобразить members детали на экране, когда я выбираю свое имя из DropdownSilverStripe - населяют поля в зависимости от выбранного DataObject

Дополнительной информации: У меня есть форма, которая отправляет несколько полей. Среди них у меня есть «Выбор пользователь» Dropdown связать этот человек с данными, представленных

проблемы IS-клиент хочет деталь пользователя, чтобы показать при выборе пользователя (убедитесь, что его право человека и т.д.)

Как я могу это сделать? Есть как 3 отдельных поля ввода, которые должны содержать данные. Я знаю, как сделать это с помощью сырой PHP/JavaScript, но не знаю, как реализовать это в Silverstripe образом

+0

Должно быть достаточно информации здесь, чтобы скопировать ... https://github.com/sheadawson/ silverstripe-dependentdropdownfield (вместо другого раскрывающегося списка вы заполняете только div или что-то еще ...) – Barry

ответ

0

Есть решение, основанное от этого: https://www.silverstripe.org/community/forums/form-questions/show/24628

То, как я сделал это было так:

шаблон СС

$("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 (позволяет скажем, я должен использовать его где-то позже :)). Но спасибо –

Смежные вопросы