用于控制$ cgi-> radio group()中字体的Perl CGI语法

时间:2014-02-06 20:49:28

标签: perl cgi radio-group

谷歌搜索后我找不到很多例子,我的试验不能控制单选按钮文本的字体/类。

 $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"

所以这显然什么也没做。

非常感谢您的帮助!

2 个答案:

答案 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>