JsHelper
CakePHP 1.3のJsHelperを使ってみました。
1.3ではJavascriptHelperが非推奨となっています。
1.2までは、サポートしていたjavascriptのライブラリはprototypeのみでしたが、JsHelperで3つののライブラリが使えるようになっています。

JsHelperの設定
- javascriptライブラリを読み込む。
$this->Html->script();
- キャッシュされたスクリプトを出力
- ControllerにJsHelperを追加する。
ライブラリの読み込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <head>
<?php echo $this ->Html->charset(); ?>
<title>
<?php __( 'Sample' ); ?>
<?php echo $title_for_layout ; ?>
</title>
<?php
echo $this ->Html->meta( 'icon' );
echo $this ->Html->css( 'cake.generic' );
echo $this ->Html->script( 'jquery-1.4.2.min' );
echo $this ->Html->script( 'jquery-ui-1.8.2.min' );
echo $scripts_for_layout ;
?>
</head>
<body>
…
<?php echo $js ->writeBuffer();?>
</body>
|
デフォルトでスクリプトはキャッシュされます。
それを表示するために</body>タグが終わる前までに、
$js->writeBurrer();
を実行しなければいけません。
ヘルパーの追加
1 2 3 4 | class HogeController extends AppController{
public $name = 'Hoge' ;
public $helpers = array ( 'Js' => array ( 'Jquery' ));
}
|
JsHelperの使い方
php5では、メソッドをつなげて使用できるけれど、php4では別々に書かないといけないようです。
php4
1 2 | $js ->get( '#hoge' );
$js ->event( 'click' , $eventCode );
|
php5
1 | $js ->get( '#hoge' )->event( 'click' , $eventCode );
|
使用例
get
get($selector)
cssのセレクタを設定する。
effect
effect($name, $options = array())
- $name
‘show’, ‘hide’, ‘fadeIn’, ‘fadeOut’, ‘slideIn’, ‘slideOut’
- $options
speed : ‘fast’, ‘slow’
デフォルトではbufferに保存されない。
bufferに保存したい場合は、buffer()を使う。
drag
drag($options = array())
$options
- handle : ???
- snapGrid : 座標移動の間隔の設定 array(x, y)で縦横の間隔を設定
- container : ドラッグ可能な範囲
- start : ドラッグスタート時のイベント処理
- drag : ドラッグ中のイベント処理
- stop : ドラッグ終了時のイベント処理
event
event($type, $content, $options = array())
$options
- wrap : 無名関数でラップする?(デフォルト:true)
- stop : イベントをストップする?(デフォルト:true)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <h1>JsHelper</h1>
<div id= "dragMessage" >メッセージ</div>
<div id= "dragArea" style= "height:200px;width:600px;" >
<span id= "hoge" >ドラッグ要素</span>
<?php
$onStart = '$( "#hoge" )
.css( "color" , "blue" )
.text( "開始します" );
$( "#dragMessage" )
.text( "ドラッグ開始!" );
';
$onDrag = '$( "#hoge" )
.css( "color" , "red" )
.text( "ドラッグ中" );';
$onStop = '$( "#hoge" )
.css( "color" , "green" )
.text( "ドラッグ要素" );
$( "#dragMessage" )
.text( "ドラッグ終了!" );
';
$js ->get( '#hoge' );
$result = $js ->effect( 'fadeIn' , array ( 'speed' => 'slow' ));
$js ->buffer( $result );
$js ->drag( array (
'container' => '#dragArea' ,
'start' => $onStart ,
'drag' => $onDrag ,
'stop' => $onStop ,
'snapGrid' => array (10, 10),
'wrapCallbacks' => false
));
$js ->get( "#hoge" )->event( 'click' , $js ->alert( 'クリックしたな!!' ));
echo $js ->writeBuffer( array ( 'inline' => false));
?>
|