_onichannn

【CakePHP2.4】指定したフォルダの内容を取得する。

めも。

App::uses('Folder', 'Utility');
$folder = new Folder('/path/to/dir');
$contents = $folder->read();

返却される配列の[0]番目にディレクトリが格納され、[1]番目にファイルリストが格納される。

 

【CakePHP2.4】ファイルをダウンロードさせる。

めも。

コントローラーにて。

$this->response->file('/path/to/file');
$this->response->send();

 

【CakePHP】Model::create()のメモ。

Model::create()を行った際、プライマリーキーを除いた全てのカラムに設定されている初期値がセットされる。
そのためレコード更新の時、初期値が設定されているカラムの値をセットせずにModel::create()、Model::save()を行うと、意図した動作にならない場合があるので注意。

具体例として、statusなどのカラムを初期値1で設定しており、どこかのタイミングで2に書き換わっていたとする。そしてそのレコードを編集する際にステータスも「2」であると明示的にセットしない限り、修正完了した時点でステータスは1に戻ってしまう。

ということである。

IDさえセットしてしまえば、他の渡されなかった値はDBのレコードをそのまま維持してくれると勘違いしていたが違った模様。

ちなみにコアコードは下記のようになっている。

public function create($data = array(), $filterKey = false) {
	$defaults = array();
	$this->id = false;
	$this->data = array();
	$this->validationErrors = array();

	if ($data !== null && $data !== false) {
		$schema = (array)$this->schema();
		foreach ($schema as $field => $properties) {
			if ($this->primaryKey !== $field && isset($properties['default']) && $properties['default'] !== '') {
				$defaults[$field] = $properties['default'];
			}
		}

		$this->set($defaults);
		$this->set($data);
	}

	if ($filterKey) {
		$this->set($this->primaryKey, false);
	}

	return $this->data;
}

10行目でおもいっきり初期値セットしてるがな。

 

【jQuery】Ajax実行時の発火グローバルイベントまとめ。

自分用。

メソッド名 実行タイミング
ajaxStart(func()) Ajax通信が開始されたときに実行。複数の通信が発生していても1度のみ実行される
ajaxSend(func(event, xhr, options)) リクエスト送信前に実行される
ajaxSuccess(func(event, xhr, options)) 通信に成功した際に実行
ajaxError(func(event, xhr, options, error)) 通信に失敗した際に実行
ajaxComplete(func(event, xhr, options)) 通信の成功、失敗に関わらずプロセス完了時に実行される
ajaxStop(func()) 全てのAjax通信が完了した際に実行される

これは適宜便利に使えそうな予感。

 

【jQuery】アトリビュートセレクタまとめ。

自分用。

セレクタ 詳細
[attr] 「attr」属性を持つ要素
[attr=’val’] 「attr」属性の値が「val」である要素
[attr!=’val’] 「attr」属性の値が「val」でない要素
[attr^=’val’] 「attr」属性の値が「val」で始まる要素
[attr$=’val’] 「attr」属性の値が「val」で終わる要素
[attr*=’val’] 「attr」属性の値に「val」を含む要素
[attr~=’val’] 「attr」属性の値を空白で区切り、そのうちいずれかが「val」である要素
[attr|=’val’] 「attr」属性の値が「val」であるか、「val-」で始まる要素

こうみると属性セレクタだけでもめちゃくちゃ多い。最後のほうに関しては有効に使える場面がなかなか無いかも。

 

【Javascript】Javascriptによるクロスオリジン通信方法まとめ。

自分用まとめ。

いわゆる、クロスドメイン間通信。

実現方法は下記の4つ。

・JSONP
・iframeハック
・window.postMessage()
・XMLHttpRequest level 2

JSONPはクロスドメイン通信の基本という印象。iframeハックはその巧妙さに感動を覚えた。後者の二つに関してはそういうアプローチもあるのだな程度の認識でもよさそうかな?

実際の実装例は色々と実験後まとめる予定。

えくすぺりめんとなう!!

 

【jQuery】トリプルクリックのトリガーを実装する。

めも。

まずは下記Gitリポジトリからソースをダウンロード。

https://github.com/richadams/jquery-tripleclick

次にスクリプトファイルの読み込み。

<script type="text/javascript" src="/tripleclick.js"></script>

そして下記のようにイベントをバインドしてやればOK。

■HTML

<span class="target">Click!</span>

■Javascript

<script>
$('.target').on('tripleclick', function() {
    alert('ok');
});
</script>

.bind()メソッドを用いた実装も可能。また3回クリックするまでのタイムアウト時間も設定可能なため柔軟な対応が可能。

更なる詳細は同梱されているREADME.mdを参照されたし。

 

【CSS】FireFoxのみで有効なCSSハック。

めも。

まさかこんな特殊なことをすることになるとはおもわなんだけども、必要だったので調べた。

@-moz-document url-prefix() {
	#selector {
		property: value;
	}
}

という形で書けば良い。