Hello, can you advise or may already have a script ready for dividing site content into pages?
- It is not clear what is meant by "the division of site content into pages." Maybe you are interested in "page navigation"? - DemoS
- Yes, I know that I’m lame, but I’m not from Russia ... Yes, paginated navigation is simple, I didn’t know that it was called that! - vlad_xd
|
2 answers
Look at these links:
In general, you can see hundreds of examples on the Internet. Type in the search for "pagination" or "pagination".
- If you are satisfied with the answer, then click the button “Accept the answer” :) - DemoS
|
<? /* * допустим нам нужна пагинация для news(тобишь новостей) * надо вводить какойто параметр чтобы можно было * как-то определить какая страница нужна и строить ссылки * соответственно. Пуска этим параметром будет $_GET['page'] * Накидаю процедурно, если у вы на ООП пишите * Перенесете сами без проблем */ function getFirstPage() { //подключаемся к бд... $res = mysql_query('SELECT * FROM news ORDER BY date DESC LIMIT 10'); $news = array(); //массив для новостей while($row = mysql_fetch_assoc($res)) { $news[] = $row; //ложим новости } $links = getPaginationLinks(); $result = array('news'=>$news, 'links'=>$links); return $result; } function getNews() { if($_GET['page'] && $_GET['page'] >= 1) { //сразу проверим не равен ли page 1е if($_GET['page'] == 1) { return getFirstPage(); } else { $limit = ($_GET['page']*10-10) . ', 10'; $res = mysql_query('SELECT * FROM news ORDER BY date DESC LIMIT ' . $limit); $news = array(); while($row = mysql_fetch_assoc($res)) { $news[] = $row; } // проверим, а есть ли новости на этой странице... if(empty($news)) { die(); //die я написал для примера, вообще тут обычно делается 404.... } $links = getPaginationLinks(); //получаем данные для наших ссылок // пакуем все в единый массив.... $result = array('news'=>$news, 'links'=>$links); // в итоге на выходе данные для новостей на этой странице // и ссылки соответственно return $result; } } else { //допустим нету $_GET['page'] параметра, тогда будем отдавать первую страницу... return getFirstPage(); } } function getPaginationLinks() { //для начала посчитаем количество всех новостей... $res = mysql_query('SELECT COUNT(*) AS count FROM news'); $count = mysql_fetch_assoc($res); $count = $count['count']; // начнем уже формировать необходимые данные... $links = array(); // допустим что у нас всего 10 ссылок в каждой группе // т.е. например у нас ссылки 1,2,3,4,5,6,7,8,9,10 - первая группа // а 11,12,13,14,15,16,17,18,19,20 - вторая и т.д. // определим текущую группу... $group = floor($_GET['page'] / 10); //floor округляет до меньшего целого // убедимся в том что мы будем формировать рабочие ссылки... if($group*10+10 <= $count) { $max = $group*10+10; } else { // если же новостей меньше чем $group*10+10, то вычислим последнюю ссылку $max = floor($count / 10); } // наконецто заполняем массив данными... for($i=$group*10; $i<=$max; $i++) { $links[] = $i + 1; } return $links; //возвращаем... } ?> Сами видите как много кода, так само много в нем может быть косяков т.к. писал я его прямо на сайте и естественно не тестил, но алгоритм здесь четко прослеживается... Раз уже так много написал, хотел бы еще написать каким образом выделяется текущая ссылка, например в нашем случае в пагинации... Cредствами JS, например: <!--Допустим что у нас все ссылки пагинации имеют класс paginationLinks...--> <script type="text/javascript"> onload = function() { getCurrentPaginationLink(); } function getCurrentLink() { links = document.getElementsByClassName("paginationLinks"); for(var i=0; i<links.length; i++) { //в свойстве document.location.href лежит текущий url страницы //достаточно просто определить какая именно это ссылка .... if(links[i] == document.location.href) { //теперь сдесь мы можем определить какой-то особенный стиль //для текущей ссылки, длят прмимера просто зальем ее красным... links[i].style.backgroundColor = "red"; return; } } } </script>
Get acquainted :)
|