И так, как в 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 )
Отличное описание, хорошо бы такое же подробное и по версии 2.Х \ 2.0