@Ykillyou

Как приспособить пагинацию?

Есть вот такая галерея:
Нужно приспособить пагинацию для неё.
<!DOCTYPE html>
<body style="background-color:white;">

    
    <div class="content-container" >
      <header>
      <!--<h1 class="center-text">Gallary at glance</h1>-->
      
    </header>
    
    <?php
  
  $stmt = $DB_con->prepare('SELECT id, name, description, price, image FROM products ORDER BY ID DESC');
  $stmt->execute();
  
  if($stmt->rowCount() > 0)
  {
    while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    {
     
      ?>
    <div class="portfolio-group">
          <a class="portfolio-item" href="image/<?php echo $row['image']; ?>">
            <img src="image/<?php echo $row['image']; ?>" >
            <div class="detail">
              <h3><b><?php echo $row['price']; ?> MDL</b></h3>
              <p><?php echo $row['name']; ?></p>
			  <p><?php echo $row['description']; ?></p>
              <span class="btn"><center>View</center></span> 
            </div>
          </a>				
        </div>
	<?php } } ?>

      <div class="pagination">
        <ul class="nav">
          <li class="active">1</li>
          <li>2</li>
          <li>3</li>
        </ul>
      </div>
    </div>
  </div>	<!-- /.content-container -->	
    
  
  <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
  <script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
  <script type="text/javascript" src="js/modernizr.2.5.3.min.js"></script>
  <script type="text/javascript" src="js/jquery.magnific-popup.min.js"></script> 
  <script type="text/javascript" src="js/templatemo_script.js"></script>

</body>
</html>


Нарыл вот такой код для пагинации:
// Подключение к БД
    $db = mysql_connect("localhost","root","");
    mysql_select_db("phpsite",$db);
    mysql_query("SET NAMES 'utf8'",$db);
	
	/*
	$kol - количество записей для вывода
	$art - с какой записи выводить
	$total - всего записей
	$page - текущая страница
	$str_pag - количество страниц для пагинации
	*/

	// Пагинация

	// Текущая страница
	if (isset($_GET['page'])){
		$page = $_GET['page'];
	}else $page = 1;
	
	$kol = 3;  //количество записей для вывода
	$art = ($page * $kol) - $kol;
	echo $art;
	
	// Определяем все количество записей в таблице
	$res = mysql_query("SELECT COUNT(*) FROM `lessons`");
	$row = mysql_fetch_row($res);
	$total = $row[0]; // всего записей	
	echo $total;
	
	// Количество страниц для пагинации
	$str_pag = ceil($total / $kol);
	echo $str_pag;
	
	// формируем пагинацию
	for ($i = 1; $i <= $str_pag; $i++){
		echo "<a href=lessons.php?page=".$i."> Страница ".$i." </a>";
	}
	
	// Запрос и вывод записей
	$result = mysql_query("SELECT * FROM `lessons` LIMIT $art,$kol,$db);
	$myrow = mysql_fetch_array($result);
    do{
        echo "<h2>".$myrow['title']."</h2>";
        echo "<p>".$myrow['text']."</p>";
    } while ($myrow = mysql_fetch_array($result));

Как приспособить его для галереи? Или может есть вариант кода пагинации более подходящий для кода галереи?
  • Вопрос задан
  • 701 просмотр
Решения вопроса 1
Stac
@Stac
О, я воздержусь от примеров кода, чтобы у вас не было соблазна их использовать.

Вам нужно разделить код получения данных из БД и код вывода HTML в браузер.

Дальше можете действовать по алгоритму:
1) Сделать запрос "SELECT max(id), count(*) FROM `products`".
Количество нужно для определения числа страниц.
А max(id) может быть и не понадобится. Так как вывод отсортирован по убыванию (от новых к старым), а новые изображения могут добавляться в галерею, можно запоминать id первого изображения на первой странице.
2) Получить из $_GET номер нужной страницы (используйте функцию filter_input()).
3) Получить количество изображений на странице из конфига или тоже из $_GET, если вы хотите, чтобы пользователь мог управлять этим параметром.
4) Сделать запрос с БД 'SELECT id, name, description, price, image FROM products WHERE id <= $max_id ORDER BY id DESC LIMIT $limit OFFSET $offset';

где, $max_id это id самой новой записи в текущей сессии, $limit - количество картинок на странице, $offset = $limit * ($p-1), где $p - номер страницы (нумерация страниц с 1).

Используйте подготовленные запросы, как у вас в примере.

$stmt = $DB_con->prepare('SELECT id, name, description, price, image FROM products WHERE id <= ? 
        ORDER BY id DESC LIMIT ? OFFSET ?');
 $stmt->execute(array($max_id, $limit, $offset));


5) Выбрать из БД нужные данные и передать в код отвечающий за представление.

В представлении (коде, генерирующем HTML) нужно не только вывести картинки текущей страницы, но и сформировать ссылки на другие страницы.

Количество страниц = количество записей в БД / $limit.

Сложность возникнет лишь, если у вас количество страниц так велико, что ссылки на них не помещаются на экран по ширине. Тогда нужно будет придумать алгоритм, по которому какие-то ссылки показывать, а какие-то нет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы