谷歌搜索后我找不到很多例子,我的试验不能控制单选按钮文本的字体/类。
$cgi->radio_group( { -name => "product-$i", -values => \@p, -labels => \%labs,
-default => $thisP , -labelattributes => { -class => 'element' } } )
产生这个:
input name="product-3" value="1X" labelattributes="HASH(0xa9fd6cc)" type="radio"
这似乎很奇怪,因为我遵循了CGI指南中的语法,但显然这是不正确的。
我也使用-attributes而不是-labelattributes尝试了相同的语句,它产生了这个
$cgi->radio_group( { -name => "product-$i", -values => \@p, -labels => \%labs,
-default => $thisP , -attributes => { -class => 'element' } } )
产生这个:
input name="product-3" value="1X" type="radio"
所以这显然什么也没做。
非常感谢您的帮助!
答案 0 :(得分:3)
其他人已经提供了模板系统的信息,这是首选。关于您的原始问题,您可能正在使用过期版本的CGI
。使用-labelattributes
属性时,您遇到的问题无法在 3.40 之后的版本中复制。
use CGI;
print CGI->VERSION;
答案 1 :(得分:1)
使用像Template Toolkit这样的模板库比使用CGI生成HTML更容易(在可读性和可维护性方面)。以下是TT模板示例:
<html>
<head>
<title>Hello, Template Toolkit!</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<h1>Behold...buttons!</h1>
[% FOREACH button = buttons %]
<label>[% button.label %]<input type="radio" name="[% group_name %]"
value="[% button.value %]" class="foo"/></label>
[% END %]
</body>
</html>
请注意,它主要是普通的HTML。 [%
和%]
内的位是TT指令。您可以在CGI脚本中使用模板,如下所示:
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
use Template;
my @buttons = (
{ value => 1, label => 'foo' },
{ value => 2, label => 'bar' },
);
my $template_vars = {
group_name => 'foo',
buttons => \@buttons,
};
my $q = CGI->new;
print $q->header;
my $tt = Template->new or die Template->error;
$tt->process('foo.tt2', $template_vars) or die $tt->error;
请注意,使用CSS样式表执行元素的可视样式是一种很好的做法。这包括标签字体等内容。
运行上面的CGI时,HTML输出如下所示:
<html>
<head>
<title>Hello, Template Toolkit!</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<h1>Behold...buttons!</h1>
<label>foo<input type="radio" name="foo"
value="1" /></label>
<label>bar<input type="radio" name="foo"
value="2" /></label>
</body>
</html>