Архив за месяц: Март 2012

Как работает 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 )

Привет, мир! Hello world! ;-)

Завел таки себе личный блог… Накопилось просто много чего для запомнить или просто кому рассказать о Cakephp 2.0  — может пригодится… Сейчас занят разбирательством  с cakephp 2.0, перепрыгнул на него прямо с cakephp 1.2, соответственно первые посты будут про то что изменилось и как с этим бороться…

Писать попробую и на русском и на английском, так как гляжу с инфой в не русском интернете тоже не густо… Потом поглядим о чем дальше писать…

I’ve just made own blog at last. I have a lot of information to memorize or to tell anybody interested in  CakePHP 2.0 framework — Perhaps it will be usefull for you. Right now I’m exploring diferences between CakePHP 2.0 and CakePHP 1.2 which I used before. So coming new posts will be about CakePHP 2.0 tips and tricks.

I’ll try to write posts in English too, because of lack of information about using CakePHP 2.0 in Non Russian segment of Internet.

Sorry for my poor English…