Ethnaのフォームヘルパ

EthnaにはフォームヘルパがあるのでActionFormに定義した内容を基に自動的にHTMLタグ(formとかinput)を出力してくれるのだけど、Ethnaのバージョンによる出力内容で少しトラブったのでメモ。
なお、元々書き方が甘かったということを前提に書きます。
しかも、今の最新バージョンは2.3.2であることを併せて書いておきます。(なぜか2.3.1と比較...)

早速。
ActionFormでは次の様に定義。

<?php
$form = array(
'hoge' => array(
'type'        => VAR_TYPE_STRING,
'form_type'   => FORM_TYPE_TEXT,
// 以下省略
),
);
?>

で、テンプレートに次の様に書くと...

{form ethna_action="main_foo"}
{form_input name="hoge"}
{/form}

HTMLヘルパが解釈してHTMLを出力してくれるのだけど、この出力結果がEthnaのバージョンによって微妙に違った。
Ethna2.1.2(class/Ethna_SmartyPlugin.php (rev1.14))のときは、

<form action="" method="post">
<input type="hidden" name="action_main_foo" value="true">
<input type="text" name="hoge" value="" />
</form>

これが、Ethna2.3.1(class/Ethna_SmartyPlugin.php (rev1.21))では、

<form method="post">
<input type="hidden" name="action_main_foo" value="true">
<input type="text" name="hoge" value="" />
</form>

となっていた。action属性がテンプレートに「{form ethna_action="main_foo" action="index.php"}」などと明記しない限り出力されなくなった。
一応、Ethna本体のソースを読むと、2.1.2の頃は、

<?php
// class/Ethna_SmartyPlugin.php (rev1.14)の一部
if ($action !== false) {
if (isset($action) == false) {
$action = basename($_SERVER['PHP_SELF']);
}
$s .= sprintf(' action="%s"', htmlspecialchars($action, ENT_QUOTES));
}
?>

となっていて、未指定の場合でも入る様になっていたのだけど、レンダラをSmarty以外にも使える対応が行われたとき修正された?のかもしれない。
もっとも自分がテンプレートにきちんとactionを明記しておくべきなのだけど、うっかり抜けている箇所があった…。と。
で、これでEthna2.1.2をEthna2.3.1に上げたときに一般のPC向けブラウザだと確認した限りでは問題なく動いてたり。
(ドキュメントを開いたコントローラと同じ箇所にaction属性が指定されたことになるみたい?)
ただ、問題があるのがケータイ。
iモード用ブラウザだと、出力HTML中にformタグにaction属性が抜けていると、formタグに挟まれた間にあるinputタグで表現される入力フォームが全く表示されない。(PCブラウザだと出力される)
2.1.2の頃は未記述でも空の「action=""」という属性がformタグに出力されていたので表示されていたのかなぁ。

ともかく、フォームヘルパで{form}と書くときにはactionを必ず指定する様にしたいと思います。。。

(Visited 1 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です