Документы\ % if ( ref $link_class eq 'ARRAY' ) { разрешенных классов % } elsif ( $link_class ) { класс <% $link_class %>\ % if ($use_section) { c учетом текущей секции\ % } % } else { в разделе\ % } % if ($total > 0) { (всего: <% $total %>, показано с <% $first + 1 %> по <% ($first + $n > $total) ? $total : $first + $n %>) % } % if ( ref $link_class eq 'ARRAY' && @$link_class ) {
Разрешены классы:
% if ( scalar @desired_class == 1 ) { <% $desired_class[0] %> % } else { % my $i = 0; % foreach my $dclass ( @desired_class ) { % $m->out (', ') if $i++; % if ( $restrict_class eq $dclass ) { <% $desired_class[0] %> % } else { <% $dclass %> % } % } % }
% } % if ( $total or defined $alpha or defined $search ) {
Поиск по букве:  [сброс фильтра]
<& /inc/alpha.msn, alpha=>$alpha, params=>\%ARGS, &>
% ## Форма поиска. Работает при включенном фильтре класса % ## и описанной для класса функции search_fields % ######################################################## % if ( $filter{class} && (!ref $filter{class} || ( ref $filter{class} eq 'ARRAY' && scalar @{ $filter{class} } == 1 ) ) ) { % my $search_class = ref $filter{class} eq 'ARRAY' ? $filter{class}->[0] : $filter{class}; % my $document = $search_class->new ($keeper); % my @fields = $document->search_fields; % if ( @fields ) { % my @props = $document->required_properties;
Поиск по полю:  [сброс фильтра]
:
% if ( $id ) { % } % if ( $class ) { % } % if ( $use_section ) { % }
% } % }
<& /inc/pages_.msn, p=>$p, n=>$n, total=>$total, params=>\%ARGS, &>
% % foreach (@columns) { % % % } % % % foreach my $document (@documents) { % % next unless ref($document); % my $document_access = $user->section_accesses($user, $document->section); % % % for my $col (@columns) { % % if ($col->{attr} eq '_sort_') { % % % } #- for @columns % % } #- foreach @documents
<% $_->{rusname} %>
<% $document->{sorder} %> Переместить документ на шаг вверх Переместить документ на шаг вниз\ % % } elsif ($col->{attr} eq 'dtime') { % <& "/contenido/components/show_dtime.msn", dtime=>$document->{dtime} &>\ % % if ($document->{ctime} ne $document->{mtime}) { % % my $colortime = '#c66'; %
<& "/contenido/components/show_dtime.msn", dtime=>$document->{mtime} &>
\ % % } % % } elsif ($col->{attr} eq 'name') { %
\ % % my $name=$document->name ? $document->name : 'Безымянный документ N'.$document->id; % $name =~ s/'/\\'/g; % $name =~ s/"/"/g; % if ($document_access == 2) { % <% $name %> \ % % } else { % <% $name %> \ % % } % \ % % } elsif ($col->{attr} eq 'id') { % \ % % if ($document_access == 2) { % <% $document->id %> \ % % } else { % <% $document->id %> \ % % } % \ % % } elsif ($col->{attr} eq 'class') { % <% $document->class_name %> (<% $document->class %>)\ % % } elsif ($col->{type} eq 'datetime') { % <& "/contenido/components/show_dtime.msn", dtime=>$document->{$col->{attr}} &>\ % % } elsif ($col->{attr} eq '_act_') { % \ % if ($document_access == 2) { % my $name=$document->name ? $document->name : 'Безымянный документ N'.$document->id; % $name =~ s/'/\\'/g; % $name =~ s/"/"/g; % связать\ % % } else {  \ % } % % } else { % % if ($col->{type} eq 'date') { % my $date=$document->{$col->{attr}}; % $date=~/(\d{4}-\d{2}-\d{2})/; <% $1 || ' ' %>\ % } elsif ($col->{type} eq 'datetime') { <% $document->{$col->{attr}} || ' ' %>\ % } elsif ($col->{type} eq 'integer') { <% $document->{$col->{attr}} %> \ % } elsif ($col->{type} eq 'lookup') { \ % my $id = $document->{$col->{attr}}; % if ($id) { % my ($doc)=$keeper->get_documents( ( ref($col->{lookup_opts}) ? %{$col->{lookup_opts}} : () ), id=>$id); % if ($doc) { <% $doc->name || $doc->id %> \ % } else { <% $document->{$col->{attr}} %>???\ % } % } else { NULL\ % } % } elsif ($col->{type} eq 'status') { % my $status_map = ref $col->{cases} eq 'ARRAY' ? $col->{cases} : $keeper->default_status(); % my ($doc_status) = grep { $_->[0] == $document->{$col->{attr}} } @$status_map; % $doc_status ||= [$document->{$col->{attr}}, 'Неизвестный']; <% $doc_status->[1].'('.$doc_status->[0].')' %>\ % } else { <% defined($document->{$col->{attr}}) ? $document->{$col->{attr}} : ' ' %>\ % } % } %
<& /inc/pages_.msn, p=>$p, n=>$n, total=>$total, params=>\%ARGS, &>
% } else {

---- Нет документов -----

% } %
<%args> $id => 1 $p => 1 $class => undef $source_class => undef $dest_class => undef $use_section => undef $alpha => undef $alpha_search => undef $search_by => undef $search => undef $restrict_class => undef <%init> my @desired_class = @{ $source_class || $dest_class }; my $link_class = []; @$link_class = map { $_ } @desired_class; if ( ref $link_class eq 'ARRAY' && scalar @$link_class > 1 && $restrict_class ) { @$link_class = grep { $_ eq $restrict_class } @$link_class; } my $owner; # Операции... if ($id && ($id > 0)) { $owner = $keeper->get_section_by_id($id); } if (! ref($owner)) { return undef; } # Фильтры работают в любом случае... my $filter = $m->comp('/contenido/components/context.msn', name => 'filter'); my $profile = $m->comp('/contenido/components/context.msn', name => 'profile'); unless (defined $request->{section_accesses}->{$id}) { $request->{section_accesses}->{$id} = $user->get_section_access($id); } my $section_access = $request->{section_accesses}->{$id}; my (@documents, $total); my $s = $owner->id; my $sorted = $owner->_sorted(); $s .= ",$filter" if ($filter > 0); my %filter=(); my %order = (not $link_class and $owner->order_by) ? (order_by => $owner->order_by) : (order => ['date','direct']); if ($alpha) { $filter{ilike}=1; $filter{ $alpha_search || 'name' }="$alpha%"; $order{order}=['name','reverse']; delete $order{order_by}; } $filter{class} = $owner->default_document_class if $owner->default_document_class; $filter{class}=$link_class if ($link_class || (ref $link_class eq 'ARRAY' && @$link_class) ); $filter{s}=$s unless ($link_class && !$use_section); if ( $search_by && $search ) { $filter{$search_by}='%'.$search.'%'; $filter{ilike} = 1; } $total = $keeper->get_documents(%filter, count=>1); my $n = 40; my $first = $n * ($p - 1); ($first,$p)=(0,0) if ($first>$total); if ($link_class && !$use_section) { @documents = $keeper->get_documents(%filter, %order, limit=>$n, offset=>$first, light=>1); } elsif ($sorted) { @documents = $keeper->get_sorted_documents(%filter, limit=>$n, offset=>$first, light=>1); } else { @documents = $keeper->get_documents(%filter, %order, limit=>$n, offset=>$first, light=>1); } # набор колонок таблицы документов... my @columns; #работаем по 1 полученному документу (если таковой есть в наличии) if (@documents and (ref $documents[0])) { @columns = $sorted ? ({attr => '_sort_', name => 'N'}) : (); # пытаемся найти колонки, которые документ сам пожелал показать (required_properties -> column)... push @columns, sort {$a->{column} <=> $b->{column}} grep {$_->{column}} $documents[0]->structure; # стандартная жопка таблицы... @columns = (@columns, {attr => '_act_', rusname => 'Действия'}, ); }