第5回 Smartyを使って実用的なページを作ってみる(その1) - Smarty講座

PHPセキュリティ

yossy先生のSmarty講座

Lecutures on PHP

第5回 Smartyを使って実用的なページを作ってみる(その1) (その2)

 このエントリーをはてなブックマークに追加

入力画面を作る

yossy先生

次に問い合わせ内容をユーザーに入力してもらうためのフォームページを作成します。また、Smartyオブジェクトを取得する処理は他のPHPからも共通で利用するので、別ファイルで用意します(*2)。ここではcommon.phpというファイル名とします。

form.php

<?php
// 共通の設定を読み込む
require_once( 'common.php' );

// Smartyオブジェクト取得
$smarty =& getSmartyObj();

// ひな形のSmartyテンプレートでincludeするテンプレートを指定
$smarty->assign'content_tpl''form.tpl' );

// パラメータを渡す
$smarty->assign'params'array(
    
'types' => array(
        
'request' => '意見、要望',
        
'question' => '質問、問い合わせ',
        
'other' => 'その他'
    
)
) );

// ページを表示する
$smarty->display'template.tpl' );
?>

common.php

<?php
define
'SMARTY_DIR''/usr/local/lib/Smarty-2.6.18/libs/' );
require_once( 
SMARTY_DIR .'Smarty.class.php' );

// Smartyオブジェクト取得
function & getSmartyObj()
{
    static 
$smarty null;

    if( 
is_null$smarty ) ){
        
$smarty = new Smarty();
        
$smarty->template_dir '/var/www/smarty/templates/';
        
$smarty->compile_dir  '/var/www/smarty/templates_c/';
        
$smarty->config_dir   '/var/www/smarty/configs/';
        
$smarty->cache_dir    '/var/www/smarty/cache/';
    }

    return 
$smarty;
}
?>

インクルードするテンプレートファイルとしてform.tplを指定しています。パラメータはお問い合わせ種類のセレクトボックスの選択項目を渡しています。

続いてインクルードするテンプレートファイルform.tplを作成します。ここにはフォームの中身を記述します。

form.tpl

<p>お問い合わせやご意見・ご要望を以下のフォームにご記入の上ご送信ください。</p>

<
form method="post" action="post.php">
<
dl>
  <
dt>お名前</dt>
  <
dd><input type="text" name="name" value="" /></dd>

  <
dt>メールアドレス</dt>
  <
dd><input type="text" name="address" value="" /></dd>

  <
dt>お問い合わせ種類</dt>
  <
dd>
    {
html_options name="type" options=$params.types}
  </
dd>

  <
dt>お問い合わせ件名</dt>
  <
dd><input type="text" name="title" value="" /></dd>

  <
dt>お問い合わせ内容</dt>
  <
dd><textarea name="content" cols="60" rows="5"></textarea></dd>
</
dl>

<
input type="submit" value="送信する" />
</
form>

お問い合わせ種類で用いている{html_options}はカスタム関数で、options属性に与えられた配列からリストボックスを表示するselect,optionタグを生成します。ここではPHPから渡されたパラメータ$params.typesから生成しています。

------
*2)外部からアクセスされる恐れがあるので、できればWebサーバーのDocumentRoot以外のパスに配置してください。

  



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)