CakePHP рдореЗрдВ AJAX рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг, рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ CakePHP рдореЗрдВ AJAX рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред рд╣рдо jquery.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рд╣рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд░реАрдореЗрдХ рдХрд░реЗрдВрдЧреЗред рдкреБрд╕реНрддрдХрд╛рд▓рдп
рд╢реБрд░реБрдЖрддрд╣рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП CakePHP рдврд╛рдВрдЪреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрди рдкрд░ рдкреЛрд╕реНрдЯ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╣рдо AJAX рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдкреЛрд╕реНрдЯ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБ:
CREATE TABLE `comments` ( `id` varchar(36) COLLATE utf8_unicode_ci NOT NULL, `post_id` varchar(36) COLLATE utf8_unicode_ci NOT NULL, `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `body` text COLLATE utf8_unicode_ci, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE `posts` ( `id` varchar(36) COLLATE utf8_unicode_ci NOT NULL, `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `body` text COLLATE utf8_unicode_ci, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
рд╣рдо рдмреЗрдХ рдХреЗ рд╕рд╛рде рд╕рднреА "рдЧрдВрджреЗ" рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдХреЗрдХ рдмреЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, CakePHP рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрд╕реЛрд▓ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (\ app \ Console \ cake), рдореИрдВ рдПрдХ рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ рдЙрддреНрдкрдиреНрди рдХрд░реВрдВрдЧрд╛, рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рд▓реБрдХ, рд╕реЗрдВрдХрдирд╛ рдХреБрдЫ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗрдВрдЧреЗ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рд▓рд┐рдВрдХ рдХрд░реЗрдВрдЧреЗ, рдЪреЗрдХ рд╕реЗрдЯ рдХрд░реЗрдВ; рдбреЗрдЯрд╛ рдореЗрдВ рдореЙрдбрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ред рдЕрд╣рд╕рд╛рдиреБрд▓ рдмрд╛рд░реА, рдЕрдиреБрдкрдо рд╕рд┐рдпрд╛рдо "рдХреЗрдХрдкреАрдПрдЪрдкреА рдПрдкреНрд▓реАрдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ" рджреНрд╡рд╛рд░рд╛ "рдЧреЛрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рддреЗрдЬрд╝" рдХреЗ рдЕрдзреНрдпрд╛рдп 8 рдореЗрдВ рдХреЗрдХ рд╕реЗрдВрдХрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо jQuery рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдХреЛ рдРрдк \ View \ Layouts \ default.ctp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
echo $this->Html->script('jquery-1.8.3.min');
рд▓рд╛рдЗрдмреНрд░реЗрд░реА 'jquery-1.8.3.min.js' рдХреЛ рдРрдк \ webroot \ js \ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛
рд╣рдо CakePHP рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╣рд╛рдпрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдРрдк \ рдирд┐рдпрдВрддреНрд░рдХ \ AppController.php рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
public $helpers = array('Js' => array('Jquery');
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЗрд▓реНрдкрд▓рд╛рдЗрди 'рдПрдЪрдЯреАрдПрдордПрд▓', 'рдлреЙрд░реНрдо', 'рд╕реЗрд╢рди', 'рдкреЗрдЬрд┐рдиреЗрдЯрд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрдм рддрдХ рдЬреБрдбрд╝реЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рд╕рд╣рд╛рдпрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣реЗрд▓реНрдкрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
public $helpers = array('Html','Form','Session','Js' => array('Jquery'),'Paginator');
AJAX рдЗрдВрдЬрдирдЕрдм рдореБрдЦреНрдп рдХреЛрдб рдЬреЛ AJAX рдЗрдВрдЬрди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
<div id="comments"> <!-- , AJAX--> <?php foreach($comments as $comment): ?> <div class="comment"> <!тАФ --> <p><b><?php echo $comment['Comment']['title'];?></b></p> <p><?php echo $comment['Comment']['body'];?></p> </div> <?php endforeach;?> <!-- --> <?php echo $this->Form->create('Comment',array('controller' =>'comments', action'=>'add','onSubmit'=>'return false;')); echo $this->Form->input('Comment.title'); echo $this->Form->input('Comment.body'); echo $this->Form->input('Comment.post_id',array('type'=>'hidden','value'=>$comment['Comment']['post_id'])); echo $this->Js->submit('Add Comment',array('url'=>'/comments/add_ajax','update'=>'#comments','evalScripts'=>'true')); echo $this->Js->writeBuffer(); // echo $this->Form->end(); ?> </div>
рдЗрд╕ рдХреЛрдб рдХреЛ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдРрдк \ _ \ _ рдкреЛрд╕реНрдЯ \ view.ctp рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирдИ рдлрд╝рд╛рдЗрд▓ рдРрдк \ View \ Comments \ add_success.ctp рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рд╣реИред рдкреВрд░реЗ AJAX рдЗрдВрдЬрди рдХреЛ 3 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдорд┐рд▓рддрд╛ рд╣реИ:
'onSubmit'=>'return false;'
$ рдпрд╣-> Js-> рд╕рдмрдорд┐рдЯ () рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЖрдк JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛
рдпрд╣рд╛рдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП GET рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
'url'=>'/comments/add_ajax'
рдпрджрд┐ рд╣рдо рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ CakePHP рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рднреА рдХрд╛рдо рдХрд░ рд▓рд┐рдП рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдЗрд╕рдиреЗ jQuery рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ $ .ajax рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдиреЗрдХреНрдЯ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ:
<div class="submit"> <input id="submit-1030630577" type="submit" value="Add Comment"> </div> <script type="text/javascript">
JQuery рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдмрджрд▓реЗрдВрдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ:
рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
<div class="submit"> <input id="submit-1936204617" type="submit" value="Add Comment"> </div> <script type="text/javascript">

рдпрджрд┐ рдЖрдк рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЗрдВрдЬрди рдкрд░ рдЪрд▓реЗрдЧрд╛ред
AJAX рдмрдЯрди рд╣реИрдВрдбрд▓рд░рдмрдЯрди рдХреЗ рд▓рд┐рдП AJAX рд╣реИрдВрдбрд▓рд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдРрдк \ рдирд┐рдпрдВрддреНрд░рдХ \ CommentsController.php рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ
public function add_ajax() { if ($this->request->is('post')) { $this->Comment->create(); if ($this->Comment->save($this->request->data)) { $comments=$this->Comment->find('all',array('conditions'=>array('post_id'=>$this->request->data['Comment']['post_id']),'recursive'=>-1)); $this->set(compact('comments')); $this->render('add_success','ajax'); } else { $this->render('add_failure','ajax'); } } }
рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдЙрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА:рдЬреЙрди рд░реАрд╕рд┐рдЧ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрдХрдиреАрдХ"
рдмреЗрдирдХреЗрди рдИред, рд╕рдордХреЛрд╡ рдЬреАред "AJAX: рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ"
рдкреНрд░реЛрдЦреЛрд░реЗрдиреЛрдХ рдПрдиред "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ jQuery рдХреА рдирдИ рд╢реИрд▓реА"
Prokhorenok H. "HTML, JavaScript, PHP рдФрд░ MySQLред рд╕рдЬреНрдЬрди рд╡реЗрдмрдорд╛рд╕реНрдЯрд░ рд╕реЗрдЯ ┬╗
рд▓реИрдВрдЧрд╕реНрдЯреЙрд░реНрдл рдЬреЗрд╕рди "рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП PHP рдФрд░ jQuery"
рдорд┐рд╢реЗрд▓ рдИред рдбреЗрд╡рд┐рд╕, рдЬреЙрди рдПред рдлрд┐рд▓рд┐рдкреНрд╕ "рд▓рд░реНрдирд┐рдВрдЧ рдкреАрдПрдЪрдкреА рдФрд░ рдорд╛рдИрдПрд╕рдХреНрдпреВрдПрд▓"
рдбреЗрд╡рд┐рдб рдлреНрд▓реИрдирдЧрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб, 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг ┬╗
Mariano Iglesias CakePHP 1.3 рдПрдкреНрд▓реАрдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреБрдХрдмреБрдХ
рдбреЗрд╡рд┐рдб рдЧреЛрд▓реНрдбрд┐рдВрдЧ "рдиреМрд╕рд┐рдЦрд┐рдП рд╕реЗ рдкреЗрд╢реЗрд╡рд░ рддрдХ CakePHP рдХреА рд╢реБрд░реБрдЖрдд"
рдЕрдиреБрдкрдо рд╕реНрдпрд╛рдо, рдЕрд╣рд╕рд╛рдиреБрд▓ рдмрд╛рд░реА рдХреЗрдХрдкреАрдПрдЪрдкреА рдПрдкреНрд▓реАрдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ
рдХрд╛рдИ рдЪрд╛рди рдФрд░ рдЬреЙрди рдХреЗрдордХреЛрд░ рд░рд┐рдЪрд░реНрдб рдХреЗред рдорд┐рд▓рд░ рдХреЗ рд╕рд╛рде "рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдХреЗрдХрдкреАрдПрдЪрдкреА рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕"