Я выполнил этот учебник для создания автозаполнения для моей формы:
http://www.willis-owen.co.uk/2012/12/autocomplete-widget-cakephp/#comment-12074
Были некоторые ошибки, но я получил работу отлично.
Теперь я хочу добавить полученные данные в несколько полей формы (тип = текст) на основе выбранной компании. Как это можно достичь? Я добавил в контроллер дополнительные поля:
public function find_company_by_name() {
$this->Customer->recursive = -1;
if ($this->request->is('ajax')) {
$this->autoRender = false;
$results = $this->Customer->find('all', array(
'fields' => array('Customer.name', 'Customer.name_2', 'Customer.address', 'Customer.postalCode', 'Customer.postalAddress',),
//remove the leading '%' if you want to restrict the matches more
'conditions' => array('Customer.name LIKE ' => '%' . $this->request->query['q'] . '%')
));
foreach($results as $result) {
echo $result['Customer']['address'] . "\n";
}
} else {
//if the form wasn't submitted with JavaScript
//set a session variable with the search term in and redirect to index page
// $this->Session->write('customerName',$this->request->data['Customer']['name']);
// $this->redirect(array('controller' => 'users', 'action' => 'dashboard'));
}
}
Поэтому ничего особенного, только добавленные поля в предложение поиска. Следующим шагом является то, что я должен заполнять поля ввода в автозаполнении, запуская JavaScript. Как это сделать? Вот мой очень простой JS:
<script>
$(document).ready(function(){
$("#invoiceName").autocomplete("http://www.domain.com/application/customers/find_company_by_name.json", {
minChars: 1
});
});
</script>
Как получить "name_2", "address", "postalCode" и "postalAddress" -fields в Javascript для заполнения других полей в форме?
Заранее спасибо :)
У меня не было никаких ответов, но я понял это сам, и небольшое руководство от оригинального автора Ричарда Уиллиса-Оуэна.
Вот КОНТРОЛЛЕР:
public function find_company_by_name() {
$this->Customer->recursive = -1;
if ($this->request->is('ajax')) {
$this->autoRender = false;
$results = $this->Customer->find('all', array('fields' => array('Customer.id', 'Customer.name', 'Customer.name_2', 'Customer.address', 'Customer.postalCode', 'Customer.postalAddress'), 'conditions' => array('Customer.name LIKE ' => '%' . $this->request->query['q'] . '%')));
foreach($results as $result) {
echo $result['Customer']['name'].'|'.$result['Customer']['id'].'|'.$result['Customer']['name_2'].'|'.$result['Customer']['address'].'|'.$result['Customer']['postalCode'].'|'.$result['Customer']['postalAddress']."\n";
}
}
}
... и вот Javascript от VIEW:
<script>
$(document).ready(function(){
$("#invoiceName").autocomplete("http://www.domain.fi/application/customers/find_company_by_name.json",
{
minChars: 1,
delay: 0,
maxCacheLength: 100,
onItemSelect:
function (item) {
$("#invoiceCustomerNo").val(item.data[0]);
$("#invoiceName2").val(item.data[1]);
$("#invoiceAddress").val(item.data[2]);
$("#invoicePostalCode").val(item.data[3]);
$("#invoicePostalAddress").val(item.data[4]);
}
}
);
});
</script>
Надеюсь, это поможет кому-то, кто борется с этой "проблемой" :)