И так, как в 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 )