JQuery UI を使った JqueryUiHelper を作ってみた。
事前に layout/default.ctp などで、jquery.js、jquery-ui.js、jquery-ui.cssを読み込んでおく。
csshttp://ui.jquery.com/themeroller/ で作った物をリネームして使っている。


とりあえず、今の仕事でよく使う2機能のみだが晒してみる。

sort() は tbody id="sort"などの中身をソートし、ソート結果をAjaxでDBに反映させる。
flash_dialog() は $session->flash() の代わりに使う。dialogに$session->flash()の結果を表示し、その後消える。dialog表示することでレイアウトが崩れない。

<?php
class JqueryUiHelper extends AppHelper
{
    public $helpers = array('Javascript', 'Session');

    //Ajaxのインジケータ要素ID(imgタグ)
    public $indicator = '#ajax_load';

    //dialogの表示期間(ミリ秒)
    public $dialog_timout = 3000;

    /**
     * jQuery.sotable()
     *
     * @param  string  $id     ソート対象 DOM ID
     * @param  string  $url    ソート処理URL
     * @return string          ソート用スクリプト
     */
    public function sort($id = '#sort', $url = 'sort')
    {
        $script = <<<EOD
jQuery(document).ready(function($){
    $("{$id}").sortable({
        stop:function(e, ui){
            $('{$this->indicator}').show();
            $.post('{$this->url($url)}', $("{$id}").sortable('serialize'), function(ms,st){
                $('{$this->indicator}').hide();
            });
        }
    });
});
EOD;
        return $this->Javascript->codeBlock($script);
    }


    /**
     * CakePHP のフラッシュメッセージを jQuery.dialog()で表示する
     *
     * @param   string  $title  ダイアログ・タイトル
     * @param   string  $key    フラッシュメッセージのキー
     * @return  string
     */
    public function flash_dialog($title = 'Message Box', $key = 'flash')
    {
        if ($this->Session->check('Message.' . $key)) {
            $this->Session->flash($key);
            $script = <<<EOD
jQuery(document).ready(function($){
    $("#flashMessage").attr('title', '{$title}').dialog();
    setTimeout(function () {
          $("#flashMessage").dialog("close");
     }, {$this->dialog_timout});
});
EOD;
            return $this->Javascript->codeBlock($script);
        }
    }

}