読者です 読者をやめる 読者になる 読者になる

そろそろ本気でSmartyを使いたい(3)

PHP Piece
  1. しばらくPieceから離れると、__flowExecutionTicketKey, __flowExecutionTicketというキーの名称を忘れてしまう。
  2. そもそも__flowExecutionTicketは長い。
  3. XMLHttpRequestで画面遷移を行ったり、EnterでフォームがSubmitされてしまう挙動を防ぐためのJavaScriptを挿入したい。
  4. もしかしたら、誰かが書くかもしれない「Piece_RightのYAML->JavaScriptによるクライアント側Validation」のためのフックを挿入したい。


 といった理由から、ブロック関数piece_formは絶対に必要だと思います。次のような使用イメージです。

{piece_form method="post"}
<p>
<input type="text" name="first_name" />
</p>

<p>
{piece_submit name="confirm" value="Confirm"}
</p>
{/piece_form}
<?php
function smarty_block_piece_form($params, $content, &$smarty, &$repeat)
{
    if (isset($content)) {
        echo $content;
        echo "\n</form>";
    } else {
        $flowExecutionTicket = $smarty->get_template_vars('__flowExecutionTicket');
        $flowExecutionTicketKey = $smarty->get_template_vars('__flowExecutionTicketKey');
    
        $attrs = array();
        foreach($params as $k => $v) {
            $attrs[] = sprintf('%s="%s"', $k, htmlspecialchars($v, ENT_QUOTES));
        }
        
        
        echo '<form '. implode(' ', $attrs). '>';
        echo "<input type=\"hidden\" value=\"{$flowExecutionTicket}\" name=\"{$flowExecutionTicketKey}\" id=\"flowExecutionTicket\" />";
    }
}
?>