Home > フレームワーク Archive

フレームワーク Archive

jQueryでFormのバリデーション

jQueryの便利そうなプラグイン。ValidationAide
フォームの入力値の妥当性を検査してくれます。

使い方:
1.フォームをかく


<form id="Test">
	<div id="ClientValidationSummary"></div>
	<input type="text" id="name" title="名前" class="textbox validator-required" /><br />
	<input type="text" id="mail" title="メール" class="textbox validator-required validator-email" />
	<input type="submit" value="Submit" />
</form>

入力値にエラーがあった場合、ClientValidationSummaryのところに要約(サマリ)が表示されます。
titleで指定された文字列が要約表示時などに項目名として使われます。
バリデートしたい部品のclassに上記のような指定をします。
上記の場合、「名前」のところは「テキストボックス」「入力必須」で、
「メール」のところは「テキストボックス」「入力必須」「メールアドレス」でバリデートしてます。
validtor-emailとしておけば、aaa@aaa.comのような有効なメールアドレスの形式かどうかを検査してくれます。
表示されるメッセージをデフォルトから変更したい場合は、titleに” – “区切りで書きます。マイナスの前後にスペースが要るので注意。
例えば「title=”名前 – 名前を入力してください”」とすると、項目が「名前」、メッセージが「名前を入力してください」になります。
マウスをオーバーラップさせたときにも表示されてしまうのが難点?

2.初期化


$(function() {
	$("#Test").validationAideEnable();
});

formのIDを指定して、validationAideEnable()を実行します。
各部品の横にメッセージを表示したい場合などは、パラメータをJSON形式で渡します。


$("#Test").validationAideEnable(null, {showInlineMessages:true, inlineShowSpeed:"fast"});

第一引数は独自ルールを定義する場合に使います。
その辺の詳しいところはダウンロードしたファイルのdemoのソースを見てください。

3.サンプル

以上

スケジュール調整の「スケジュ君」

複数人のスケジュールを合わせるためのツールはいくつかありますが、後発ながら下名も作成いたしました。
スケジュ君です。どうぞよろしく。
飲み会や会議の開催日時を設定するのに便利じゃないかと思います。少なくとも私は便利に使ってます。
ユーザが簡単に入力できるようにしたつもりで、結果が簡単に見られるようにしたつもりです。
管理者はちょっと面倒ですが・・・。

CakePHP勉強用に作成したもので、デザインも機能もまだまだです。ご意見いただけるとうれしいです。
よろしくお願いいたします。
ちなみに下記のような構成で作成しています。
・言語:PHP4
・フレームワーク:CakePHP
・Javascript:jQuery
・データベース:SQLITE
セキュリティ:適当

というわけで、セキュリティ適当なんで、気をつけて使ってください。
先日紹介したjTipも入ってます。

以上

jQuery トリビアルメモ 1

ドラクエIV、V、VIもDSで出るようですな。

jQueryの簡単な話。

1.並列と直列と速さと


$("#hoge").html("aaa");
$("#hoge").click(function(){alert("hogehoge");});

より


$("#hoge").html("aaa").click(function(){alert("hogehoge");});

の方が速い。(FireFoxの場合)
そりゃそうだ。

2.IDとクラスと速さと
“bar”っていうCSSクラスを持つ要素が複数あって、fooってIDはひとつしかない場合。(もちろんfoo2,foo3,などのIDはイパイある)


$("#foo", ".bar").html("aaa");

より


$("#foo").html("aaa");

の方が速い。(FireFoxの場合)
クラスで絞り込んだほうが速いかな?とちょっと思ったんだけど。
他の組み合わせは知らない。

3.blockUI
簡単なので書いとく。
ブラウザ全体をブロックしたいとき便利なプラグイン。
ブロック開始時に$.blockUI()を呼んで、解放時に$.unblockUI()を呼ぶだけ。
“Please Wait..”ってなって、操作できなくなる。ajaxなどでの読み込み待ちに便利。
メッセージは$.blockUI(“なんかめっせーじ”)で指定できる。

以上

CakePHPではまったこと 12(findBy~)

ACアダプターとかってコンセントに挿すところが大きくて、複数並べて挿そうと思ってもスペース的に厳しいときがあります。そこを無理して挿すのは・・・危険。
本日、挿すときちょっと無理があったもののやや斜めになりながら挿せたので満足していたら、抜くときに抜けませんでした。微妙に鍵穴にはまっているらしく、ゆがんだためか全く抜けず、20分ほどACアダプターと格闘するはめに。力技でなんとか抜きました。もう二度と無理はしない。

CakePHPでモデルからデータを取得する際に、私はfindByを結構使ってしまっています。例えば、foo_idフィールドが”1″であるようなbarを取得する場合。


class BarsController extends AppController {
   var $name="Bars";

   function hoge() {
      $bars = $this->Bar->findAllByFoo_Id("1");
      $this->set('bars', $bars);
   }
}

で、このfindAllBy~~()って、他のパラメータはどうなるんだ??と思ってはいたのですが、なんかよくわからないので、APIリファレンスにもそんなこと書いてないような気がする(書いてあるのかもしれないけどわからない)ので、放置してました。
findAll()自体なら


Model::findAll($conditions = null,
        $fields = null,
        $order = null,
        $limit = null,
        $page = 1,
        $recursive = null	 
)

って書いてあります。
で、findAllBy~~()ですが、適当にパラメータを渡してみたところ、上記のfindAll()と同じようです。
例えば、idで降順に取得する場合は


class BarsController extends AppController {
   var $name="Bars";

   function hoge() {
      $bars = $this->Bar->findAllByFoo_Id("1", null, "id DESC");
      $this->set('bars', $bars);
   }
}

でよいようです。
ちなみに、orderは日付でもちゃんとやってくれるみたいです。


      $bars = $this->Bar->findAllByFoo_Id("1", null, "modified DESC");

以上

jQueryのjTip (ツールチップ)

DSでオープンソース。そのうち手を出してみたいですな。

ブラウザでツールチップを出したいと思い、jQueryのjTipっていうプラグインを使ってみたのでメモ。ここの「DownLoad This Example」からダウンロードしたけど、それでいいんだろうか?

1.初期化
jtip.jsを読み込めば初期化されるが、自分の初期化プロセスに組み込むときは


JT_init();

を呼べばいいと思う。たぶん。

2.使い方
ツールチップを出したい部分をaタグで囲む。表示したい内容を返すページのURLをhrefに書く。?以降は多分ウインドウ幅。
idはちゃんと指定する。このidで要素を取得して、その近くにツールチップを出すっぽい。
同封のglobal.cssを使う場合はclass=”jTip”。この場合、同封のimagesを使うとロード中の画像とか出てカッコイイ。Ajaxです。
nameで指定したものがツールチップのタイトルになる。


<a href="hogehoge.htm?300" id="foo" class="jTip" name="bar">ツールチップ</a>

3.CakePHP
CakePHPで使ってみた。まあ、別にどうということはないけど。ちょっとはまったことは、hrefのURL。CakePHPとかの場合、URLが「コントローラ名+メソッド名+引数」などになって、URL相対指定するとわけがわからないURLになってしまう。
ということで絶対指定すればいいわけだが、あるいは「$this->webroot」をビューでechoすれば、ルートからのURLが得られます。


webroot = "<?php echo $this->webroot; ?>";
$(function(){
    $("#tooltip").html('<a href="'+webroot+'hogehoge/hoge?300" id="foo" class="jTip" name="bar">ツールチップ</a>');
});

<div id="tooltip"></div>

以上

CakePHPではまったこと 11(sqliteをデータベースとして使う2)

FireFox3はページ全体の拡大ができるそうです。OperaやIE7のように。え、IE7ってそんなことできたの??といことで見てみたら、アドレスバーとかの辺りで、ページ→拡大→xxx%、とやればできた。へぇ。

前の記事の補足。
CakePHPでは、データベースのテーブルのフィールドに「id」というのを作って、autoincrementにしておく必要があります。
で、sqliteでautoincrementなフィールドをどうやって作るかですが、


CREATE TABLE schedules (id INTEGER PRIMARY KEY,
                                   name CHAR(128) NOT NULL UNIQUE,
                                   data CHAR(64) NOT NULL);

ってな感じで、「INTEGER PRIMARY KEY」と指定しておけばautoincrementになります。

以上

CakePHPではまったこと 10(home)

Wiiのガンダム、やられた。オートセーブじゃなかった。
ストーリー進むたびにセーブしてるんでてっきりオートセーブだと思ってたんですが、システムデータの更新だけでストーリーはセーブされてなかった。。まだ昨日のところまで追いつけず。(昨日、実は4話どころじゃなかったようだ。)

CakePHPのindex.htmlというか、homeというか、デフォルトのページは、app/views/pages/home.thtmlです。
というわけで、home.thtmlでヘルパー(html以外の)とか使いたい場合は、cake/libs/controller/pages_controller.phpをapp/controller/pages_controller.phpにコピーしてvar $helpers;を定義すればよいです。

それだけ。

これだけだとあれなんで、先日のエントリの補足。
コメントのところでJavaの場合を挙げましたが、オブジェクトを配列にするというのをPHPでやってみるとどうなるか。


$objs = array();

$objs[] = new ObjectString("aaa");
$objs[] = new ObjectString("bbb");

foreach ($objs as $one) {   // &はなしでいっとく。
	$one->data = "ccc";
}


foreach ($objs as $one) {   
	echo $one->data ."\n";
}


class ObjectString {
    var $data;

    function ObjectString($a) {
       $this->data = $a;
    }
}

これは、PHP4とPHP5で結果が異なります。
PHP4:


aaa
bbb

PHP5:


ccc
ccc

PHP5のオブジェクトの代入、引数は参照コピーだというのは本当だったんですね。

以上

CakePHPではまったこと 9(cookie.php)

今日はいいネタがない。強いて言えば、応援団2が難しすぎたことくらい。

CakePHPでCookieってどうやってつかうのかー?と思いつつ、APIリファレンスみてたら、なんと1.1.x.xにはない模様。1.2.x.x系列にはCookieComponentがありました。
現在使っているのは1.1.x.x系列ですが、1.2.x.x系列(アルファ版)をダウンロードして、CookieComponent.phpをコピーしたら普通に使えました。
コントローラー内でwrite()して、


$this->Cookie->write('key', 'val', true, 'Expires=Tuesday, 24-Jul-2007 21:30:00 GMT'); // 'true'は暗号化、最後はexpire(保持期間)。

コントローラ内でread()する、と。


$this->set('key', $this->Cookie->read('key'));

コントローラのアクション内に書いておけば、ちゃんとうまいことやってくれるっぽい。ヘッダの前に送ってくれるっぽい。

以上

CakePHPではまったこと 8(var_export)

昨日、時をかける少女みました。ネタバレ含むため、末尾に感想。

昨日のビューでコンポーネントを使うで$thisをダンプしようとしたときに少しはまったのでメモ。
hogehoge.thtmlで


$export = var_export($this, true);

ってやったのに戻り値は空でブラウザに全部出力されてしまいました。がふっ。
なぜだぁあ!と思いながら


$export = print_r($this, true);

を使ったら目的は達成できました。
なんでこんなことになったのか、もしかしてob_start()でもやってんのか?と思ってgrepしたら、view.phpでやってました。他にも数箇所でやってるようですね。これが原因かな?
print_r()がなぜ影響を受けないのかは知りません。

以上

感想:
いったんタイムリープが0になった記憶が残ってるのはどう考えてもおかしい、と思ってちょっと検索したら、そんな議論は映画が公開されたときからあるらしいですな。うまく説明する案はいろいろあるようですが、自転車が来てないのに踏み切り見て泣いてる時点でどうしようもなくおかしい。

CakePHPではまったこと 7(ビューでコンポーネントを使う)

あーー・・・やっぱりか。そりゃそうだわなぁ。次の三国無双はPS3か。

ビューの中でコンポーネント使いたいとか、いろいろあると思うんですよ。
例えば私の場合、ログイン判定を簡単なコンポーネント作ってやってるんですが、これをビューでも使いたい。ログインしてるときはログアウト用のリンクを表示させるとか。
で、ふとdefault.thtmlをみると$this->webrootって書いてあるじゃないですか。なんだ$thisって?と思い、調べてみたら、なんかいろいろ入ってた。
というわけで、例えばHogeControllerでFooComponentを読み込んでる場合で、hogehoge.thtmlでFooを使いたい場合は


$this->controller->Foo->bar();

でいける。
とにかく全部入ってるらしく、コントローラ内でfind()とかしたらそのデータもある気がする。とりあえずデータがでかすぎて見る気にならん。
たいしたデータ量を扱ってるわけじゃない(はずだ)が、ビュー内での$thisをダンプしたら400KBになった。(もちろんスペースとか入ってるから余分なものもあるけど)
CakePHP重いんじゃないのか・・・?

以上

Home > フレームワーク Archive

Search
Feeds
Meta
 合計:018987
 今日:0126 昨日:0157

Return to page top