Я пытаюсь создать форму с полем автозаполнения (Customer
).Поэтому, когда пользователь вводит в это поле несколько букв, тогда текущий запрос вернет всех клиентов, которые содержат эти буквы в полях name
, surname
или company
, и пользователь может выбрать один из них, чтобы заполнить форму.
Это поле формы для клиента:
add.ctp
echo $this->Form->control('customer', ['id' => 'Autocomplete', 'empty' => true]);
Это функция Js:
<script type="text/javascript">
$(document).ready(function(){
// Caching the movieName textbox:
var company = $('#Autocomplete');
// Defining a placeholder text:
company.defaultText('Search for customers');
// Using jQuery UI's autocomplete widget:
company.autocomplete({
minLength : 1,
source : 'getAll',
select: function( event, ui ) {
event.preventDefault();
$(company).val(ui.item.id);
},
dataType: "jsonp",
success: function( data ) {
response( data );
}
});
});
// A custom jQuery method for placeholder text:
$.fn.defaultText = function(value){
var element = this.eq(0);
element.data('defaultText',value);
element.focus(function(){
if(element.val() == value){
element.val('').removeClass('defaultText');
}
}).blur(function(){
if(element.val() == '' || element.val() == value){
element.addClass('defaultText').val(value);
}
});
return element.blur();
}
</script>
Controller.php
Это функция getAll, которая содержит запрос:
public function getAll() {
$this->autoLayout = false;
$this->autoRender = false;
$results = TableRegistry::get('Customers')->find('all', ['fields' => ['company', 'name', 'surname'],
'conditions' => [
'name LIKE' => '%'.$this->request->query('term').'%',
'company LIKE' => '%'.$this->request->query('term').'%',
'surname LIKE' => '%'.$this->request->query('term').'%',
]]);
$response = array();
$i = 0;
foreach($results as $result){
$response[$i] = $result['company'];
$i++;
}
echo json_encode($response);
}
Но я не получаю никаких результатов ...