CakePHP 2.0 Livesearch

#php #jquery #ajax #cakephp #search

#php #jquery #ajax #cakephp #Поиск

Вопрос:

Я пытаюсь создать это: http://www.justkez.com/cakephp-livesearch / в CakePHP 2.0. Проблема в том, что AjaxHelper больше не доступен в CakePHP 2.0, и поэтому

 echo $this->Ajax->observeField('query', $options);
 

Больше не работает.

Есть предложения?

Комментарии:

1. Изучите новых помощников и переходите оттуда. Наверное, хорошее место для начала … book.cakephp.org/2.0/en/core-libraries/helpers/js.html

Ответ №1:

Все AjaxHelper вызовы были просто удобными методами для функций JavaScript; большинство из которых можно легко выполнить в самом Javascript, что я предпочитаю делать сам. Я полагаю, что observeField просто добавит прослушиватель событий «onchange», но я никогда не использовал его, поэтому не могу быть уверен.

В Cake 2.0 (и 1.3, кстати) есть замена AjaxHelper, хотя она называется the JsHelper , и она использует различные движки для адаптации к нескольким существующим фреймворкам JavaScript. Вероятно, у него нет тех же методов, что и у AjaxHelper, но он намного более гибкий, и я уверен, что он будет соответствовать вашим потребностям.

Ответ №2:

В итоге я реализовал его с помощью JsHelper, как было предложено выше. Я буду отмечать это как ответ, поскольку он содержит фактический пример кода о том, как это сделать.

 <h3>Search Reservations</h3>
<?php
echo $this->Html->css('screen');
// we need some javascripts for this
echo $this->Html->script('jquery');
// create the form
echo $this->Form->create(false, array('type' => 'get', 'default' => false));
echo $this->Form->input('query', array('type' => 'text','id' => 'query', 'name' => 'query', 'label' => false))?>
<div id="loading" style="display: none; ">
<?php
echo $this->Html->image('ajax_clock.gif');
?>
</div>
<?php
$this->Js->get('#query')->event('keyup', $this->Js->request( 
array('controller' => 'sales','action' => 'searchReservations', $event['Event']['id']), 
array( 
'update' => '#view', 
'async' => true,
'dataExpression' => true, 
'method' => 'post', 
'data' => $this->Js->serializeForm(array('isForm' => false, 'inline' => true))) 
));
?>