cakephpで jQuery を使用する方法が知りたいです。


http://jquery.com/からダウンロードしたjquery.jsファイルをapp/webroot/jsの直下にそのまま入れました。
コントローラー内で
public $helpers = array('Javascript');
を書き、
viewのadd.ctpに
<?php echo $javascript->link('jquery'); ?>
を書きました。
しかし、ブラウザで表示しても
「Error: Create the class JavascriptHelper below in file: app/View/Helper/JavascriptHelper.php」エラーが表示されます。
これが表示されたということは、app/View/Helper直下にもjquery.jsを入れるのでしょうか?
どなたか、教えてください。
ちなみにこのサイト(http://p.tl/b7YL)を参考に設置しました。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/02/28 13:19:24
  • 終了:2012/03/06 13:20:02

ベストアンサー

id:119342443@twitter No.3

__QWERT__回答回数3ベストアンサー獲得回数22012/02/28 15:59:53

もちろん上記のコードのような書き方をしても構いません。
しかし、CakePHPのwebroot内に設置されたファイルを読み込むには、HtmlHelper::script()を使ったほうがいいでしょう。

<script type="text/javascript" src="/js/jquery.js" />
例えば先のjquery.jsを読み込む場合に上記のような素のコードを書いておくと、ディレクトリ構造を変更したときにsrc内を書きなおす必要があります。
しかしHtmlHelper::script()でwebroot/jsからの相対パスを指定しておけば、ディレクトリ構造があってもコードを変更する必要はありません。

例えば僕は、webroot/js/コントローラ名/アクション名.js というファイルを作り、
それぞれのビューでecho $this->Html->script('コントローラ名/アクション名');で読み込んでいます。

Jsヘルパーには、Javascriptのファイルを読み込む機能はありません。
Jsヘルパーの使い方はこちらを見てください
http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html
例えば、こんな使い方をします。

<?php
echo $this->Js->link('更新',array('controller'=>'hoge','action'=>'fuga'),array('update'=>'#update'));
echo $this->Js->writeBuffer();
?>

<div id="update"></div>

実行結果は実際にやってみてください。
僕はJsHelper::link()とJsHelper::writeBuffer()しか使いこなせていないので、JsHelperに関するこれ以上の説明はちょっと難しいです。

他1件のコメントを見る
id:119342443@twitter

②と③をセットで行なう、もしくは①を書けばOKだと思います。
ご存知だとは思いますが、①はgoogleからファイルを読み込むので、
オフライン作業時にjqueryが無効になることだけ留意してください。

2012/02/28 18:36:38
id:sryou1985

教えていただきありがとうございます。
①でjquery自体を使えるようにしてから、
使いたいjQueryのコードだけを②に書き、③で反映させたと思います。

2012/02/28 20:57:51

その他の回答(2件)

id:Cherenkov No.1

Cherenkov回答回数1503ベストアンサー獲得回数4932012/02/28 13:28:53

CakePHPのバージョンはなんでしょうか?
2.0からJsヘルパーに変わったようです。
JsHelper — CakePHP Cookbook v2.x documentation

id:119342443@twitter No.2

__QWERT__回答回数3ベストアンサー獲得回数22012/02/28 13:33:39

//add.ctp
echo $this->Html->script('jquery');

javascriptのファイルを扱うのは、Htmlヘルパーのscriptメソッドです。
それとフォルダ構成からおそらく2.xバージョンを使ってるかと思いますが、
ヘルパーの書き方が、例えばHtmlヘルパーのlinkメソッドなら、$html->link()ではなく、$this->Html->link()になりました。前者では質問にあるエラーが出ると思います。

これはうろ覚えになりますが、AjaxヘルパーとJavascriptヘルパーはなくなり、Jsヘルパーになったと思います。
Jsヘルパーでは、自動でAjax用のスクリプトを用意してくれるHtmlを書いてくれたりします。

1.xと2.xでは書き方がだいぶ変わるので、BookやAPIを参照するといいです。
Book http://book.cakephp.org/2.0/en/
API http://api20.cakephp.org/
Bookは日本語訳のページもありますが、まだ翻訳途中なので、見られないページもあります。

他2件のコメントを見る
id:sryou1985

コードの頭に「>||」
コードの末に「||<」
というふうにコードをその2つで挟んであげるできますよ。

2012/02/28 16:14:33
id:119342443@twitter

ありがとうございます、助かります。

2012/02/28 16:30:38
id:119342443@twitter No.3

__QWERT__回答回数3ベストアンサー獲得回数22012/02/28 15:59:53ここでベストアンサー

もちろん上記のコードのような書き方をしても構いません。
しかし、CakePHPのwebroot内に設置されたファイルを読み込むには、HtmlHelper::script()を使ったほうがいいでしょう。

<script type="text/javascript" src="/js/jquery.js" />
例えば先のjquery.jsを読み込む場合に上記のような素のコードを書いておくと、ディレクトリ構造を変更したときにsrc内を書きなおす必要があります。
しかしHtmlHelper::script()でwebroot/jsからの相対パスを指定しておけば、ディレクトリ構造があってもコードを変更する必要はありません。

例えば僕は、webroot/js/コントローラ名/アクション名.js というファイルを作り、
それぞれのビューでecho $this->Html->script('コントローラ名/アクション名');で読み込んでいます。

Jsヘルパーには、Javascriptのファイルを読み込む機能はありません。
Jsヘルパーの使い方はこちらを見てください
http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html
例えば、こんな使い方をします。

<?php
echo $this->Js->link('更新',array('controller'=>'hoge','action'=>'fuga'),array('update'=>'#update'));
echo $this->Js->writeBuffer();
?>

<div id="update"></div>

実行結果は実際にやってみてください。
僕はJsHelper::link()とJsHelper::writeBuffer()しか使いこなせていないので、JsHelperに関するこれ以上の説明はちょっと難しいです。

他1件のコメントを見る
id:119342443@twitter

②と③をセットで行なう、もしくは①を書けばOKだと思います。
ご存知だとは思いますが、①はgoogleからファイルを読み込むので、
オフライン作業時にjqueryが無効になることだけ留意してください。

2012/02/28 18:36:38
id:sryou1985

教えていただきありがとうございます。
①でjquery自体を使えるようにしてから、
使いたいjQueryのコードだけを②に書き、③で反映させたと思います。

2012/02/28 20:57:51
  • id:sryou1985
    早速のご回答ありがとうございます。
    cakephpのバージョンは「2.0.5」となります。
    よろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません