我真的很喜欢Template Toolkit,就像它如何与Catalyst一起工作,但我想要更多'web advanced'工具包.
对于像这样的Web对象,它可能只是一个*.tt文件包:Selector,Selector_DateTime,Menu,Data_Table ......
网络上有什么类似的东西吗?如果没有,为什么不呢?
假设我的模板中有以下内容:
[%- pages = [ 'one', 'two', 'three' ] -%]
<p>Go to page [%- ... -%]</p>
Run Code Online (Sandbox Code Playgroud)
假设EVAL_PERL是不成立(即我不能使用[%- PERL -%]块),我需要什么把里面[%- ... -%]的上方,从而得到下面的输出?
<p>Go to page "a randomly picked element of pages"</p>
Run Code Online (Sandbox Code Playgroud) 我有一个TT插件,可以完成琐碎的独特ID:
sub get_unique_uid_tt {
my ( $classname, $o ) = @_;
my %h;
foreach my $item ( @{$o} ) {
unless ( exists $h{ $item->id } ) {
$h{ $item->id } = 1;
}
}
return keys %h;
}
Run Code Online (Sandbox Code Playgroud)
模板调用只是:
[% Namespace.get_unique_uid_tt( data.users ) %]
Run Code Online (Sandbox Code Playgroud)
"data"是一个RDB对象,用户是其关系之一.我已经验证".users"直接在Perl中返回一个列表,无论该关系是否有一个或多个元素.
但是,TT似乎返回单元素列表的元素,同时正确返回多个元素的列表.
我查了一下,发现你可以用".list"强制列表上下文:
[% Namespace.get_unique_uid_tt( data.users.list ) %]
Run Code Online (Sandbox Code Playgroud)
对于单元素列表,这不起作用,因为Data :: Dumper显示:
$VAR1 = [
{
'value' => 1,
'key' => '__xrdbopriv_in_db'
},
{
'value' => bless(
... snip ...
),
'key' => 'db'
},
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用Template :: Toolkit的日期插件(Template :: Plugin :: Date),它适用于直接从MySQL中取出的日期时间(yyyy-mm-dd hh:mm:ss),但它不起作用与日期(yyyy-mm-dd).
获取date.format以接受日期(不修改sql查询)的最简单方法是什么?
谢谢.
我正在使用Perl和Catalyst框架,DBIx类作为ORM,TT作为视图,Postgresql作为DB.
我有一个带有'timestamp without timezone'类型的列,如果我在Postgres中进行手动查询,则列值是这样的格式2012-08-30 21:30:14,但是当我在TT视图文件中打印该值时,我得到它2012-08-30T15:03:13,所以很明显它会被格式化但是通过我究竟无法分辨的.
我想使用Template :: Plugin :: Date格式化输出时间戳,但我得到Catalyst错误:
无法渲染模板"xxx/list.tt2:日期错误 - 错误的时间/日期字符串:期望'h:m:sd:m:y'得到:'2012-08-30T21:28:22'"
代码在xxx/list.tt2中 [% date.format(xxx.created) %]
那么我该如何让它发挥作用呢?提前致谢.
我的目标是使用扩展程序对文件进行语法突出显示,*.tt到目前为止,每次都是令人沮丧的"不".
我找到了这个vim-perl插件.使用遗留方法'make install'安装,没有任何反应.尝试使用病原体.
我正在尝试启用语法突出显示的文件有扩展名*.tt,我注意到vim-perl有tt2.vim文件.
我不是VIM的专家,但我很确定我已正确安装它.假设这么多,应该改变任何一个名为VIM,Perl的文件tt2.*来tt.*工作(我已经试过了,事实并非如此)?
是什么赋予了?
vim syntax-highlighting template-toolkit vim-plugin vim-syntax-highlighting
我有一个数组,我传递给TT文件,用于填充导航栏.
我正在使用主模板作为主体内容的基础和子模板.
我想知道是否可以声明'主模板应该总是接收这个数组',而不是每次加载视图时都必须传递这个数组(哦,是的,我正在使用Dancer btw:P),ex :
get '/' => sub {
template 'index', { for_all_i_know => $this_never_changes }
}
get '/about' => sub {
template 'about', { for_all_i_know => $this_never_changes }
}
Run Code Online (Sandbox Code Playgroud)
而不是那样做,有没有办法清理它?就像是:
bind template 'main' { for_all_i_know => $this_never_changes };
Run Code Online (Sandbox Code Playgroud)
那样我就可以这样做:
get '/' => sub {
template 'index';
}
Run Code Online (Sandbox Code Playgroud)
并且主模板仍会加载变量'for_all_i_know'
我的文件foo.tt我想写这样的东西:
[% INCLUDE header('str', 1, 2, 3, 5, 10) %]
Run Code Online (Sandbox Code Playgroud)
我的目标是做一些字符串操作海峡,然后用的foreach/用于遍历各地的数字.
不幸的是,我无法发现模板工具包中的这种语法是允许的.
什么是模板工具包为什么将参数传递给子例程?
有什么想法怎么做?
我正在尝试使用Template Toolkit打印递归数据结构.如何在模板文件中对此进行描述?
我有一个数据结构(哈希数组)与这样的一些元素
ELEMENT
-> Description: XYXY
-> Childs: [Array of Child ELEMENTS of same type]
Run Code Online (Sandbox Code Playgroud)
子项可以包含一系列子元素.我现在想要递归地打印所有内容,包括子元素和子元素等等.
我怎样才能做到这一点?
我想使用模板工具包直接访问数组元素。
例如我们可以很容易地做到这一点,
[% FOREACH item IN array %]
[% item %]
[% END %]
Run Code Online (Sandbox Code Playgroud)
我可以在不使用任何循环的情况下直接访问 0th 、 1st 、 2nd 等元素吗?
例如
`[% array[0] %]`
Run Code Online (Sandbox Code Playgroud) template-toolkit ×10
perl ×8
catalyst ×2
arrays ×1
dancer ×1
date ×1
datetime ×1
dbix-class ×1
loops ×1
mysql ×1
postgresql ×1
vim ×1
vim-plugin ×1