デジットさんの生活便利サイトトップへ デジットさんのSmartyでQuickForm(PHP)

トップページ > ホームページ作成 > SmartyでQuickForm

フォームの自動入力チェックをしてくれるQuickFormの入力フォームをSmartyのテンプレートを使うことで自由にデザインします。何のことか解からない方は、まず Smartyの使い方QuickFormの使い方を見てください。

QuickFormとSmartyを組み合わせる

QuickFormの使い方で使った「クラス」ファイルとSmartyのテンプレートファイルを用意します。実行ファイルから、「クラス」ファイルで定義したQuickFormの入力項目や自動チェックのデータを読み取り、Smartyのテンプレートファイルで表示します。

QuickFormをつかったサンプル

ここでは、「クラス」をつかった方法で、QuickFormを使ってみます。クラスを別ファイルにすることで、同じ入力項目やチェック項目をつかうフォームが簡単に使えるようになります。「クラス」と実行の2つのファイルを用意します。

クラスファイルの例

クラスファイルの例です。ここでは、QuickFormの入力要素・自動チェック項目・表示する釦などの定義をしています。
ファイル名は、「QfrmSmrtySmpl.php」です。QuickFormの使い方で紹介した「QfrmSmpl.php」との違いは、全ての釦を「$buttons[] 」で定義し 「addGroup()」でまとめ表示している所くらいです。

<?php
// QuickForm用 class のサンプル(フォームと釦と表示の定義)

//ライブラリの読み込み
require_once("HTML/QuickForm.php");

//QuickFormフォームの定義
class QfrmSmpl{
var $_form;
//コンストラクタの定義 $sbmtAct 「送信」釦のリンク先
function QfrmSmpl($sbmtAct){
$this -> _form = new HTML_QuickForm("frmSmpl","post",$sbmtAct);
}
//フォーム要素・入力チェックの定義
function setForm(){
$this -> _form -> addElement("text","txtName","名前(全角日本字)");
$this -> _form -> addElement("text","txtEname","名前(半角英字)");
$this -> _form -> addElement("text","txtEmail","E-mail");
$this -> _form -> addElement("text","txtEmail2","E-mail(確認用)");
$this -> _form -> addElement("textarea","txtrComment","コメント");
}
//フォーム入力チェックの定義(, null, "client")で、クライアント側でチェック
function checForm(){
$this -> _form -> applyFilter(__ALL__,"trim"); //空白取り除き
$this -> _form -> addRule("txtName","名前を入力!","required", null, "client");
$this -> _form -> addRule("txtEname","半角英字で入力!","alphanumeric", null, "client");
$this -> _form -> addRule(array("txtEmail","txtEmail2"),"メールアドレス不一致!","compare", null, "client");
$this -> _form -> addRule("txtEmail","無効なメールアドレス!","email", null, "client");
$this -> _form -> addRule("txtrComment","コメントを入力!","required", null, "client");
$this -> _form -> setRequiredNote("<font color='red'>*</font>必須入力");
}
//「フォームが有効である」かチェック 有効ならTRUE function frmVldt(){
if($this -> _form-> validate()){
return true ;
}else{
return false;
}
}
//「送信」釦の定義 $btnName:釦の名前
function setSbmit($btnName){
$buttons[] = &HTML_QuickForm::createElement("submit",$btnName,"送信");
$buttons[] = &HTML_QuickForm::createElement("reset","reset","リセット");
//釦を並べて表示
$this -> _form -> addGroup($buttons,"BTNG", null," ");
}
//「戻る」と「送信」釦の定義 $rtnName:戻る $sbmtName:送信
function setRtnSbmit($rtnName,$sbmtName){
$buttons[] = &HTML_QuickForm::createElement("submit",$rtnName,"修正");
$buttons[] = &HTML_QuickForm::createElement("submit",$sbmtName,"送信");
$this -> _form -> addGroup($buttons,"BTNG", null," ");
}

//画面の表示
function dispFrm(){
$this -> _form -> display();
}
//画面のフリーズ
function freezeFrm(){
$this -> _form -> freeze();
}
}
?>

Smartyのテンプレートファイルの例

ディレクトリ「templates」にテンプレートファイルを置きます。ここでは、テンプレートファイルは「smpl_qfrm_smrty_index.tpl」としました。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>QuickFormとの連携(Smartyテンプレートファイル)</title>
</head>
<body>
<!-- QuickFormで設定したform属性を変数にセットしてassign -->
<form {$form.attributes}>
<div>
<table border="0" bgcolor="#ffff99">
<tr bgcolor="#ccff99">
<td align="center" valign="top"><b>項目</b></td>
<td valign="top" align="left"> <b>入力欄</b>
</tr>
<tr>
<td align="center" valign="top"><b>{$form.txtName.label}</b></td>
<td valign="top" align="left"> {$form.txtName.html}<font color="ff6666">{$form.txtName.error}  </font>
<font color="ff6666" size=1>※必須項目です</font>
</tr>
<tr>
<td align="center" valign="top"><b>{$form.txtEname.label}</b></td>
<td valign="top" align="left">{$form.txtEname.html}</td>
</tr>
<tr>
<td align="center" valign="top"><b>{$form.txtEmail.label}</b></td>
<td valign="top" align="left">{$form.txtEmail.html}<font color="ff6666">{$form.txtEmail.error}  </font></td>
</tr>
<tr>
<td align="center" valign="top"><b>{$form.txtEmail2.label}</b></td>
<td valign="top" align="left">{$form.txtEmail2.html}</td>
</tr>
<tr>
<td align="center" valign="top"><b>{$form.txtrComment.label}</b></td>
<td valign="top" align="left">{$form.txtrComment.html}<font color="ff6666">{$form.txtrComment.error}  </font>
<font color="ff6666" size=1>※必須項目です</font></td>
</tr>
<tr>
<td align="center" valign="top"><b></b></td>
<td valign="top" align="left">{$form.BTNG.html}</td>
</tr>
</table>
</div>
</form>
<!-- 送信確認コメント -->
<p>
{$value}
</p>
</body>
</html>

「{$form.attributes}」は、QuickFormで設定したform属性を変数にセットしてassignしています。QuickFormの「クラス」ファイルで定義したラベルを使って、HTMLファイルを作ります。例えばラベル「txtName」の場合は、「{$form.txtName.label}」がQuickFormの要素、「{$form.txtName.html}」が入力されたデータ、「{$form.txtName.error}」が入力りぇっくでエラーがあった場合のコメントになります。
「{$value}」は、QuickFormとは関係なく、単純なSmartyの使い方になります。次の実行ファイルで「{$value}」の値を決めています。

Smartyのデザインを使ったQuickFormQの実行ファイルの例

つぎは、上記定義したクラスファイルを利用して、QuickFormQを実行する例です。
ファイル名は、「smpl_qfrm_smrty_index.php」です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>フォーム(QuickForm and Smarty)</title>
</head>
<body>
<?php
//QuickFormで定義したclassファイルの読み込み
require_once "./QfrmSmrtySmpl.php";

require_once "/usr/local/lib/php/Smarty/Smarty.class.php";
require_once "HTML/QuickForm.php";
require_once "HTML/QuickForm/Renderer/ArraySmarty.php";

//submit釦のaction先(自分のファイル)指定
$qfrmindex = new QfrmSmpl("smpl_qfrm_smrty_index.php");

//フォームの定義・チェック
$qfrmindex -> setForm(); //要素とチェックの定義
$qfrmindex -> checForm(); //入力チェック

//確認画面の場合 「戻る」と「送信」釦を表示
//入力値が有効 かつ 釦名が"SUBMIT_INDX"の場合
if ($qfrmindex -> frmVldt() and isset($_POST["BTNG"]["SUBMIT_INDX"])){
$qfrmindex -> setRtnSbmit("RTN_CNF","SBMT_CNF");
$qfrmindex -> freezeFrm(); //要素をフリーズ
//最終画面の場合 釦表示なし
}elseif(isset($_POST["BTNG"]["SBMT_CNF"])){
$qfrmindex -> freezeFrm(); //要素をフリーズ
$com = "入力ありがとうございました。";
//入力画面の場合 最初の表示と「戻る」で戻った場合
}else{
$qfrmindex -> setSbmit("SUBMIT_INDX"); //表示
//smartyへのレンダリング表示へ
}
// Smartyの設定
$smarty = new Smarty;
$smarty->template_dir = "./templates";
$smarty->compile_dir = "./templates_c";
$smarty->cache_dir = "./cache";

// renderer for Smarty templates の取得
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$qfrmindex->_form->accept($renderer);
$smarty->assign('form', $renderer->toArray());
$smarty -> assign("value",$com);

// 表示
$smarty->display("smpl_qfrm_smrty_index.tpl");
?>
</body>
</html>

「HTML/QuickForm/Renderer/ArraySmarty.php」で、QuickFormからSmartyにデータを受け渡しできるようにします。表示は、QuickFormではなく、「renderer for Smarty templates の取得」をおこない、「$smarty->display("smpl_qfrm_smrty_index.tpl")」で表示します。 サンプルは、フォーム(QuickForm and Smarty)で、確認できます。
レンタルサーバーの「ロリポップ」では、動作確認しております。

ホームページを公開するレンタルサーバーは、 ロリポップ! がお薦め、 PHP5を使うならPHP5から選ぼう。

関連ページ

ホームページ作成

PHP5を使う

アフィリエイトをする

PHPの使い方

デジットさんのホームページ入門に移行中

スポンサード リンク

Amazon.co.jpアソシエイト:
PHP&プログラミング

売れている順 新刊順

:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20php :php2_  :10

とことん!ホームページホームページ入門役立つサイトデジットさんのリストラ日記仮福真琴の精神科医はうそだらけ

2005-2010 Copyright © Digit-01 All Rights Reserved.