Perl 复选框组子分组

Perl checkbox group subgroupings

我正在尝试在 Perl 中创建一个复选框组 sub-titles 划分某些复选框。所有复选框都是相关的,但它们位于我希望在用户选择时显示的子类别中。

my $grocery_list = $q->checkbox_group(
-name=>'grocery_list',
-values=>\@items,
-linebreak=>'true',
-labels=>\%items,

在上面的例子中,我可能让 'Milk' 和 'Cheese' 在 "DAIRY" 的子类别下,而 'Ham' 和 'Turkey' 在 "DAIRY" 的子类别下"MEATS" 的子类别。我已经有了一个包含我的值的复选框组,但我正在努力在复选框的子组之间创建那些子类别标题(DAIRY 和 MEATS)。理想情况下,子类别标题不会是复选框,而只是划分复选框。是否可以将这些细分放在一个复选框中,或者我是否必须制作多个复选框,然后将选中的项目合并到一个数组中?

请注意,CGI 不再被视为最佳实践。您应该阅读 CGI::Alternatives 以获得解释以及对替代模块的建议。

您需要 fieldsetlegend 元素来执行您描述的操作。在没有任何额外的 CSS 的情况下,前者在它包含的输入组周围绘制一个框,而后者则标记该框。

不幸的是,checkbox_group 便捷方法不允许您在两个字段集之间细分其元素,因此您必须使用除值和标签之外的相同参数调用它两次。最好编写自己的辅助例程,直接调用 checkbox 以构建适当的分组。

基本思路如下。 CGI 方法没有什么神奇的——它们只是根据您传递的参数生成 HTML。

my %labels = (
  milk   => 'Milk',
  cheese => 'Cheese',
  ham    => 'Ham',
  turkey => 'Turkey',
);

my @dairy_items = qw/ milk cheese /;
my @meat_items  = qw/ ham turkey /;

my $dairy = $q->checkbox_group(
  -name      => 'grocery_list',
  -values    => \@dairy_items,
  -linebreak => 'true',
  -labels    => \%labels,
);

my $meat = $q->checkbox_group(
  -name      => 'grocery_list',
  -values    => \@meat_items,
  -linebreak => 'true',
  -labels    => \%labels,
);

print
  $q->start_form,
    $q->fieldset(
      $q->legend('Dairy'),
      $dairy,
    ),
    $q->fieldset(
      $q->legend('Meat'),
      $meat,
    ),
  $q->end_form;