- 2009年2月18日 12:02 AM
- 未分類
今回の記事は、CakePHPで jQuery Star Rating Plugin を使いたい人にしか役に立たない情報です。ニッチです。
いまCakePHPでWebアプリケーションを作ってて(趣味です)、スターレイティングを導入しようと思い、いくらか調べて、「jQuery Star Rating Plugin」が良さそうという結論に達した。
で、さっそく実装して試してみてたら、inputのnameがサンプルのままの「star」だと問題なく動作するんだけど、CakePHPのdata[モデル名][カラム名]の形式のnameにすると、表示もPOSTもうまくいかない。
調べてみると、jquery.rating.js は、inputのnameをもとにクラスやなんかを作るんだけど、そのさいに[ ]をエスケープしてる。
//99行目
var n = (this.name || 'unnamed-rating').replace(/\[|\]/, "_");
まずこのエスケープがまずくて、最初の一個めしか置換してくれないので、直す。
//gオプションを追加
var n = (this.name || 'unnamed-rating').replace(/\[|\]/g, "_");
で、値をPOSTするためにhiddenのinputを作ってる。
//111行目
$.rating.groups[n].valueElem = $('<input type="hidden" name="' + n + '" value=""' + (settings.readOnly ? ' disabled="disabled"' : '') + '/>');
ここはエスケープしちゃうとCakePHPで$this->dataでアクセスできないので、エスケープする前の名前にする。
//さっきのnの宣言部からエスケープ前の名前をもってくる
$.rating.groups[n].valueElem = $('<input type="hidden" name="' + (this.name || 'unnamed-rating') + '" value=""' + (settings.readOnly ? ' disabled="disabled"' : '') + '/>');
これでテストしたら、表示・挙動・POSTデータいづれも問題なさそうだった。コードを熟読してないので問題あるかもだけど。
・・・とまあ、ここまで書いといて気づいたんだけど、jQuery Star Rating Plugin ってGPL(と MIT License)なんですね。フリーだと思い込んでたよ。Webアプリケーションのソース公開はセキュリティ上問題ありそうだしなあ。同じようなの作るのめんどくさいなあ・・・。Creative Commons や MIT License なんかに比べるとGPLやLGPLって制限厳しいくせに線引きがあいまいすぎて、どうも好きになれない。
- 新しい: iPod/iPhone用手袋を作ってみました。
- 古い: ノイズゲートはほどほどに。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://penguinlab.jp/blog/post/195/trackback
- トラックバックの送信元リスト
- CakePHPで jQuery Star Rating Plugin を使う。 - 情報と音楽 より
