Как работает Ajax в CakePHP 2 по сравнению с CakePHP 1.2; Ajax in CakePHP 2 instead of CakePHP 1.2

И так, как в cakephp 1.2 можно было работать с ajax — например обновление выпадающих списков.

Мы имеем специальности (professions) на которых есть курсы (courses). Задача при выборе специальности обновить выпадающий список с нужными курсами.

Какие настройки не обходимо сделать в первую очередь:

в лейауте — вывести подключение какого либо JS движка (Prototype или Jquery):

echo $javascript->link(array('prototype'));

в app_controller — подключение нужных хелперов (причем порядок подключения хелперов не важен):

var $helpers = array('Html', 'Form',  'Ajax','Javascript');

Что нужно вделать в контроллере (например students_controller.php) (модель Student) для вывода студентов одного курса:

выбираем все специальности и выводим их в простой список

 function index () {
$this->loadModel('Profession');
$professions = $this->Profession->find('list');
$this->set(compact('professions'));
}
функция вызываемая со страницы асинхронно через AJAX
function update_course () {
 if(!empty($this->data['Student']['profession_id'])) {
 $profession_id = $this->data['Student']['profession_id'];
 $this->loadModel('Course');
 $options = $this->Course->find('list', array('conditions' => array ('Course.profession_id' => $profession_id)));
 $this->set(compact('options'));
 }

содержимое вьюшки update_course

<?php
if(!empty($options)) {
 echo "<option value=''>Выберите курс</option>";
 foreach($options as $k => $v) {
 echo "<option value='$k'>$v</option>";
 }
}
?>

что нужно сделать во вьюшке index…

выводим список факультетов… особое внимание на выделенный жирным текстом кусок кода.

<div>
 <?php
 echo $form->input('profession_id', array('options' => $professions, 'empty' => 'Выберите специальность', 'label' => '', 'id' => 'professions'), null);
 ?>
 </div>

теперь как формируется courses

<div>
 <?php
 echo $form->select('course_id', array(), null, array('id' => 'courses'));
 $course_options = array('url' => 'update_course','update' => 'courses');
 echo $ajax->observeField('professions', $course_options);
 ?>
 </div>

Собственно все!!! Так работает автомагия cakephp 1.2. Однако не все так просто если мы посмотрим на CakePHP 2.? (пока работаю с 2.0 )

Один комментарий к “Как работает Ajax в CakePHP 2 по сравнению с CakePHP 1.2; Ajax in CakePHP 2 instead of CakePHP 1.2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.