smarty capture generator

php

PHP/Smartyのcaptureを使って入力系を作る。外部テンプレート不可やDBテーブル定義フィールド名未確定などの場合に使えるかも?

{* before *}
<textarea name="memo">{$data.memo|nl2br}</textarea>
{html_select_date prefix=date time=$data.date field_order=YMD}
{html_radios name=type selected=$data.type options=$types["type"]}
<input type="text" name="hoge" value="{$data.hoge|escape}">

{* after *}
{$input_memo}
{$input_date}
{$input_type}
{$input_hoge}

ただでさえ、吐き気がするようなテンプレート。

これが帳票システムの入り組んだテーブルに混ざってる訳ですよ。

更にフィールド名が変わったらと思うとね。

時には、元のフィールド名がスペルミスされているので詰まる事も。

調整次第でスペルミスも減るし、何といっても管理が楽。

{* generator $input_keyname *}
{* @assign types [ name=(1="a";2="b";..) ] *}
{foreach key=name item=value from=data}
{capture assign="input_`$key`"}
{if preg_match("@(memo|explain|overview)@",$name)}
<textarea name="{$name}">{$value|nl2br}</textarea>
{elseif preg_match("@(date)@",$name)}
{html_select_date prefix=$name time=$value field_order=YMD}
{elseif preg_match("@(type)@",$name)}
{html_radios name=$name selected=$value options=$types[$name]}
{else}
<input type="text" name="{$name}" value="{$value|escape}">
{/if}
{/capture}
{/foreach}

$input_keyname系が使われていないことが前提。競合するなら該当箇所を変える。

foreach-captureでassignに生成。

使用時は、そのassign($input_keynameなるもの)を必要な個所と交換するだけ。