Przygodę z ajaxem dopiero zaczynam i jak to zwykle bywa, początki są najtrudniejsze angrysmiley.gif . W związku że w cakephp został dołączony moduł pomocny przy ajaxie, dobrze by było go wykorzystać.
W necie znalazłem prosty a zarazem pomocny tutorial o ajaxie z cakephp:
http://www.reversefolds.com/articles/show/ajax
wszystko jest pięknie dopóki w grę nie wchodzą polskie znaki, cały przykład jest w kodowaniu utf-8, kodowanie layoutu ajaxa tez jest poprawne, bo po wywołaniu URL'a: /things/view/0 polskie znaki są wyświetlane prawidłowo.
Problem jest na podstronce (/things/index), gdzie krzaki wyświetlaja się po kliknięciu na ajaxowy link , który zmienia zawartość diva w tekst z polskimi fontami.
więc problem leży zapewne w ustwieniach wykorzystywanego przez cake skryptu ajaxowego (prototype), nie wiem tylko jak tą opcję ustawić, czy zapomocą cake czy bezposrednio w samym skrypcie prototype, a może problem leży gdzieś indziej?

kod kontrolera:
  1. <?php
  2. /**
  3.  * $Id: approot/controllers/things_controller.php 
  4.  */
  5.  
  6. class ThingsController extends AppController
  7. {
  8. var $name = 'Things';
  9. var $helpers = array('Html', 'Javascript', 'Ajax');
  10.  
  11. // we're not going to use a model for this example, but
  12. // it would be easy to use a database thanks to cake
  13. var $uses = null;
  14.  
  15. /**
  16.  * initial page load 
  17.  */
  18. function index() {
  19.  
  20. // preload dynamic data
  21. $this->set('data1', 'content will update here');
  22. $this->set('data2', 'here too');
  23.  
  24. $this->render('neat');
  25.  
  26. }//index()
  27.  
  28. /**
  29.  * display content action
  30.  *
  31.  * @param int id of content to display
  32.  */
  33. function view($id) {
  34.  
  35. // content could come from a database, xml, etc.
  36. $content = array(
  37. array('polskie fonty: ążśźęćłóń',
  38. 'become a cake baker',),
  39. array('knowledge is not enough',
  40. 'we must also apply - bruce lee')
  41.  );
  42.  
  43. $this->set('data1', $content[$id][0]);
  44. $this->set('data2', $content[$id][1]);
  45.  
  46. // use ajax layout
  47. $this->render('neat', 'ajax');
  48.  
  49. }//view()
  50.  
  51. }//ThingsController
  52. ?>


kod layoutu:
  1. <!-- // approot/views/layouts/default.thtml -->
  2. <html>
  3. <head>
  4. <?php 
  5. print $html->charsetTag('UTF-8');
  6. print $javascript->link('prototype');
  7. print $javascript->link('scriptaculous.js?load=effects');
  8. ?>
  9. </head><body>
  10. <?php echo $content_for_layout; ?>
  11. </body></html>


kod widoku:
  1. <!-- // approot/views/things/neat.thtml -->
  2. <h1>Really neat stuff here</h1>
  3. <?php 
  4. // update both divs 
  5. echo $ajax->link('update divs', '/things/view/0', 
  6.  array('update' => array('dynamic1', 'dynamic2'))
  7. );
  8. echo ' | ';
  9. // use an effect
  10. echo $ajax->link('blinders', '/things/view/1', 
  11.  array('update' => array('dynamic1', 'dynamic2'),
  12.  'loading' => 'Effect.BlindDown('dynamic1')')
  13. );
  14. ?>
  15.  
  16. <hr/>
  17. <?php echo $ajax->div('dynamic1'); ?>
  18. <h2><span><?php echo $data1; ?></span></h2>
  19. <?php echo $ajax->divEnd('dynamic1'); ?>
  20.  
  21. <?php echo $ajax->div('dynamic2'); ?>
  22. <h3><span><?php echo $data2; ?></span></h3>
  23. <?php echo $ajax->divEnd('dynamic2'); ?>