ラベル template の投稿を表示しています。 すべての投稿を表示
ラベル template の投稿を表示しています。 すべての投稿を表示

2010年10月26日火曜日

ファイル1つだけで出来ている 便利なPHP製ツールいろいろ

PHPライブラリは新時代に入った。定番だったphpMyAdminやPEAR::Mailはもう古い。最近は1ファイル配置するだけで簡単に使える便利なツールが増えてきた。

例えばこんなの。



次は1ファイルのフレームワークだね。(Google Code上にはもうたくさん公開されてるけど...)
あるいは1ファイルのブログシステムやWikiか?

2009年9月24日木曜日

Railsで Viewの partialにデータを渡す方法

RailsのViewで部分テンプレートであるpartialを呼び出す場合、呼び出し時に :object または :collection と :locals を渡すことができる。

<%= render :partial => "msg", :object => "データ", :locals => {:name => "他のデータ"} %>

:collection の場合は複数のデータのそれぞれに対して1回ずつpartialが実行される。
<%= render :partial => "msg", :collection => ["データ1", "データ2"] %>

partial側では :object と :collection で渡されたデータは、partialの名前と同じ名前の変数に入っている。
#_msg.html.erb
<%= msg %> <= ここにデータが入っている
<%= name %> <= :localsで渡したデータは指定した名前の変数に入っている。


参考:
UK STUDIO - Railsのpartialの使い方
Ruby On Rails ピチカート街道 - partial パーシャルな関係【partial と object】 -
render :partialカウンター、オブジェクト - ザリガニが見ていた...。

2009年1月26日月曜日

v8cgiのインストールと簡単なサンプル

v8cgiWWW SQL Designerを作ったondrej.zara氏が作ったサーバサイドJavaScript実行環境&ライブラリ。
CGI感覚で手軽にJavaScriptでWebプログラムが書ける。(さらに、テンプレート機能を使えばPHP感覚で書ける。)

ソースとWindows用のバイナリが配布されている。
メールライブラリや画像ライブラリ(GD)、テンプレートライブラリなどが付属している。


Windowsへのインストール
(参考:Installation - v8cgi - How to install v8cgi - Google Code

  1. v8cgi - Google CodeからZIPをダウンロード。展開して適当なフォルダに置く。(例:C:\test\v8cgi)
  2. v8cgi.confをCドライブの直下(コンパイル時に指定された場所)に移動する。
  3. v8cgi.confの中身を編集。(パスを環境に合わせる。)
    (例)
    // put default .js and .dll files here
    Config["libraryPath"] = "c:/test/v8cgi/lib";
  4. コマンドプロンプトからv8cgi.exeを実行してみる。エラーが無ければOK。
    C:\test\v8cgi>v8cgi.exe
    Nothing to do.
  5. Apacheの設定ファイルhttpd.confにCGI実行の設定を追加。
    (例)
    <Location /v8cgi>
     Options +ExecCGI
     AddHandler cgi-script .ssjs
    </Location>
    ※mod_cgiが有効になっていなかったら有効にしておく。
    LoadModule cgi_module modules/mod_cgi.so
  6. Apacheを再起動。
  7. Webのディレクトリにテスト用のScriptを作る。(例:htdosc\v8cgi\exaple.ssjs)
    (例 1)
    #!/test/v8cgi/v8cgi.exe
    response.write("Hello v8cgi!");
     ※responseオブジェクトはデフォルトでインスタンスが生成されている。(参考:API_HTTP - v8cgi - Library "http.js" - Google Code
    (例 2)
    #!/test/v8cgi/v8cgi.exe
    System.stdout("Content-type: text/plain\n\n");
    System.stdout("Hello v8cgi!");
     ※response.writeを使わない場合、Content-typeを出力しないと500 Internal Server Error(Premature end of script headers: example.ssjs)になる。
  8. 上記のファイルにアクセスしてみる。エラーが無ければOK。



DBを使う例
#!/test/v8cgi/v8cgi
library("mysql.dll");
library("query.js");

Query.setDB(new MySQL().connect("localhost", "db_user", "db_password", "schema"));

var result = new Query(Query.SELECT)
 .field("id").field("name") //SELECT
 .table("members") //FROM
 .where("%f = %s", "name", "TARO") //WHERE
 .execute();

response.write(result.numRows() + "<br>");

var rows = result.fetchObjects();
for (var i = 0; i < rows.length; i++) {
 response.write(rows[i]["id"] + ":" + rows[i]["name"] + "<br>");
}


テンプレートを使う例
テンプレートを呼び出すファイルの記述
#!/test/v8cgi/v8cgi
library("template.js");

var t = new Template({suffix: "tpl.html"}); //現行バージョン(0.2.0)にはバグがあるのでsuffixを指定しないとエラーになる
var var1 = "abc"; //動的なデータは変数に入れておけばテンプレート内から参照できる
var var2 = 123;
response.write(t.process("example")); //現行バージョン(0.2.0)ではdataを渡しても無視される

テンプレートの記述(example.tpl.html)
<html>
<head><title>TEST</title></head>
<body>
This is a random number: $(Math.random())

$code( for(var i = 0; i < 10; i++) { )
<li>$(i)</li>
$code( } )

$(var1) $(var2)
</body>
</html>


REQUEST情報を取り出す方法
"HTTP_"で始まる情報はrequest.header()で取り出せるが、それ以外は直接_headersの中から取り出すしか無さそう。
#!/test/v8cgi/v8cgi
response.write(request._headers["SCRIPT_URL"]);


感想
  • シンプルでよい。ソース追って理解できる。
  • DBアクセス、テンプレートエンジン、メール送信と揃っていて、即戦力っぽい。
  • DAOがORマッパーでなくSQLヘルパーなのが好き。さすがERDを描くためにツールを作ってしまった人だけある。
  • DBアクセスがプレースホルダーでないのが残念。escapeはしているようだがPreparedでないと何かと嫌。

  • response.writeってのがASPみたいでちょっと嫌。echo()とかでラップすればよいが。
  • 実際に使うとしたらmod_rewriteを絡めたオレームワーク(オレオレ・フレームワーク)を被せることになりそう。



参考:Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ

2008年8月15日金曜日

YUI Grid.css用の XHTML 1.0 テンプレート

YUI: CSS Grid Builderで作ったHTMLの冒頭部分をXHTML 1.0 Strictにしたもの。

横幅は950pxでカラム分割無し、文字コードはUTF-8の場合。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>TITLE</title>
<!-- Keywordsはもう要らないと思う
<meta name="Keywords" content="FOO,BAR" />
-->
<meta name="Description" content="DESCRIPTION" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" href="some.css" />
<!-- フィードの記述は種類による -->
<link rel="alternate" type="application/rss+xml" title="FEED TITLE" href="http://www.example.com/feed.xml" />

<!-- スタイルシートは別ファイル化を推奨 -->
<style type="text/css"> /* ... */ </style> </head>
<body>
<!-- ここのidとclassは横幅等で変わる。YUI Grid Builderで調べるのが楽。 -->
<div id="doc2" class="yui-t7">
<div id="hd">
HEADER

</div><!-- #hd -->
<div id="bd">
<div class="yui-g">
MAIN
</div><!-- .yui-g -->
</div><!-- #bd -->
<div id="ft">
FOOTER
</div><!-- #ft -->
</div><!-- #doc/[2-4]?/ -->
<!-- charsetはhtml本体と同じなら不要 -->
<script type="text/javascript" src="some.js" charset="UTF-8"></script>
<!-- JavaScriptも別ファイル化を推奨 -->
<script type="text/javascript">
//<![CDATA[
...
//]>
</script>
</body>
</html>

2008/12/22 変更:JavaScriptのHTMLコメント化をCDATAに変更

ブログ アーカイブ

tags