<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

В начале курса у нас будет только идея, а в конце готовый продукт, который можно использовать в практических целях.

В рамках упражнений курса Вы параллельно со мной будете создавать свою большую программу на Java, что даст Вам необходимую практику, после которой для Вас уже не будет разницы, какого размера создавать программы.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Постраничная навигация
03.06.2012 16:23:40 Постраничная навигация Сообщение #1
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Ребят. У меня есть цикл FOR, который делает выборку из БД.
Т.к. записей в таблице очень много, то страница очень долго грузится. Не подскажете, как сделать постраничную навигацию для этого цикла? Т.е. чтобы цикл через каждые 20 записей переходил на другую страничку (?page=2 например) и там продолжал выборку, и т.д.

Цикл:
<?php
$projects = getRentProjects();
for ($i = 0; $i < count($projects); $i++) {
echo '<tr>';
echo '<td>'.$projects[$i]['id'].'</td>';
echo '<td><a href = "show_project.php?project='.$projects[$i]['id'].'"><img src = "projects/images/'.$projects[$i]['photo'].'" alt = "" title = "Подробнее" /></a></td>';
if ($projects[$i]['comission'] == 1) echo '<td><b>'.$projects[$i]['deal'].'</b><br />'.$projects[$i]['realty'].'<br /><img src = "images/comission.png" alt = "" style = "width: 100px;" /></td>';
else echo '<td><b>'.$projects[$i]['deal'].'</b><br />'.$projects[$i]['realty'].'</td>';;
echo '<td>'.$projects[$i]['location'].'<br /><i>'.$projects[$i]['move'].'</i></td>';
if ($projects[$i]['sto'] == 0) echo '<td>'.$projects[$i]['sfrom'].' кв. м.</td>';
else echo '<td>'.$projects[$i]['sfrom'].' - '.$projects[$i]['sto'].' кв. м.</td>';
if ($projects[$i]['vto'] == 0) echo '<td>'.$projects[$i]['vfrom'].'<br />'.$projects[$i]['curresy'].'</td>';
else echo '<td>'.$projects[$i]['vfrom'].' - '.$projects[$i]['vto'].'<br />'.$projects[$i]['curresy'].'</td>';
echo '<td>'.$projects[$i]['names'].'<br /><a href = "mailto:'.$projects[$i]['email'].'">'.$projects[$i]['email'].'</a><br /><span style = "font-size: 14px;">'.$projects[$i]['number'].'<br />+7 (495) 797-10-27</span></td>';
echo '</tr>';
}
?>
Профиль Ответить
03.06.2012 16:30:23 Постраничная навигация Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

http://myrusakov.ru/php-page-navigation.html
Профиль Ответить
04.06.2012 19:48:14 Постраничная навигация Сообщение #3
KotOFF

KotOFF

Освоившийся

Освоившийся

Дата регистрации:
25.05.2012 10:21:29

Сообщений: 33

<?php
error_reporting(NULL);
$dbhost = "localhost";
$dbuser = "user"; // Юзер в БД
$dbpass = "pass"; // Пароль Юзера
$dbname = "bd"; // Имя БД

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database";
mysql_select_db($dbname);


$tableName="users"; //Название Таблица в БД ( с которой будет вывод )
$targetpage = "all_users.php"; //На какой странице будет вывод ( пишете свою )
$limit = 10; // Скока строк вытаскивать с таблицы ( по 10 строк на страницу )

$query = "SELECT COUNT(*) as num FROM $tableName";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];

$stages = 3;
$page = mysql_escape_string($_GET['page']);
if($page){
$start = ($page - 1) * $limit;
}else{
$start = 0;
}


$query1 = "SELECT * FROM $tableName LIMIT $start, $limit";
$result = mysql_query($query1);


if ($page == 0){$page = 1;}
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total_pages/$limit);
$LastPagem1 = $lastpage - 1;


$paginate = '';
if($lastpage > 1)
{




$paginate .= "<div class='paginate'>";

if ($page > 1){
$paginate.= "<a href='$targetpage?page=$prev'>Предыдущая</a>";
}else{
$paginate.= "<span class='disabled'>Предыдущая</span>"; }




if ($lastpage < 7 + ($stages * 2))
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
}
elseif($lastpage > 5 + ($stages * 2))
{

if($page < 1 + ($stages * 2))
{
for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
$paginate.= "...";
$paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
$paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
}

elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
{
$paginate.= "<a href='$targetpage?page=1'>1</a>";
$paginate.= "<a href='$targetpage?page=2'>2</a>";
$paginate.= "...";
for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
$paginate.= "...";
$paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
$paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
}

else
{
$paginate.= "<a href='$targetpage?page=1'>1</a>";
$paginate.= "<a href='$targetpage?page=2'>2</a>";
$paginate.= "...";
for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
}
}


if ($page < $counter - 1){
$paginate.= "<a href='$targetpage?page=$next'>Следущая</a>";
}else{
$paginate.= "<span class='disabled'>Следущая</span>";
}

$paginate.= "</div>";


}

// Навигация
echo $paginate;




while($row = mysql_fetch_array($result))
{

//Вывод уже сами переделаете под себя!
echo "<div class='all_users'>
<div class='all_users_avatar'><img alt='аватар' src=".$row['avatar']."></div>
<div class='all_users_login'><a href='users.php?id=".$row['id']."'>".$row['login']."</a><br>
<p>E-mail: ".$row['email']."</p><br>
Дата Регистации: ".$row['date']."</div></div><br>";

}

?>

Вот Стили:

<style>

/*Навигация */

.paginate {
font-family: Gabria;
padding: 3px;
margin: 3px;
}

.paginate a {
padding:2px 5px 2px 5px;
margin:2px;
text-decoration:none;
color: #666;
}
.paginate a:hover, .paginate a:active {
color: #FFF;
}
.paginate span.current {
margin: 2px;
padding: 2px 5px 2px 5px;
font-weight: bold;
color: #FFF;
}
.paginate span.disabled {
padding:2px 5px 2px 5px;
margin:2px;
color:#DDD;
}

</style>
Профиль Ответить
09.06.2012 15:13:47 Постраничная навигация Сообщение #4
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Михаил, я прочитал вашу статью и подогнал всё под свой движок. Теперь возник ещё один вопрос. Как узнать номер последней страницы?
Профиль Ответить
09.06.2012 16:38:45 Постраничная навигация Сообщение #5
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Узнать количество записей и поделить его на число записей на странице. Число, возможно, будет нецелым, поэтому его надо округлить в большую сторону.
Профиль Ответить
09.06.2012 16:40:39 Постраничная навигация Сообщение #6
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Почему то 0.05 получается, хотя страниц на самом деле 7.
Профиль Ответить
09.06.2012 16:51:03 Постраничная навигация Сообщение #7
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Посмотрите значения переменных, отвечающих за общее количество записей и за количество записей на одной странице.
Профиль Ответить
09.06.2012 16:54:53 Постраничная навигация Сообщение #8
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

$all = $mysqli->query("SELECT COUNT(*) FROM projects WHERE `deal` = 'Аренда'";
Вот так я выбирал все записи, а потом делил на количество записей на каждой странице.
$pages = $all / $count;
Получилось 0.05. Причём всегда получается 0.05.
Профиль Ответить
09.06.2012 17:18:48 Постраничная навигация Сообщение #9
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Вы не поняли, что я писал в предыдущем сообщении. Вот статья: http://myrusakov.ru/php-finderror.html
Профиль Ответить
09.06.2012 18:43:47 Постраничная навигация Сообщение #10
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Делал
print_r($all);
Пишет mysqli_result Object ( )
Профиль Ответить