Category Archives: Javascript

JSONのエスケープ

JSONのエスケープについてよく纏められていましたのでメモです。

http://blog.ohgaki.net/json-escape

json_encode関数とjson_decode関数も色々あるんですね。。

Zend Framework: Ajaxリクエストの検出

Zend Framework: Documentation

10.4.2.4. AJAX リクエストの検出

Zend_Controller_Request_Http には、 AJAX リクエストを検出するための基本的なメソッド isXmlHttpRequest() が用意されています。 このメソッドは、HTTP リクエストヘッダ X-Requested-With に ‘XMLHttpRequest’ という値が設定されているかどうかを調べ、 設定されている場合に true を返します。

ちょいちょいドキュメントは確認しているんですが、こんなのも追加されていたんですね。ふむふむ。

Zend FrameworkでFlexigrid習作

Flexigrid

Jqueryベースのテーブル修飾script、FlexigridをZend Frameworkで使ってみよう、という習作です。

マイコミの記事を参考にしながら作ってみました。

テーブルデータは
id,title,description,date
のありがちな感じで。

とりあえずは、テンプレート。Smartyで作ってありますが、HTMLそのままですから、他のテンプレートでも問題ないでしょう。

[smarty]





Flexigrid Test





[/smarty]

確かjqueryは$(){~だけで、ready()の効果があるような気がしたけど、とりえあず。
Flexigrid本体は、ダウンロード>解凍したものを、ルート/js/flexigrid/の中に直接放り込んであります。今回はjqueryだけ、別途用意したものを読み込んでいますので、pathにご注意ください。
このテンプレートを/flexigrid/index.tplとして保存。

次は、コントローラ部。
上記、ajax部で、/flexigrid/json/を呼んでいますので、jsonActionを内包したコントローラとなります。

[php]
_helper->viewRenderer->setNoRender();

// postリクエスト以外には応対しない。
if (!$this->_request->isPost()) {
return;
}

// リクエストのフィルタリング。
$f = new Zend_Filter_StripTags();

$qtype = $f->filter($this->_request->getPost(‘qtype’));
$query = $f->filter($this->_request->getPost(‘query’));
$page = $f->filter($this->_request->getPost(‘page’,1));
$rp = $f->filter($this->_request->getPost(‘rp’,10));
$sortname = $f->filter($this->_request->getPost(‘sortname’, ‘id’));
$sortorder = $f->filter($this->_request->getPost(‘sortorder’, ‘desc’));

// 該当テーブルの読込。
$table = new Table();

// レコードの総数を求める。(もっと良い方法ありませんか?(^_^;)
// いつもはテーブルクラス側にcount()メソッドを作ってsqlを走らせてます)
$count = $table->select()->from($table, ‘count(id)’)
->query()->fetchColumn();

// クエリ。
$select = $table->select();
$select->limitPage($page, $rp)->order(“$sortname DESC”);
if ($qtype && $query) {
$select->where($qtype . ‘ like ?’, $query);
}
$rows = $select->query()->fetchAll();

// jsonの作成。
$json = array
(
‘page’ => (int) $page,
‘total’ => (int) $count,
);
foreach ($rows as $row) {
$tmp = array();
$tmp[] = $row[‘id’];
$tmp[] = $row[‘title’];
$tmp[] = $row[‘description’];
$tmp[] = $row[‘date’];
$json[‘rows’][] = array(‘cell’ => $tmp);
}
echo json_encode($json);
}
}
[/php]

最後、array $jsonに放り込んでいるところは、array_valuesでもっとスマートにいくんじゃないかな。
前提条件として、Zend_Db_Table_Abstractを継承した、`table`クラスがあるとしています。
こんな感じで

[php]
class Table Extends Zend_Db_Table_Abstract
{
}
[/php]

特に何もいりませんが。

無事、動作しましたでしょうか?
prototypeよりjqueryという方は、flexigrid、良いと思います。

TableKit記事の続きのようなもの

PHPの種 ブログ » TableKitのEditに対応するコントローラアクション習作
でも取り上げたTableKitですが、HTML部分のほうをシンプルな形であげておきます。もちろんTablekitのDEMOのindex.htmlを見ればそれで十分なのですが、自分用のメモとして&これだけ簡単なHTMLでもTablekitを使うことができるんだよ、という参考になればと思います。
Smartyを使っていますが、まあ普通のHTMLと解釈しても特に問題ないでしょう。

[smarty]



Tablekit Test

{foreach from=$hoges item=hoge}

{/foreach}

id name type
id name type
{$hoge.id|escape} {$hoge.name|escape} {$hoge.type|escape}

Insert





[/smarty]

Tableに必要とするID、CLASSをつけてTablekitスクリプト群を読み込んでるだけですね。非常に簡単です。
Editableなやりとりは、PHPの種 ブログ » TableKitのEditに対応するコントローラアクション習作を参考にしてください。
もちろんもっと素晴らしい機能がありますので、知りたい方はDEMOを参考にしてください。