我正在使用模块HTML::Template
来创建这样的格式化表格(使用数组@rows
):
my $tmpl = HTML::Template->new(filehandle => \*DATA);
$tmpl->param(ROWS => \@rows);
print $tmpl->output;
__DATA__
<table border="1">
<TMPL_LOOP ROWS>
<tr>
<TMPL_LOOP CELLS>
<td><TMPL_VAR CELL></td>
</TMPL_LOOP>
</tr>
</TMPL_LOOP>
</table>
但是我现在想要创建表的某些元素的超链接。地址元素
链接取决于该单元格的文本以及表格的列。
示例:
如果某行包含元素Home, Office, Travel, Play
我希望它们与www.mywebsite.com/Home
,www.mywebsite2.com/Office
和www.mywebsite3.com/Play
相关联,并且没有Travel
的超链接。
如何在HTML :: Template创建表中创建此类超链接?
答案 0 :(得分:4)
修改:根据问题作者的更新问题和评论重写使用Template::Toolkit的答案。
# Your app sets up whatever data structure it wants to pass to the tempalte, for example,
my @rows = [
[ # cells in row #1
{ url => 'www.mywebsite.com/Home', label => 'Home' },
{ url => 'www.mywebsite2.com/Office', label => 'Office' },
],
[ # cells in row #2
{ url => 'www.mywebsite3.com/Play', label => 'Play' },
{ label => 'Travel' },
],
];
# No need to print, prints to STDOUT automatically by default
my $tmpl = Template->new;
$tmpl->process(\*DATA, { rows => \@rows })
|| die $tmpl->error();
__DATA__
<table border="1">
[% FOR row IN rows %]
<tr>
[% FOR cell IN row %]
<td>
[% IF cell.url %]
<a href="http://[% cell.url | url %]">[% cell.label | html %]</a>
[% ELSE %]
[% cell.label | html %]
[% END %]
</td>
[% END %]
</tr>
[% END %]
</table>
Template :: Toolkit具有许多与Perl相同的功能(如果启用Perl块,实际上完全相同,但我不建议这样做。)
在每个[% %]
内部放入一个指令。如果没有指令并且没有使用=
执行任务,则将该块视为变量查找,并将传递到模板中的值插入到文本中。在进行变量查找时,您可以使用句点来查找整个复杂数据结构。例如,
[% rows.0.0.label %]
在上面的示例中插入,将输出“Home”。
上面显示的| url
和| html
符号添加了清理输出的过滤器,以确保[% %]
块中的值作为正确的URL或HTML输出(通常避免使用XSS和其他输出格式错误)。
模板工具包对于它如何在某些时候做事情有点模糊和不精确,甚至不如Perl严格,所以你有时需要小心一点。它也可能是一个性能问题,特别是如果你在你的应用程序中多次调用process()
(在另一个中嵌入模板往往会快得多)。但是,它在大多数模板问题上都做得相当不错,如果您需要与网页设计师合作,界面也不会太可怕。
如果您使用Template :: Toolkit,我强烈建议您阅读the tutorial以了解它。
原始答案:
Lone Shepherd的评论就是答案:
我正在使用模块HTML::Template
来创建这样的格式化表格(使用数组@rows
):
my $tmpl = HTML::Template->new(filehandle => \*DATA);
$tmpl->param(ROWS => \@rows);
print $tmpl->output;
__DATA__
<table border="1">
<TMPL_LOOP ROWS>
<tr>
<TMPL_LOOP CELLS>
<td><a href="http://www.mywebsite.com/<TMPL_VAR CELL ESCAPE=HTML>"><TMPL_VAR CELL ESCAPE=HTML></a></td>
</TMPL_LOOP>
</tr>
</TMPL_LOOP>
</table>
只需为您的超链接添加HTML即可。根据{{3}}的文档,您可以将<TMPL_VAR ...>
位放在属性中。
作为旁注,添加ESCAPE=HTML
也是一个好主意,除非您确定已经清理了输出(阻止了Web应用程序中HTML::Template之类的内容)。