04 April 2006
This post may be outdated due to it was written on 2006. The links may be broken. The code may be not working anymore. Leave comments if needed.
今天用 Date::Manip 的时候碰到 Date::Manip unable to determine TimeZone 这样的错误。
后来通过 perldoc Date::Manip 设置了环境变量 TZ 为 +0800 就可以了。

另一个是用 Template::Plugin::FillInForm 的时候。
很多时候用户输入错误后,我们会跳转到用户输入的界面,然后填充用户输入的字段。一般来说对于 input/text 这样可以设置 value='[% c.req.param('name') %], 但是对于 radio checkbox select 这样就比较复杂了。而 HTML::FillInForm 用 HTML::Parser 分析字段并填充,很方便。用法很简单:
[% USE FillInForm %]
[% FILTER fillinform fdat => journal_date || c.req.params %]
<form>
<input type='radio'
[% END %]

啥都不用写,就前面一句 [% USE 后面一句 [% END %]
但是这种情况在以 DBIx::Class 情况下会失效。因为 FillInForm 用 $journal->{title} 来填充,而 DBIx::Class 是用 $journal->title 来获取的。这在 TT 下没关系,因为都可以用 [% journal.text %] 来获取的。但是对于 FillInForm Plugin 就会失效。我目前的折中方法是多添加一句:
[% USE FillInForm %]
[% IF journal;
journal_date = {
title => journal.title,
};
END; %]
[% FILTER fillinform fdat => journal_date || c.req.params %]

而不是用这段失效的:
[% USE FillInForm %]
[% FILTER fillinform fdat => journal || c.req.params %]


blog comments powered by Disqus