sfSavvyPlugin を使ってみる
sfSavvyPlugin ってどんなプラグイン?
sfSavvyPlugin はモデルや配列を元に動的で修正可能なテーブルを生成してくれるヘルパーらしいです。モデルを使う場合は、propel-generate-crud で生成するものと機能的に変わらず、使いどころが難しい。。。というか、どういう用途に使うのか理解してません。
まぁ、とりあえず順番なので入れてみる。
インストール
symfony plugin-install http://plugins.symfony-project.com/sfSavvyPlugin
かんたんインストール。[sfSavvyPlugin-1.0.0.tgz - 2007/11/5 現在]
設定
まず、Savvyヘルパーを利用できるようにします。[settings.yml]
all:
.settings:
standard_helpers: [Savvy]
全てのテンプレートで使えるようにする場合は、standard_helpers に'Savvy'を上記のように追加します。あるいは、Savvyヘルパーを利用するテンプレートだけに適用したい場合は、下記のコードをテンプレートの最初に挿入します。
<?php use_helper('Savvy') ?>利用できる関数
Wikiにあるように、関数は4つ用意されています。下記に簡単に列挙します。コード詳細はサンプルをご覧下さい。
Simple Dynamic HTML Table
<?php echo getSimpleTable($models, null, null); ?>
テーブル生成関数です。第1引数: モデル
第2引数: 表示するデータのメソッド名の配列
第3引数: ルーティングルール。編集・削除などへのリンクルールの作成
Simple Edit Form
<?php echo getEditForm($model, null, null); ?>
修正フォーム生成関数です。第1引数: 編集するモデル
第2引数: 編集するデータのメソッド名の配列
第3引数: HTMLのアトリビュートオプション。
Save Form
<?php saveFormData($myModel, $sf_request, "Item Updated") ?>
モデル保存関数です。第1引数: 保存するモデル
第2引数: sfRequestオブジェクト
第3引数: sfRequestアトリビュートに追加するメッセージ("msg")
Simple Delete Form
<?php echo getDeleteTable($models, 'Are You Sure You Want To Delete This Item?', null); ?>
削除フォーム生成関数です。第1引数: 削除するモデル
第2引数: 削除確認メッセージ
第3引数: HTMLのアトリビュートオプション。
設定ファイルなどで'escaping_strategy'をオンにしている場合、モデルなどが引数として正常に利用できない場合があります。
なので、
$obj;
$sf_request;
↓
$sf_data->getRaw('obj');
$sf_context->getRequest(ESC_RAW);
などを利用することを考えます。SavvyHelper.php を書き換える
そこそこ古いプラグインなので、修正しないと使えない部分と、修正した方がオレ好みってところがあったので、いじっちゃいました。ごめんなさい ><
[/plugins/sfSavvyPlugin/lib/helper/SavvyHelper.php]
95行目あたり
105行目あたり
[追記]$routingParams = "?";
↓
$routingParams = "";
'link_to'の仕様が変わってるので修正。105行目あたり
$table .= link_to($routingRules[$routing[$j]], $routing[$j].$routingParams);
↓
$table .= link_to($routingRules[$routing[$j]], $routing[$j], array('query_string'=>$routingParams));
コチラも'link_to'の仕様が変わってるので修正。上記は嘘です。仕様なんて変わるわけありません。ごめんなさい><
routing をちゃんと設定しておけば正常に動作します。
196行目あたり
$html = form_tag($action);
↓
$html = form_tag($action, array('onSubmit'=>"return confirm('$confirmMsg');"));
'onClick'に動作を書くより、submitボタンを利用して'onSubmit'にconfirmをやらせる方がええ。205行目あたり
$html .= "<input type=\"button\" value=\"Delete\" onClick=\"if(confirm('$confirmMsg')) document.forms[0].submit();\" />\n";
↓
if(isset($attributes['hidden'])) {
foreach($attributes['hidden'] as $key=>$val){
$html .= "<input type=\"hidden\" name=\"{$key}\" value=\"{$val}\" />";
}
}
$html .= "<input type=\"submit\" name=\"commit\" value=\"Delete\" />\n";
input(hidden)タグを動的に生成できるようにしちゃう。まとめ
一応サンプルを作ったけど、用途がコレであってるのかわからん。とりあえず、こんなもんだという事だけ覚えとこう。
--
全然進みません。。。
About this entry
Title
Archive type
Individual archive
Published
2007/11/05 22:08
0 Comments