Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная навигация (Pagenation) Again...
 
 автор: школьник   (24.12.2008 в 11:20)   письмо автору
 
 

Всем привет кого не видел)

Я по оптимизации кода, сам думал не додумал.


    $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]

Вопрос, как более оптимизировать ифы, одной или двумя строками?

  Ответить  
 
 автор: Trianon   (24.12.2008 в 12:34)   письмо автору
 
   для: школьник   (24.12.2008 в 11:20)
 

$start = max(1, $page-($permargin-1));
$end = min($total, $page+($permargin-1));

все if убрать.

  Ответить  
 
 автор: школьник   (24.12.2008 в 13:33)   письмо автору
 
   для: 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 в 14: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));

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования