|
|
|
| Всем привет кого не видел)
Я по оптимизации кода, сам думал не додумал.
$count = 520;
$permargin = 7;
$total = ceil($count / $perpage);
$page = ($page < 1) ? $page : 1;
$start = $page;
$end = $page;
if ($page - 6 > 0 && (($page - 6 >= $total) || ($total - $page == 0))) $start -= 1;
if ($page - 5 > 0 && (($page - 5 >= $total) || ($total - $page <= 1))) $start -= 1;
if ($page - 4 > 0 && (($page - 4 >= $total) || ($total - $page <= 2))) $start -= 1;
if ($page - 3 > 0) $start -= 1;
if ($page - 2 > 0) $start -= 1;
if ($page - 1 > 0) $start -= 1;
if ($page + 1 <= $total) $end += 1;
if ($page + 2 <= $total) $end += 1;
if ($page + 3 <= $total) $end += 1;
if ($page + 4 <= $total && $page + 4 <= $permargin) $end += 1;
if ($page + 5 <= $total && $page + 5 <= $permargin) $end += 1;
if ($page + 6 <= $total && $page + 6 <= $permargin) $end += 1;
for ($i = $start; $i <= $end; $i++) {
if ($i == $page) echo '[$i]';
else echo $i;
}
|
Результат
[1] 2 3 4 5 6 7
1 2 3 [4] 5 6 7
7 8 9 [10] 11 12 13
7 8 9 10 11 [12] 13
7 8 9 10 11 12 [13]
Вопрос, как более оптимизировать ифы, одной или двумя строками? | |
|
|
|
|
|
|
|
для: школьник
(24.12.2008 в 11:20)
| |
$start = max(1, $page-($permargin-1));
$end = min($total, $page+($permargin-1));
|
все if убрать. | |
|
|
|
|
|
|
|
для: Trianon
(24.12.2008 в 12:34)
| | Спасибо, очень красиво получилось, но есть потеря и вот какая
[1] 2 3 4
1 [2] 3 4 5
1 2 [3] 4 5 6
1 2 3 [4] 5 6 7
...
12 13 14 [15] 16 17
13 14 15 [16] 17
14 15 16 [17]
В таком варианте у нас отступы цифр не более $margin, а $margin в моем варианте это количество страниц
[1] 2 3 4 5 6 7
1 [2] 3 4 5 6 7
1 2 [3] 4 5 6 7
1 2 3 [4] 5 6 7
...
11 12 13 14 [15] 16 17
11 12 13 14 15 [16] 17
11 12 13 14 15 16 [17]
Вот как теперь быть с новыми строками кода, чтобы получить то что надо? | |
|
|
|
|
|
|
|
для: школьник
(24.12.2008 в 13:33)
| | А вот и у самого что-то вышло.
// шапка та же
if ($page < $margin) {
$margin_start = $margin + ($margin - $page);
} else if (($total - $page) < $margin) {
$margin_start = $margin + (($margin - 1) - ($total - $page));
} else {
$margin_start = $margin;
$start = max(1, $page-($margin_start-1));
$end = min($total, $page+($margin_end-1));
|
| |
|
|
|