Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Разбитие на страницы (php). Нужна помощь. (https://javascript.ru/forum/server/15021-razbitie-na-stranicy-php-nuzhna-pomoshh.html)

dac_60 10.02.2011 08:31

Разбитие на страницы (php). Нужна помощь.
 
Доброго всем утра.

Появилась потребность разбить на страницы вывод каталога в магазине.
Побывал по примерам сделать ничего не получилось.
Напишите пожалуйста как это сделать?
Вот собственно код страницы которую нужно разбить:
<div id="akk">
             <?php
			 $cq=mysql_query("select * from `akk_cat` order by `id`");
			 ?>
             <? while($ca=mysql_fetch_array($cq)):?>
             <?php
			 $q=mysql_query("select * from `akk_goods` where `cat`='$ca[id]' order by `price`");
			 $i=0;
			 ?>
             <? if(mysql_num_rows($q)>0):?>
             <div><div class="name" style="color:black;"><b><?=$ca[name]?></b></div></div>
             <? endif;?>
             <? while ($a=mysql_fetch_array($q)):?>
                <?php
				$qq=mysql_query("select `id` from `akk_codes` where `good`='$a[id]' and `status`<1");
				$num=mysql_num_rows($qq);
				?>
                <? if($num>0):?>
                <?php
				$uq=mysql_query("select `rub` from `akk_kurs` where `currency`='usd'");
				$ua=mysql_fetch_array($uq);
				$price_usd=round($a[price]/$ua[rub],2);
				?>
                <div class="<?php if($i==0) {echo("a"); $i=1;} else {echo("b"); $i=0;} ?>"><div class="name"><?=$a[name]?></div><div class="cena"><?=$a[price]?> руб / <?=$price_usd?> usd</div><div class="shop"><a href="order.php?id=<?=$a[id]?>">купить</a></div></div>
                <?endif;?>
             <? endwhile;?>  
             <? endwhile;?>
               <?php
			 $q=mysql_query("select * from `akk_goods` where `cat`='0' order by `price`");
			 $i=0;
			   ?>
             <? while ($a=mysql_fetch_array($q)):?>
                <?php
				$qq=mysql_query("select `id` from `akk_codes` where `good`='$a[id]' and `status`<1");
				$num=mysql_num_rows($qq);
				?>
                <? if($num>0):?>
                <?php
				$uq=mysql_query("select `rub` from `akk_kurs` where `currency`='usd'");
				$ua=mysql_fetch_array($uq);
				$price_usd=round($a[price]/$ua[rub],2);
				?>
                <div class="<?php if($i==0) {echo("a"); $i=1;} else {echo("b"); $i=0;} ?>"><div class="name"><?=$a[name]?></div><div class="cena"><?=$a[price]?> руб / <?=$price_usd?> usd</div><div class="shop"><a href="order.php?id=<?=$a[id]?>">купить</a></div></div>
                <? endif;?>
             <? endwhile;?> 
             </div>

SkyLight 10.02.2011 11:09

Куча материалов по запросу "php разбивка на страницы" и ни один не подошел? Значит не так пробовали, надо по другому.

dac_60 10.02.2011 12:02

SkyLight,
Честно говоря еще не все перепробовал, думал может кто на путь истинный сразу направит чтоб долго не парится :)

SkyLight 10.02.2011 13:30

Как раз в статьях и есть все необходимые общие примеры. Главное понять сам принцип.
А задача форума - не предоставить просящему готовое решение, а натолкнуть на правильные мысли.

dac_60 10.02.2011 14:48

вот нашел то что нужно, вот только очередная проблема. Куда и как правильно его поместить в код?

// количество записей, выводимых на странице
$per_page=10;
// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
// составляем запрос и выводим записи
// переменную $start используем, как нумератор записей.
$q="SELECT * FROM `akk_goods` ORDER BY id LIMIT $start,$per_page";
$res=mysql_query($q);
while($row=mysql_fetch_array($res)) {
  echo ++$start.". ".$row['id']."<br>\n";
}
// дальше выводим ссылки на страницы:
$q="SELECT count(*) FROM `akk_goods`";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];

$num_pages=ceil($total_rows/$per_page);

for($i=1;$i<=$num_pages;$i++) {
  if ($i-1 == $page) {
    echo $i." ";
  } else {
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
  }
}

SkyLight 10.02.2011 14:57

В приведенном коде строки 1-13 отвечают за вывод записей, остальные - вывод пейджинга. Ну тут ведь несложно догадаться, что делать дальше.

dac_60 10.02.2011 15:09

Цитата:

Сообщение от SkyLight (Сообщение 91879)
В приведенном коде строки 1-13 отвечают за вывод записей, остальные - вывод пейджинга. Ну тут ведь несложно догадаться, что делать дальше.

Трудно, если ничего толком не понимаешь в PHP

SkyLight 10.02.2011 15:33

Тогда вы сами создали себе проблему. Надо как раз "толком" разобраться в пхп, это позволит решить сразу много вопросов. Если по каждой проблеме тыкаться за справкой - потеряете много времени.

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

dac_60 11.02.2011 22:24

вот пробую так разбить но все равно ничего не получается.
добился только того что выводит количество страниц а вот список товаров не делит на страницы
<?php
// количество записей, выводимых на странице
$per_page=3;
// получаем номер страницы
$page=(isset($_GET['page'])? $_GET['page']: -1); 
$page=((!$page)==false)? $page:-1;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
// составляем запрос и выводим записи
// переменную $start используем, как нумератор записей.
$qp="SELECT id FROM `akk_goods` where `cat`='0' order by `price` LIMIT $start, $per_page";
$res=mysql_query($qp);
while($row=mysql_fetch_array($res)) {
  echo ++$start.". ".$row['id']."\n<br>\n";
}
// дальше выводим ссылки на страницы:
$qp="SELECT count(*) FROM `akk_goods`";
$res=mysql_query($qp);
$row=mysql_fetch_row($res);
$total_rows=$row[0];

$num_pages=ceil($total_rows/$per_page);
?>
<!--разбитие на страницы-->			 
             <?php
			 $cq=mysql_query("select * from `akk_cat` order by `id`");
             while($ca=mysql_fetch_array($cq)):
			 $q=mysql_query("select * from `akk_goods` where `cat`='$ca[id]' order by `price`");
			 $i=0;
             if(mysql_num_rows($q)>0):
             echo ("<div><div class='name_cat'>$ca[name]</div></div>");
             endif;
             while ($a=mysql_fetch_array($q)):
             $qq=mysql_query("select `id` from `akk_codes` where `good`='$a[id]' and `status`<1");
			 $num=mysql_num_rows($qq);
			 if($num>0):?>
                <div class="<?php if($i==0) {echo("a"); $i=1;} else {echo("b"); $i=0;} ?>"><div class="name"><?=$a['name']?></div><div class="cena"><?=$a['price']?> руб</div><div class="shop"><a href="order.php?id=<?=$a[id]?>">купить</a></div></div><br>
                <?endif;?>
             <? endwhile;?>  
             <? endwhile;?>	 
             <?php
			 $q=mysql_query("select * from `akk_goods` where `cat`='0' order by `price`");
			 $i=0;
             while ($a=mysql_fetch_array($q)):
             $qq=mysql_query("select `id` from `akk_codes` where `good`='$a[id]' and `status`<1");
			 $num=mysql_num_rows($qq);
             if($num>0):?>
             <div class="<?php if($i==0) {echo("a"); $i=1;} else {echo("b"); $i=0;} ?>"><div class="name"><?=$a[name]?></div><div class="cena"><?=$a[price]?> руб</div><div class="shop"><a href="order.php?id=<?=$a[id]?>">купить</a></div></div>
             <? endif;?>
             <? endwhile;?>
<!--разбитие на страницы-->
<h1><?php
// дальше выводим ссылки на страницы:
$qp="SELECT count(id) FROM `akk_goods` order by `price`";
$res=mysql_query($qp);
$row=mysql_fetch_row($res);
$total_rows=$row[0];

$num_pages=ceil($total_rows/$per_page);

for($i=1;$i<=$num_pages;$i++) {
  if ($i-1 == $page) {
    echo $i." ";
  } else {
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
  }
}
?></h1>	
<!--разбитие на страницы-->

помогите пожалуйста :(

SkyLight 12.02.2011 11:33

Принципа вы так и не поняли. В вашем коде вообще нет разбивания на страницы. Насколько я понял, выборка списка происходит в строке 26. Только где в ней LIMIT? И вообще, код бестолковый, куча лишних действий...


Часовой пояс GMT +3, время: 09:45.