% if ( $error ) {
<% $error %>
% } else {
% foreach my $id ( @values ) {
% if ( ref $id eq 'ARRAY' && scalar @$id == 2 ) {
% my $checked = exists $ids{$id->[0]} ? ' checked' : '';
{readonly} ? 'readonly ' : '' %>type="checkbox" name="<% $name %>_<% $id->[0] %>" value="<% $value %>" <% $checked %>><% $id->[1] %>
% } else {
% my $checked = exists $ids{$id} ? ' checked' : '';
{readonly} ? 'readonly ' : '' %>type="checkbox" name="<% $name %>_<% $id %>" value="<% $value %>" <% $checked %>><% $id %>
% }
% }
% }
<%args>
$object
$name => undef
$value => 1
$check => undef
$prop => {}
%args>
<%init>
my ($objects, $error);
# Если оно хранится в поле типа integer[] то нам вернется массив, если в data, то ссылка на массив.
# Просекаем фишку
my @ids = ref($object->$name) eq 'ARRAY' ? @{ $object->$name } : $object->$name;
my %ids = map { $_ => 1 } @ids;
my @values;
if ( $prop && ref $prop ) {
if ( exists $prop->{lookup_opts} && ref $prop->{lookup_opts} eq 'HASH' ) {
@values = $keeper->get_documents (
%{$prop->{lookup_opts}},
names => 1,
);
} elsif ( exists $prop->{values} && ref $prop->{values} eq 'ARRAY' ) {
@values = @{ $prop->{values} };
} elsif ( exists $prop->{cases} && ref $prop->{cases} eq 'ARRAY' ) {
@values = @{ $prop->{cases} };
}
} else {
$error = 'Похоже неверное описание lookup_opts в документе';
}
$error = 'Не определен набор значений для поля' unless @values;
%init>