AlexVW
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вот полное решение этой задачи (приснилось на выходные): my $start_pos = param ("start_pos"); //текущая страница для просмотра my $page_size = 10; //количество данных на странице my $max_rec = param ("max_rec"); //всего записей в базе, как подсчитать сообразите, если не указано (при первом запуске) - значит надо подсчитать my @nav_link; //массив навигационных связей my $start_nav; //первая страница навигации my $end_nav; //последняя страница навигации, т.е. на экран выводятся не все 154 ссылки на страницы, а только 10 (или сколько хотите), вот первая и последняя это и есть начало и конец этого блока ссылок if (!defined (param ("start_pos"))) { $start_pos = 0; $max_rec = 0; //подсчитываем количество записей в базе ($max_rec) } if ($max_rec > $page_size) //если страниц больше одной { $start_nav = $start_pos - 5*$page_size; //подсчитываем первую страницу блока ссылок (5 - это 10/2, т.е. если всего видимых ссылок у вас будет 10) if ($start_nav < 0) { //если первая страница левее нуля сдвигаем последнюю в право на это количество $end_nav = $start_pos + 5*$page_size + abs($start_nav); $start_nav = 0; } else { // или высчитываем последнюю страницу без понтов $end_nav = $start_pos + 5*$page_size; } if ($end_nav > $max_rec) { //если последняя страница больше количества записей всего $end_nav = $max_rec; } if ($start_pos == 0) //если находимся на первой странице - значит предыдущих нет { #push (@nav_link, "prev."); //выталкиваем в массив навигации неактивную ссылку на предыдущую страницу (у меня она не печатается) } else //если находимся не на первой стр. { my $prev = $start_pos-$page_size; //вычисляем ссылку на предыдущую страницу push (@nav_link, " [<a href=?start_pos=$prev&max_rec=$max_rec"); //пихаем в навигацию ссылку на предыдущую страницу // здесь можите напихать туда свои параметры push (@nav_link, ">prev.</a>]"); //закрываем ссылку } // дальше рисуем ссылку на предыдущие 10 страниц if ($start_pos <= (5*$page_size)) { #push (@nav_link, " prev.10"); } else { my $prev_nav = $start_nav - $page_size; push (@nav_link, " [<a href=?start_pos=$prev_nav&max_rec=$max_rec"); } push (@nav_link, ">prev.10</a>]"); } // рисуем ссылки на страницы for (my $i = $start_nav; $i < $end_nav; $i += $page_size) { my $page_no = int ($i/$page_size) + 1; if ($start_pos == $i) { push (@nav_link, " ".$page_no." "); } else { my $pag = $page_no*$page_size; push (@nav_link, " [<a href=?start_pos=$i&max_rec=$max_rec"); push (@nav_link, ">$page_no</a>]"); } } // ссылка на следующие 10 страниц if (($start_pos+5*$page_size) >= $max_rec) { #push (@nav_link, " next"); } else { my $next_nav = $end_nav; push (@nav_link, " [<a href=?start_pos=$next_nav&max_rec=$max_rec"); push (@nav_link, ">next 10</a>]"); } // ссылка на следующую страницу if ($start_pos+$page_size > $max_rec) { push (@nav_link, " next"); } else { my $next = $start_pos+$page_size; push (@nav_link, " [<a href=?start_pos=$next&max_rec=$max_rec"); push (@nav_link, ">next</a>]"); } // заканчиваем и печатаем всю эту лабуду @nav_link=join("",@nav_link); print "<center>@nav_link</center>\n"; } Этот код 100% работает (стоит у меня на сайте) Если где то допустил ошибку - зазвиняйте, у меня в ссылки передаются куча параметров, я их убирал и мог где то промазать. Последний вопрос - нафига я это так все ПОДРОБНО описываю? Для тех кому это на самом деле надо! И кого коцают умные предложения читать мануал! Кто либо, когда либо что то понял в перлдок по модулям сторонних разработчиков? Отдельное спасибо за помощь Корепанов Иван |