第6回 HTML_QuickFormとSmartyを使ってみよう(パート2) ご意見・ご感想
先生 今日は第3回に作った「奥進システムとあなたの相性チェックプログラム」を派手にしてみます!
たぬき 先生どないしたん?先生は機能重視主義で見た目はどうでもええ人ちゃうん?
先生 ようわかってるなぁ…そやけど今日はとにかく派手にするねん!!
たぬき わかりましたぁ。派手派手にしましょう!
先生 それではまずindex.phpを見てみましょう。

001:  <?php
002:  require_once "./CFrmTanuki.php";
003:  $frmIndex = new CFrmTanuki('index.php');
004:  $frmIndex->setItem();
005:  
006:  if (isset($_POST["BTNG"]["SUBMIT_INDEX"])) {
007:  // 確認画面 (入力画面で「送信」クリック時)
008:      $frmIndex->setServerRule();    // 入力チェックルール設定
009:      // 入力チェック実行
010:      if ($frmIndex->chkValidate()) {
011:          // 入力が正しい時は「戻る」ボタンと「送信」ボタンを表示
012:          $frmIndex->setReturnSubmit('RETURN_CONF', 'SUBMIT_CONF');
013:      } else {
014:          // 入力が不正な時は「戻る」ボタンのみを表示
015:          $frmIndex->setReturn('RETURN_CONF');
016:      }
017:      // 画面表示
018:      $frmIndex->freezeForm();    // 要素を凍結
019:  } elseif (isset($_POST["BTNG"]["SUBMIT_CONF"])) {
020:  // 採点画面 (確認画面で「送信」クリック時)
021:      // 入力値を受け取るためにsetItemを実行。
022:      // 表示はしない。
023:      $frmIndex->setServerRule();
024:      if ($frmIndex->chkValidate()) {
025:          // 入力結果を$valsに格納
026:          $vals = $frmIndex->getVals();
027:          // 採点処理を実行
028:          require_once "./ok.php";
029:      }
030:  } else {
031:  // 入力画面表示 (最初と確認画面で「戻る」クリック時)
032:      $frmIndex->setClientRule();    // 入力チェックルール設定
033:      $frmIndex->setSubmit("SUBMIT_INDEX");
034:  }
035:  
036:  // Smarty 設定
037:  $smarty = new Smarty;
038:  $smarty->templete_dir = "./templates";
039:  $smarty->compile_dir  = "./templates_c";
040:  $smarty->cache_dir    = "./cache";
041:  
042:  // renderer for Smarty templates の取得
043:  $renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
044:  $frmIndex->_form->accept($renderer);
045:  $smarty->assign('form', $renderer->toArray());
046:  
047:  if (isset($_POST["BTNG"]["SUBMIT_INDEX"])) {
048:      $smarty->display("index.tpl");
049:  } elseif (isset($_POST["BTNG"]["SUBMIT_CONF"])) {
050:   ;
051:  } else {
052:      $smarty->display("index.tpl");
053:  }
054:  
055:  ?>
図1.index.php
先生 $frmIndex->dispForm();
を実行するのをやめるのと、Smarty用の処理を最後に追加するのは前回と同じ。
ただ、OK画面は採点結果のメッセージのみしか表示しないので、
$smarty->display("index.tpl");
は入力画面と確認画面の時のみ実行するようにしてます。

で、次はテンプレートね。

001:  <html>
002:  <head>
003:  <title>相性チェックフォームにSmartyを使ってみる</title>
004:  <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
005:  </head>
006:  {$form.javascript}
007:  <body bgcolor="#f0fff0" text="#339999"> 
008:  <form {$form.attributes}>
009:  <div>
010:  <font color="#339999" size=4 face="MS Pゴシック" >
011:      <b>あなたの好みを教えてください</b>
012:  </font>
013:  <table border="0">
014:      <tr>
015:          <td width="150" bgcolor="#ffc0cb" align="right" valign="top">
016:              <b>{$form.selColor.label}</b>
017:          </td>
018:          <td width="500" bgcolor="ccffcc" valign="top" align="left">
019:              {$form.selColor.html}
020:              &nbsp;&nbsp;&nbsp;その他{$form.txtColor.html}
021:          </td>
022:      </tr>
023:      <tr>
024:          <td width="150" bgcolor="ccffcc" align="right" valign="top">
025:              <b>{$form.lngChkGrp.label}</b>
026:          </td>
027:          <td width="500" bgcolor="#ffc0cb" valign="top" align="left">
028:              {$form.lngChkGrp.html}
029:          </td>
030:      </tr>
031:      <tr>
032:          <td width="150" bgcolor="#ffc0cb" align="right" valign="top">
033:              <b>{$form.animalRdoGrp.label}</b>
034:          </td>
035:          <td width="500" bgcolor="ccffcc" valign="top" align="left">
036:              {$form.animalRdoGrp.html}
037:          </td>
038:      </tr>
039:  </table>
040:  <br>
041:  <font color="#339999" size=4 face="MS Pゴシック" >
042:      <b>ハンドルネームとメッセージをお願いします</b>
043:  </font>
044:  <table border="0">
045:      <tr>
046:          <td width="150" bgcolor="ccffcc" align="right" valign="top">
047:              <b>{$form.txtName.label}</b>
048:          </td>
049:          <td width="500" bgcolor="#ffc0cb" valign="top" align="left">
050:              {$form.txtName.html}
051:              <font color="ff6666">{$form.txtName.error}&nbsp;&nbsp;</font>
052:              <font color="ff6666" size=1>※必須項目です</font>
053:          </td>
054:      </tr>
055:      <tr>
056:          <td width="150" bgcolor="#ffc0cb" align="right" valign="top">
057:              <b>{$form.txaImp.label}</b>
058:          </td>
059:          <td width="500" bgcolor="ccffcc" valign="top" align="left">
060:              {$form.txaImp.html}
061:          </td>
062:      </tr>
063:  </table>
064:  <table border="0">
065:      <tr>
066:          <td valign="top" align="left">{$form.BTNG.html}</td>
067:      </tr>
068:  </table>
069:  </div>
070:  </form>
071:  </body>
072:  </html>
図2.テンプレートindex.tpl
先生 前回と違うのは、6行目の{$form.javascript}です。これはクライアント側の入力チェックのためです。
たぬき このテンプレートで派手派手にしてるねんね。
先生 そうそう。テンプレートを使うと、HTML_QuickFormで入力チェック等簡単に実装して、 なおかつ派手派手にできるんねん。
これで 派手派手版「奥進システムとあなたの相性チェックプログラム」作成完了!
たぬき なるほど。前に比べてずいぶん派手になりましたね。
先生 それじゃー今日はここまで。お疲れさんでしたー
たぬき お疲れさんでしたー

インフォメーションへ戻る 第1回 PHPのコードとHTMLタグ コラム
  第2回 HTML_QuickFormを使ってみよう
  第3回 HTML_QuickFormを使ってみよう(パート2) HTML_QuickForm Memo
  第4回 Smartyを使ってみよう HTML_QuickForm Menu
  第5回 HTML_QuickFormとSmartyを使ってみよう HTML_QuickForm Smarty Tips
  第6回 HTML_QuickFormとSmartyを使ってみよう(パート2) Mojavi Memo
  第7回 実践編 HTML_QuickFormとSmartyを使ってみてどうよ? Ajax Memo
  第8回 HTML_QuickForm_Controller大好き!
  第9回 Mojaviのまとめ
  第10回 Ajax使ってみました
  第11回 PHPEclipse開発環境設定
  第12回 Eclipse+PHPIDEインストール記
  第13回目 PHPIDEによるデバック
  第14回目 Selenium IDEを使ってみました
  第15回目 PDT(旧 PHPIDE)のインストール、デバック