Hatena::ブログ(Diary)

cake bake diary

2009年06月17日

vendors/jsの中にもいろいろ置きたい

| 18:28 | vendors/jsの中にもいろいろ置きたいを含むブックマーク vendors/jsの中にもいろいろ置きたいのブックマークコメント

CakePHP1.2RC3でFCK Editorを使う

をみながらFCKeditorを入れてたら何故かFCKeditorのajaxリクエストがMissing Controller*1に。

原因はapp/webroot/js/じゃなくて、vendors/js/に入れてたから。*2

app/webroot/jsに置けるファイルタイプに制限は無いけどvendors/jsはそうじゃないらしい。

Dispatcherの以下の部分が関係してるみたい。

<?php
function cached($url) {
    if (strpos($url, 'css/') !== false || strpos($url, 'js/') !== false || strpos($url, 'img/') !== false) {
        /* 省略 */
        $assets = array('js' => 'text/javascript', 'css' => 'text/css', 'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'png' => 'image/png');
	    $ext = array_pop(explode('.', $url));
		foreach ($assets as $type => $contentType) {
		    if ($type === $ext) {
			if ($type === 'css' || $type === 'js') {
				$pos = strpos($url, $type . '/');
			} else {
				$pos = strpos($url, 'img/');
			}
			$isAsset = true;
			break;
		}
	}
        /* 省略 */
    }
}
?>

要はvendors/jsとvendors/imgとvendors/cssについては$assetsにあるファイルタイプのみ読み込み許可すると。

$assetsにhtmlとxmlを追加したら動いた

<?php
$assets = array('js' => 'text/javascript', 'css' => 'text/css', 'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'png' => 'image/png', 'html' => 'text/html', 'xml' => 'text/xml');
?>

ので、shin1x1さんの上書きテクでdispatcher.phpを上書き。

あとDebugKitが動かない><

FCKeditor使うとDebugKitでelements.toolbar is nullとかエラーが出て何も表示されない。

FCKeditorの方は普通に動く。

だからtoolbarみたいな競合しやすい名前付けるのはどうかと思うなぁ。。

*1:JsController could not be found.

*2:だってappに置きたくないんだもん…