我有一个包含7列的表格。其中一个包含密码(pw)。
我不想在我的网站上显示密码:我想要某种"点击展开"在表格中显示它。
以下是包含该表的脚本的一部分:
...
push @certlist, {
state => $cert[0],
'expire' => $date,
'subject' => $cert[5],
'cn' => $cn,
'ip' => $ccd_ips->{$cn},
'dl' => '',
're' => '',
'pw' => $password->{$cn}
};
...
return $q->table(
{ 'class' => 'certs' },
$q->Tr(
[
$q->th(
[ 'Status', 'Common Name', 'D', 'Password',
'Date', 'Subject', 'IP-Adress', 'R'
]
) . "\n",
map {
$q->td( { 'class' => $_->{'state'} }, $states{ $_->{'state'} } ) .
$q->td( [ @$_{qw(cn dl pw expire subject ip re)} ] ) . "\n"
} @certlist
]
)
) . "\n";
...
答案 0 :(得分:3)
您应该只为包含密码的元素添加一个类,例如password-container
。将初始内容设置为屏蔽。
那是:
push @certlist, {
state => $cert[0],
'expire' => $date,
'subject' => $cert[5],
'cn' => $cn,
'ip' => $ccd_ips->{$cn},
'dl' => '',
're' => '',
'pw' => '*' x 8,
};
在页面中添加一些JavaScript,为处理切换的onclick
类的所有元素添加password-container
处理程序。
return $q->table(
{ 'class' => 'certs' },
$q->Tr(
[
$q->th(
[ 'Status', 'Common Name', 'D', 'Password',
'Date', 'Subject', 'IP-Adress', 'R'
]
) . "\n",
map {
$q->td( { 'class' => $_->{'state'} }, $states{ $_->{'state'} } ) .
$q->td( [ @$_{qw(cn dl)} ]) .
$q->td( { 'class' => 'password_container' }, $_->{pw} ) .
$q->td( [ @$_{qw(expire subject ip re)} ] ) . "\n"
} @certlist
]
)
) . "\n";
或一些类似的垃圾。
这再一次显示了使用CGI.pm生成HTML的价值。而是使用模板。这是对未来的建议,我假设您无法修复现有的代码库。
BTW,这是CGI.pm documentation的相关位:
不再维护
CGI.pm
中的所有HTML生成功能。任何问题,错误或补丁都将被拒绝,除非它们与基本破坏的页面呈现有关。这个的基本原理是
CGI.pm
的HTML生成函数充其量是混淆,最糟糕的是维护噩梦。您应该使用模板引擎来更好地分离关注点。有关将CGI::Alternatives
与CGI.pm
模块一起使用的示例,请参阅Template::Toolkit
。这些函数及其perldoc被认为已弃用,不再维护它们,也不会接受它们的修复或功能。但是,它们将继续存在于CGI.pm中而没有任何弃用警告("软"弃用),因此如果您真的想要,可以继续使用它们。这些功能的所有文档都已移至
CGI::HTML::Functions
。