JSON

数年前にajaxでの戻り値を配列で返したかったとき、JSONなど知らず試行錯誤して、結局カンマ区切りで値を返してjavascriptで再度配列に格納してた。

今回はすっかりその事を忘れていて、またハマったので、素直にJSONを使うことにした。

サーバーにjsonを設置。
PEARのJSON.phpライブラリをこちらか入手。
http://mike.teczno.com/JSON.tar.gz

ライブラリを読み込む。

require_once "それぞれのパス/JSON.php";

配列をJSONデータに変更

$json = new Services_JSON;
$encode = $json->encode($arr);
echo $encode;

こちらを参考にさせていただきました。
http://takaiwa.net/archives/598

IEでjQueryのloadが動かん

CakePHPで別のページを作ってて、それがあまりメモる事なかったので、更新が久々になってしまった。

今日は久々にハマって現在原因解明中。
IEでjQueryのloadが動かん。
・・・CakePHPとは全く関係ないね。

今日もIEのために無駄な時間を浪費。
ちょっと新しい事や、頼まれてることも進めようと思ってたのになあ。

追記

解決した。

IEで動かなかった文
$(“#名前”).load(“/コントローラー/メソッド/”);

修正後
$(“#名前”).load(“/コントローラー/メソッド”);

メソッドの後にスラッシュ付いてたら、何故かIEだけ動かん。
というか、動いていたのだけどメソッドが正常に動いてなかった。
メソッド内でsessionが拾えてなかったようだ。
でもブラウザの違いが問題だったのだから、クライアント側ってことでしょ?
よくわからないなあ。

追記2

上記修正。
今度は間逆。
IEで動かなかった文
$(“#名前”).load(“/コントローラー/メソッド”);

修正後
$(“#名前”).load(“/コントローラー/メソッド/”);

何なんだ?キャッシュか?
マジ勘弁。

追記3

上記再修正。
再度間逆に。
もうわけわからん。
このブラウザがマトモになるのはいつの日やら・・・。

追記4

多分解決。
こちらを参考にさせていただきました。

Internet Explorer によるコンテンツ キャッシュを無効にする

やっぱりキャッシュが原因。

新しいサイト

CakePHPの勉強のため作成中のサイトが大分カタチになってきた。
あとは、CakePHPとは関係ない部分を仕上げるだけ。
ここで、復習を兼ね小規模なサイトをもう一つCakePHPで作成してみようと思う。

気になるのはCakePHP2.0の存在。
手を出したいのはヤマヤマなんだけど、今回は見送る。
理由は、情報量の違い。

今はCakePHPを勉強している、というより、CakePHPを使ってFrameworkの勉強をしている。
最初、Ruby on Railsに手を出したが、情報量があまり無いため躓くと解決するまでとても時間がかかった。
Rubyに不慣れということもあったし、サーバーサイドの知識不足ということもあった。

それからすると、CakePHPを選んだのは正解だったと思う。
躓いても検索すれば簡単に解決方法を見つけることができた。

CakePHP2.0にはすぐにも手を出したいのが本音だけど、ここはもう少し待とうと思う。

Authコンポーネント利用時のパスワード変更

CakePHPでAuthコンポーネントを利用すると、パスワードは自動的に不可逆に暗号化される。
これはセキュリティ上良いことだから、なるべくこのまま使いたい。

ただ、避けて通れないのが「パスワードを忘れたら」や、「パスワードを変更する」といった機能。

まず、「パスワードを変更する」を作ったのだけど、テストしたらパスワードが暗号化されずに更新されてしまった。
たしか、ユーザーを新規登録のときは自動的に暗号化されたのだけど。

調べたら解決方法が。

$this->Auth->password(暗号化するパスワード);

で、暗号化される。

Paginatorヘルパーのsort

paginationヘルパーでsortを実装したのだけど、一部問題が。

いくつかのフィールドはsortを行うたびにdescとascが自動的に切り替わるのだけど、切り替わらないフィールドがある。
初期設定がascなら、ascのままsortで固定。

仕様なのか、バグなのか?

検索したが解決方法がないので、descとascに予め絞って実装することにした。

うーん。

追記1

切り替わるようになった。
ある条件を満たすと切り替わるようになる。
その条件を探索中。

追記2

原因を発見。
コントローラー側の条件分岐でのpaginateのコーディングミス・・・・。
2時間損した。

hasManyで気づいたこと

AモデルとBモデルがあり、

A hasMany B

の場合、’dependent’ => true にしておくとAモデルを削除したとき、関連するBモデルも削除される。
これは分かっていた。

では以下の場合はどうだろうと、試してみた。

A、B、Cという3つのモデルがあり、

A hasMany B
B hasMany C
全て’dependent’ => true

この場合、Aモデルを削除したとき、関連するBモデル、さらにBモデルに関連するCモデルもちゃんと削除された。
・・・便利だ。

ACLが機能していない?

管理者専用の機能を付けようとしてページを作成し、アクセス権を調整しようとしたら、どうやらACLがキチンと機能していない。

少し前まではキチンと機能していたはずなのに、おかしい。

あちこちチェックするもいまだ糸口が見えず・・・。

追記

解決した。
というより、そもそも理解不足だった。
ACLプラグインを組み込んで、プラグインの設定画面でアクセス権を制御したら、それでOKだと思っていた。

どうやら、それでは不十分で、コントローラー側でもアクセス権をチェックして制御することが必要なようだ。

・・・多分。
違うなら、プラグインの組み込みミスかな・・・。

検索してもいい情報を見つけられない。
本屋に行って探してみようかな。

canvas

クリッカブルマップを使う必要が出たので、ためしにHTML5のcanvasを使ってみようと思った。

けど、少しやって諦めた。

理由として、描画したものにマウスイベントを付けたかったのだけど、意外と面倒くさい。
描画したものをアニメーションさせるわけでもないし、IE対応とかもメンドイので、今回は見送った。
jQueryで、描画したものにイベントを簡単に付けてくれるプラグインとかあれば便利だな。
今度もっときちんと調べてみよう。

Pagination その2

検索結果が引き継がれない問題は、どうやらSessionとの併用で何とかなりそうだ。

検索条件にモデルが2つからむ件も、仕様を見直して解決できた。

これで一応paginationは組み込めた。

残る大きな課題は、SSLだ。

マイページを実装してあるので、公にする場合はサーバー証明取らなきゃなんだよね。
どうしようかな。