2015-03-13 7 views
0

Я пытаюсь создать группу флажков в Perl с субтитрами, разделяющими определенные флажки. Все флажки связаны, но они находятся в подкатегориях, которые я хотел бы отображать, когда пользователь выбирает их выбор.Perl checkbox group subgroupings

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

В приведенном выше примере, я мог бы иметь «Молоко» и «сыр» быть под подкатегории «МОЛОЧНОЙ», в то время как «Ham» и 'Турции находятся под подкатегории «МЯСА». У меня уже есть группа флажков с моими значениями, но я изо всех сил пытаюсь создать эти названия подкатегорий (МОЛОЧКА и МЯСЫ) между подгруппами флажков. В идеале заголовки подкатегорий не были бы флажками, а просто делят флажки. Можно ли поместить эти подразделения в один флажок, или мне нужно будет сделать несколько флажков и объединить отмеченные элементы в один массив позже?

+0

Я мало знаю о Perl, но какой инструментарий или библиотека вы используете для отображения этих флажков? Вероятно, это очень важно для этого вопроса. –

+0

А ты очень прав! Я тоже начинаю изучать Perl, и это одно из моих первых заданий для работы. Я создаю группу флажков CGI. http://perldoc.perl.org/CGI.html#CREATING-A-GROUP-OF-RELATED-CHECKBOXES Это ссылка, с которой я шел, но она не помогает вообще с подгруппы. Надеюсь, это ответит на ваш вопрос. –

+1

В MetaCPAN есть более новая версия этого документа - https://metacpan.org/pod/CGI. В частности, вы должны прочитать раздел «Функции генерации HTML больше не должны использоваться». –

ответ

1

Обратите внимание, что CGI больше не считается лучшей практикой. Вы должны прочитать CGI::Alternatives для объяснения, а также предложения для альтернативных модулей.

Вам нужны элементы fieldset и legend, чтобы сделать то, что вы описали. Без какого-либо дополнительного 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; 
+0

Потому что мне нужны были только разделители для 5 разных групп, и группы были не такими уж длинными, мне было проще всего просто написать код HTML для отдельных групп и реализовать эти флажки. Спасибо за помощь! –

Смежные вопросы