Revision 118
Date:
2011/08/22 12:04:27
Author:
ahitrov
Revision Log:
"Uncountable documents" option in Section.pm
Files:
Legend:
Added
Removed
Modified
utf8/core/comps/contenido/sections.html
69
69
% } else {
70
70
в разделе\
71
71
% }
72
% if ($total > 0) {
72
% if (!$owner->no_count && $total > 0) {
73
73
(всего: <% $total %>, показано с <% $first + 1 %> по <% ($first + $n > $total) ? $total : $first + $n %>)
74
% } elsif ( $owner->no_count ) {
75
(<span style="color:yellow">без пересчета</span>, показано с <% $first + 1 %> по <% $first + scalar @documents %>)
74
76
% }
75
77
</legend>
76
78
77
% if ($total or defined($alpha) or defined($search) ) {
79
% if ($total || scalar @documents || defined($alpha) || defined($search) ) {
78
80
% if ($section_access == 2) {
79
81
<& "/contenido/components/new_objects_form.msn", proto => 'documents',
80
82
sect_id => $owner->id,
…
…
121
123
% }
122
124
123
125
<div style="height:5px"><spacer type="block" height="5"></div>
126
% if ( $owner->no_count ) {
127
<& /inc/pages_nocount.msn, p=>$p, n=>$n, found=> scalar @documents, href=>'sections.html', params=>\%ARGS, size => 15 &>
128
% } else {
124
129
<& /inc/pages_.msn, p=>$p, n=>$n, total=>$total, href=>'sections.html', params=>\%ARGS, &>
130
% }
125
131
</div>
126
132
127
133
<& /contenido/components/section_browse.msn, documents => \@documents, columns => \@columns, section => $owner, filter => \%filter_params, %ARGS &>
128
134
129
135
<div style="font-size:12px; font-family:Arial;">
136
% if ( $owner->no_count ) {
137
<& /inc/pages_nocount.msn, p=>$p, n=>$n, found=> scalar @documents, href=>'sections.html', params=>\%ARGS, size => 15 &>
138
% } else {
130
139
<& /inc/pages_.msn, p=>$p, n=>$n, total=>$total, href=>'sections.html', params=>\%ARGS, &>
140
% }
131
141
<div style="height:5px"><spacer type="block" height="5"></div>
132
142
</div>
133
143
…
…
326
336
}
327
337
}
328
338
329
$total = $keeper->get_documents(%filter, count=>1);
339
$total = $keeper->get_documents(%filter, count=>1) unless $owner->no_count;
330
340
331
341
my $n = 40;
332
342
my $first = $n * ($p - 1);
333
($first,$p)=(0,0) if ($first>$total);
343
($first,$p)=(0,0) if (!$owner->no_count && $first>$total);
334
344
335
345
if ($class && !$use_section) {
336
346
@documents = $keeper->get_documents(%filter, %order, limit=>$n, offset=>$first);
utf8/core/comps/inc/pages_nocount.msn
1
% if ( @string ) {
2
% $m->out( join($delimiter, @string) );
3
% }
4
<%args>
5
6
$n => 10
7
$p => 1
8
$href => ''
9
$found => undef
10
$size => 8
11
$params => {}
12
$pname => 'p'
13
$delimiter => ' | '
14
15
</%args>
16
<%init>
17
18
$p = 1 if $p > 10000;
19
20
my @string;
21
my @params;
22
while ( my ($key, $value) = each %$params ) {
23
next if $key eq $pname;
24
if ( ref $value eq 'ARRAY' ) {
25
push @params, ( map { "$key=$_" } @$value );
26
} else {
27
push @params, "$key=$value";
28
}
29
}
30
31
my $delim = int( $size / 2 );
32
my ($begin, $end);
33
if ( $found < $n ) {
34
$end = $p;
35
$begin = $p >= $size ? $p - $size + 1 : 1;
36
} elsif ( $p < $delim ) {
37
$begin = 1;
38
$end = $begin + $size - 1;
39
} else {
40
$begin = $p > $delim ? $p - $delim : 1;
41
$end = $begin + $size - 1;
42
}
43
if ( $p > 1 ) {
44
push @string, '<a href="'.$href.'?p='.($p - 1).(@params ? '&'.join('&', @params) : '' ).'">← предыдущая</a>';
45
if ( $begin > 1 ) {
46
$string[-1] .= ' [<a href="'.$href.'?p=1'.(@params ? '&'.join('&', @params) : '' ).'">в начало</a>]';
47
}
48
}
49
for ( $begin..$end ) {
50
my $num = $_;
51
if ( $num == $p ) {
52
push @string, '<b>'.$num.'</b>';
53
} else {
54
push @string, '<a href="'.$href.'?p='.$num.( @params ? '&'.join('&', @params) : '' ).'">'.$num.'</a>';
55
}
56
}
57
if ( defined $found && $found >= $n ) {
58
push @string, '<a href="'.$href.'?p='.($p + 1).( @params ? '&'.join('&', @params) : '' ).'">следующая →</a>';
59
}
60
61
</%init>
utf8/core/lib/Contenido/Section.pm
108
108
'rusname' => 'Сортировка документов',
109
109
},
110
110
{
111
'attr' => 'no_count',
112
'type' => 'checkbox',
113
'rusname' => 'Не пересчитывать документы в разделе админки',
114
},
115
{
111
116
'attr' => 'filters',
112
117
'type' => 'struct',
113
118
'rusname' => 'Дополнительные фильтры выборки',
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.