Posts tagged input

PHP の便利な関数 output_add_rewrite_var

1

PHP から出力する HTML に最終的に a タグや form タグを見つけ出し、自動で指定した変数をクエリストリングや hidden 属性で挿入してくれる関数です。

PHP4.3 から追加されたようなのですが知らなかったです。
昔から、session.use_trans_sid というセションID を a タグや form タグの hidden 属性に追加してくれるのはありましたが、それをセションID 以外にも使用できるように関数化したもののようです。

URL リライト機構に新しい名前/値の組を追加します。 名前および値は、URL (GET パラメータとして) およびフォーム (hidden フィールドとして) で追加されます。これは、session.use_trans_sid で透過的 URL リライティングが有効になっている場合に セッション ID が渡される方法と同じです。 絶対 URL (http://example.com/..) はリライトされないことに注意しましょう。

- PHP マニュアルより

userid の値 $userid を全てのリンクに付与したい場合は、
output_add_rewite_var('userid', $userid);と書くことにより
<a href="index.php">TOP</a>
<a href="index.php?userid=1">TOP</a>と出力されます。

form タグも
<form action="index.php" method="post">
<input type="hidden" name="userid" value="1">となります。

注意点としては絶対URLはりライトされないことです。
これがないと他サイトにまで、セションID などを渡してしまいますからね。

PHP マニュアル
output_add_rewrite_var

CakePHP キャッシュファイルの使用

1

CakePHP でキャッシュを使用するときに便利なグローバル関数があります。

cache($path, $data, $expires, $target)
$data のデータをキャッシュします。
キャッシュする場所は
$target==”cache” なら /app/tmp/cache/ + $path
$target==”public” なら /webroot/ + $path
になります。$target を指定しなければ $target==”cache” です。
$expires はキャッシュの有効期間です。
内部で
$expires = strtotime($expires, time());
が行われるので、strtotime の Data input formats 形式に準拠したものでなければいけません。
デフォルトは $expires = ‘+1 day’ です。
clearCache($params, $type, $ext)
$paramsが文字列でキャッシュディレクトリかファイル名にマッチする場合はキャッシュから削除されます。
$params が配列の場合は配列内の文字列全てに対して上記の処理が行われます。
対象のディレクトリは $type で指定します。
$type のデフォルトは ‘views’ です。
対象ディレクトリは /app/tmp/cache/ + $type になります。
cache 関数で ‘public’ を指定した場合のクリアはこの関数ではできないようです。

結構簡単にキャッシュ処理ができそうです。

CakePHP 入力フォームで確認画面を表示する方法

3

フォームを入力後、すぐに保存ではなく一度確認画面を表示させたい場合のやり方。

こちらに詳しいやり方が書いてあります。
http://www12.atwiki.jp/nezox/pages/6.html

ポイントは

  • 入力フォームで
    <input type="hidden" name="mode" value="confirm">

    とする。

  • コントローラの add アクションでバリデーションチェック後に
     if (@$_POST["mode"]=="confirm") {
        // 確認画面を表示する
        $this->render('confirm');
    } else {
        // 保存処理
        if ($this->User->save($this->data)) {
            $this->flash('Your post has been saved.', '/users');
        }
    }
  • 確認画面の view を confirm.thtml を作成
     <h1>確認画面</h1>
    <form action="<?php echo $html->url('/users/add'); ?>" method="post">
    ログインID:
    <?php echo $html->tagValue('Users/login_id'); ?
    <?php echo $html->hidden('Users/login_id', array('value'=>$html->tagValue('Users/login_id'))); ?>
    <input type="button" value="戻る" onclick="history.back();">
    <input type="submit" value="新規登録">
    </form>

CakePHP で Smarty を使用するメモ

3

Smarty を CakePHP で使用する方法を調べたメモ

Smarty の用意

Smarty ディレクトリを/vendors ディレクトリへコピー

/vendors/smarty/Smarty.class.php

のようになる。

Smarty が使用するディレクトリを作成

/app/tmp/smarty/cache/
/app/tmp/smarty/compile/

Smarty 用の View クラスの準備

レンダリングを任せる Smarty View Class を設定します。
Smarty View Class をダウンロードして smarty.php とリネームして

/app/views/

に配置する。

smarty という名前のサブディレクトリを使用しないなら
$this->subDir = 'smarty'.DS;
をコメントアウトする。
また、
$this->Smarty->assign_by_ref('view', $this);

$this->Smarty->assign_by_ref('this', $this);
に変更する。
この変更はテンプレートの中で $this を .thtml と同じように使用したい場合に必要。

AppController の設定

/app/app_controller.php

を作成

class Appcontroller extends Controller{
    var $view = "Smarty";
}

実際の使用

view に .tpl があれば Smarty テンプレートとして処理を行い、なければデフォルトの .thtml を表示するようになる。

.tpl の中では .thtml で使用できるヘルパーも使用できる。
.thtml の「<?php echo」を「{」、「;?>」を「}」にすればほぼそのまま利用できる。

ただ、.thtml で HTMLヘルパーを使用している場合

{$html->input('Post/name', array('size'=>'30'))}

のままでは、array(…) でエラーになる。

これを修正するには、Smarty のプラグインを使用して解決する。
プラグインをダウンロードして function.assign_assoc.php にリネームして

/vendors/samrty/libs/plugins/

に配置する。

テンプレートの先頭で

{assign_assoc var='ArrayName' value='size=>30'}

などとして

{$html->input('Post/name', $ArrayName)}

とすればOK.

ただ結構最後のやつが面倒かも。。。

Go to Top