[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт постраничного вывода
KestOn
Вот собственно сам скрипт:

<?php
function
yandex_link_bar($page, $count, $pages_count, $show_link)
{
// $show_link - это количество отображаемых ссылок;
// нагляднее будет, когда это число будет парное
// Если страница всего одна, то вообще ничего не выводим

if ($pages_count == 1) return false;
$sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
// Для придания ссылкам стиля

$style = 'style="color: #808000; text-decoration: none;"';
$begin = $page - intval($show_link / 2);
unset($show_dots); // На всякий случай smile.gif
// Сам постраничный вывод
// Если количество отображ. ссылок больше кол. страниц

if ($pages_count <= $show_link + 1) $show_dots = 'no';
// Вывод ссылки на первую страницу
if (($begin > 2) && ($pages_count - $show_link > 2)) {
echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
}
for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
{
$i = $begin + $j; // Номер ссылки
// Если страница рядом с началом, то увеличить цикл для того,
// чтобы количество ссылок было постоянным

if ($i < 1) continue;
// Подобное находится в верхнем цикле
if (!isset($show_dots) && $begin > 1) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
$w=1;
$show_dots = "no";
}
// Номер ссылки перевалил за возможное количество страниц
if ($i > $pages_count) break;
if ($i == $page) {
echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
} else {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
$w=2;
}
// Если номер ссылки не равен кол. страниц и это не последняя ссылка
if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
// Вывод "..." в конце
if (($j == $show_link) && ($i < $pages_count)) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
$w=3;
}
}

// Вывод ссылки на последнюю страницу
if ($begin + $show_link + 1 < $pages_count) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
}
return true;
} // Конец функции

// Подключение к базе данных

mysql_connect('Здесь был сервер', 'Здесь было имя пользователя', 'Здесь был мой пароль') or die('error! Нет соединения с сервером mysql!');
mysql_select_db('Здесь была таблица') or die('error! Нет соединения с базой данных!');

// Подготовка к постраничному выводу
$perpage = 1; // Количество отображаемых данных из БД
if (empty($_get['page']) || ($_get['page'] <= 0)) {



$page = 1;




} else {
$page = (int) $_get['page']; // Считывание текущей страницы
}
// Общее количество информации
$count = mysql_numrows(mysql_query('select * from Здесь было название таблицы')) or die('error! Записей не найдено!');
$pages_count = ceil($count / $perpage); // Количество страниц
// Если номер страницы оказался больше количества страниц

if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
// Вызов функции, для вывода ссылок на экран


yandex_link_bar($page, $count, $pages_count, 10);

// Вывод информации из базы данных
echo '<p><b>Постраничный вывод информации</b></p>';
$result = mysql_query('select * from Здесь было название таблицы limit '.$start_pos.', '.$perpage) or die('error!');
while ($row = mysql_fetch_array($result)) {
echo '<p>'.$row['Здесь было название поля'].'</p>';
}
?>



Там есть переменная $page по умолчанию она равна 1. Почему, когда я ввожу адрес ".....php?page=2" скрипт не меняет ее содержимое, и остается на той же странице, где и был. А по идее он должен переходить по ссылкам 1 2 3 4 ... , меняя содержимое переменной $page. (Когда я прямо в коде ее меняю все работает). Может здесь и есть какая-то ошибка, но я ее не нашел, т.к. недавно начал изучать php, ориентируясь на давние знания С++))



Спустя 32 минуты, 1 секунда (2.01.2010 - 17:00) FatCat написал(а):
Зачем так сложно?
Недавно писал каталог статей, вот мой вариант постраничной навигации по каталогу:
	if( !isset($_GET['page']) )$_GET['page'] = 0;
$to_print = '<div class="pformstrip">Страницы: ';
// Считаем страницы меню навигации:
$DB->query("SELECT COUNT(gid) AS cgid FROM ibf_glossary".$approver);
$nav = $DB->fetch_row();
$nav = intval($nav['cgid']);
$nav = $nav / $links_per_page;
if($nav!=intval($nav))$nav = intval($nav)+1;
// Навигация:
$return = array();
for($i=0;$i<$nav;$i++)
{
if($i==$_GET['page'])$return[] = "<big><b>".($i+1)."</b></big>";
elseif($i==0)$return[] = "<a href='".$board_url."/glossary.php'>1</a>";
else $return[] = "<a href='".$board_url."/glossary.php?page=".$i.'>".($i+1)."</a>";
}
$to_print .= implode(" | ",$return);
$to_print .= '
</div>';

Спустя 4 часа, 16 минут, 9 секунд (2.01.2010 - 21:17) danon написал(а):
У меня проблема тоже с постраничным выводом, помогите, пожалуйста.
Данные выводятся из базы. Дело в том, что если в базе, например, 53 записи и на странице 10, то на последней странице будет выводиться 3 записи с данными и 7 записей с "...", ниже скрипт:


<?php
...подключение к базе...
$num = 10;
$numchar = 300;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM news");
$rgPosts = mysql_fetch_row($result);
$posts=$rgPosts[0];
$total = intval(($posts - 1) / $num) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$result = mysql_query("SELECT * FROM news ORDER BY id_news DESC LIMIT $start, $num") or die (mysql_error());
// В цикле переносим результаты запроса в массив $postrow
while ( $i = mysql_fetch_array($result)) {$postrow[ ]=$i;}
?>

<?php

for($i = 0; $i < $num; $i++)
{
$pos = strpos(substr($postrow[$i]['body'],$numchar), " ");
if(strlen($postrow[$i]['body'])>$numchar) $srttmpend = "...";
else $strtmpend = "";
echo "<p>".substr($postrow[$i]['body'], 0, $numchar+$pos).$srttmpend;
echo "<br><noindex><a href=".$postrow[$i]['url'].">Подробнее</a></noindex></p><hr>";
}
?>


Возможно, что проблема из-за ограничения символов, но не знаю как ее решить, потому что в mysql-запросах не силен.

Спустя 20 часов, 32 минуты, 1 секунда (3.01.2010 - 17:49) KestOn написал(а):
danon, показываю на своем примере вывода программ, которые можно скачать с моего сайта, надеюсь поймешь:






<?php
$link = mysql_connect('СЕРВЕР', 'ПОЛЬЗОВАТЕЛЬ', 'ПАРОЛЬ') or die("Не могу соединиться");
mysql_select_db('БАЗА ДАННЫХ', $link);
?>

<?

// меню из БД
$resultMenu = mysql_query("SELECT * FROM ТАБЛИЦА ORDER BY id;", $link);
$rowMenu = mysql_fetch_array($resultMenu); // выведем первый пункт меню без точечки
echo '<center><a href="?id='.$rowMenu['id'].'">'.stripslashes($rowMenu['title']).'<br><img src="'.stripslashes($rowMenu['metadescription']).'"></a><br>Добавил - '.stripslashes($rowMenu['metatitle']).'<br><a href="'.stripslashes($rowMenu['metakeywords']).'">Скачать</a></center><br><br><b>Разработчик:</b><br>' .stripslashes($rowMenu['rab']).'<br><b>Год выпуска:</b><br>' .stripslashes($rowMenu['god']).'<br><br><b>Описание:</b><br><br>'.stripslashes($rowMenu['body']).'<br><br><b>Система:</b><br>' .stripslashes($rowMenu['sys']).'<br><b>Жесткий диск:</b><br>' .stripslashes($rowMenu['hdd']).'';
while($rowMenu = mysql_fetch_array($resultMenu)){
echo '<br>--------<br><center><a href="?id='.$rowMenu['id'].'">'.stripslashes($rowMenu['title']).'<br><img src="'.stripslashes($rowMenu['metadescription']).'"></a><br>Добавил - '.stripslashes($rowMenu['metatitle']).'<br><a href="'.stripslashes($rowMenu['metakeywords']).'">Скачать</a></center><br><br><b>Разработчик:</b><br>' .stripslashes($rowMenu['rab']).'<br><b>Год выпуска:</b><br>' .stripslashes($rowMenu['god']).'<br><br><b>Описание:</b><br><br>'.stripslashes($rowMenu['body']).'<br><br><b>Система:</b><br>' .stripslashes($rowMenu['sys']).'<br><b>Жесткий диск:</b><br>' .stripslashes($rowMenu['hdd']).'';

}
?>


при этом запрос к моей базе данных был таков (этим кодом я ее создавал):
CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL auto_increment,
`body` text NOT NULL,
`title` varchar(255) NOT NULL default '',
`metatitle` varchar(255) NOT NULL default '',
`metakeywords` varchar(255) NOT NULL default '',
`metadescription` text NOT NULL,
`rab` text NOT NULL,
`god` text NOT NULL,
`sys` text NOT NULL,
`hdd` text NOT NULL,
`sortirovka` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
)
TYPE=MyISAM AUTO_INCREMENT=1 ;


Все поля заполняются прямо с сайта через специальную форму.
Удачи))

Спустя 4 минуты, 28 секунд (3.01.2010 - 17:53) KestOn написал(а):
Кстати, твой код мне тоже помог, спасибо)))

Спустя 1 час, 45 минут, 35 секунд (3.01.2010 - 19:39) KestOn написал(а):
danon, я решил объединить то что унас с тобой получилось, и у меня получилось))

1)Тебе надо поменять содержимое (если это надо) переменной "num", найдешь где.
2)Настрой подключение к БД.
3)И самое главное:
Тебе придется изменить таблицу "news". Добавляешь через PHPMyAdmin поле "id" со следующими параметрами:
(Если вдруг есть, то не надо)
__________________________________
Поле: id
Тип: INT
Длина/значения: 10
По умолчанию: Нет
Сравнение: ПУСТО
Атрибуты: UNSIGNED
Null: Галочку не ставь
A_I: Галочку обязательно СТАВЬ
__________________________________


<?php

// Подключение к базе данных
mysql_connect('Сервер', 'Пользователь', 'Пароль') or die('error! Нет соединения с сервером mysql!');
mysql_select_db('База данных') or die('error! Нет соединения с базой данных!');


function yandex_link_bar($page, $count, $pages_count, $show_link)
{
// $show_link - это количество отображаемых ссылок;
// нагляднее будет, когда это число будет парное
// Если страница всего одна, то вообще ничего не выводим

if ($pages_count == 1) return false;
$sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
// Для придания ссылкам стиля

$style = 'style="color: #808000; text-decoration: none;"';
$begin = $page - intval($show_link / 2);
unset($show_dots); // На всякий случай smile.gif
// Сам постраничный вывод
// Если количество отображ. ссылок больше кол. страниц

if ($pages_count <= $show_link + 1) $show_dots = 'no';
// Вывод ссылки на первую страницу
if (($begin > 2) && ($pages_count - $show_link > 2)) {
echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
}
for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
{
$i = $begin + $j; // Номер ссылки
// Если страница рядом с началом, то увеличить цикл для того,
// чтобы количество ссылок было постоянным

if ($i < 1) continue;
// Подобное находится в верхнем цикле
if (!isset($show_dots) && $begin > 1) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
$w=1;
$show_dots = "no";
}
// Номер ссылки перевалил за возможное количество страниц
if ($i > $pages_count) break;
if ($i == $page) {
echo ' <a '.$style.' ><b><font color="red">'.$i.'</font></b></a> ';
} else {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
$w=2;
}
// Если номер ссылки не равен кол. страниц и это не последняя ссылка
if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
// Вывод "..." в конце
if (($j == $show_link) && ($i < $pages_count)) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
$w=3;
}
}

// Вывод ссылки на последнюю страницу
if ($begin + $show_link + 1 < $pages_count) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
}
return true;
} // Конец функции














// Подготовка к постраничному выводу

$num = 5; // Количество отображаемых данных из БД
if (empty($_get['page']) || ($_get['page'] <= 0)) {

















$page = 1;




} else {
$page = (int) $_get['page']; // Считывание текущей страницы
}
// Общее количество информации
$count = mysql_numrows(mysql_query('select * from news')) or die('error! Записей не найдено!');
$pages_count = ceil($count / $num); // Количество страниц
// Если номер страницы оказался больше количества страниц

if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $num; // Начальная позиция, для запроса к БД
// Вызов функции, для вывода ссылок на экран



?>

<?

$numchar = 300;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM news");
$rgPosts = mysql_fetch_row($result);
$posts=$rgPosts[0];
$total = intval(($posts - 1) / $num) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$result = mysql_query("SELECT * FROM news ORDER BY title DESC LIMIT $start, $num") or die (mysql_error());
// В цикле переносим результаты запроса в массив $postrow
while ( $i = mysql_fetch_array($result)) {$postrow[ ]=$i;}
echo '<br><br>';
yandex_link_bar($page, $count, $pages_count, 10);

?>



<?php

for($i = 0; $i < $num; $i++)
{
$pos = strpos(substr($postrow[$i]['body'],$numchar), " ");
if(strlen($postrow[$i]['body'])>$numchar) $srttmpend = "...";
else $strtmpend = "";

if ($postrow[$i]['id']>0){
echo "<p>".substr($postrow[$i]['body'], 0, $numchar+$pos).$srttmpend;
echo "<br><noindex><a href=".$postrow[$i]['url'].">Подробнее</a></noindex></p><hr>";
}else{}
}


yandex_link_bar($page, $count, $pages_count, 10);
?>



Теперь радуйся жизни!
"..."Не выводится (по идее)

Спустя 41 минута, 8 секунд (3.01.2010 - 20:20) Guest написал(а):
FatCat А чо в конкурсе постранички не участвовал?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.