Странициране с Ajax

vinsbg

Registered
Здравейте,

не съм сигурен дали темата е за този раздел или за PHP, но я поствам тук и моля по преценка ако трябва да бъде преместена.

Опитвам се да си направя една галерия с ajax странициране, но за първи път се сблъскам с това и малко не разбирам как точно трябва да стане. Значи ситуацията е следната:

На index.php имам категории на галерии id=1, id=2 и т.н. Искам когато избера категория id=1 да ми зареди тъмбовете със снимки и страницирането. До тук добре ... проблема ми е как трябва да предам id-то?

В индекса ми e:
Код:
href="gallery.php?album_id='.row['album_id']"
Като се зареди gallery.php ето какво се опитвам ( от един туториал съм го ползвал )
Код:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<link rel="stylesheet" type="text/css" href="style.css" />

</head>
<body>

<div id="pagination" cellspacing="0">
</div>

<script type="text/javascript" src="script.js"></script>
</body>
</html>
script.js
Код:
 $(function(){
 $.ajax({
	     url:"dbmanupulate.php",
                  type:"POST",
                  data:"album_id=album_id&page=1",
        cache: false,
        success: function(response){
		   
		  $('#pagination').html(response);
		 
		}
	
	   });
    $('#pagination').on('click','.page-numbers',function(){
       $page = $(this).attr('href');
	   $pageind = $page.indexOf('page=');
	   $page = $page.substring(($pageind+5));      
	   $.ajax({
	     url:"dbmanupulate.php",
                  type:"POST",
                  data:"album_id=album_id&page="+$page,
        cache: false,
        success: function(response){
		   
		  $('#pagination').html(response);		 
		}		
	   });
	return false;
	});

});
и PHP часта
Код:
 if(isset($_REQUEST['album_id']) && $_REQUEST['album_id']!=''){
$album_id = $_REQUEST['album_id'];
  
   call_user_func($album_id,$_REQUEST,$con,$limit,$adjacent);
}
function album_id($data,$con,$limit,$adjacent){
  $page = $data['page'];
   if($page==1){
   $start = 0;  
  }
  else{
  $start = ($page-1)*$limit;
  }
  $sql = "select * from images order by image_id asc";
  $rows  = $con->query($sql);
  $rows  = $rows->num_rows;
  
  $sql = "select * from images order by image_id asc limit $start,$limit";
  
  $data = $con->query($sql);
  if($data->num_rows>0){
   while( $row = $data->fetch_array(MYSQLI_ASSOC)){
      $str.='<img src="../images/gallery/thumb/'.$row['image_name'].'">';
   }
   }else{
    $str .= "No Data Available";
   }
   
echo $str; 
pagination($limit,$adjacent,$rows,$page); 

//// страницирането надолу

В момента без значение в урл-то дали е gallery.php Или gallery.php?album_id=1 винаги показва всички снимки от базата. Страницирането си работи... проблема е само с предаването на ID-то.

Предполагам, че е нещо в .js но не знам точно какво и къде да добавя още там..
 
href="gallery.php?album_id='.row['album_id']"

На мене лично,само от това не ми става много ясно как предаваш данните, но, можеш да го направиш с един
Код:
<input type="hidden" value="'.$row['album_id'].'" id="album_id"/>

и после динамично да го взимаш с javascript

Код:
var album_id = $("#album_id").val();

и по този начин да ги предаваш. От този горния код, който си пейстнал, предполагам с това href="gallery.php?album_id='.row['album_id']" правиш самото странициране ?
Добави просто под него този hidden input и пробвай дали ще стане

:idea: :idea: :idea:
 
Не не.. В index.php изкарвам категориите/албумите. Всеки албум има снимки в него. Искам, когато натисна на албума да ми зареди gallery.php?album_id=1 примерно.

Та на index.php Имам това
Код:
<div class="g-item">
              <img src="images/albums/thumb/'.$row['album_image'].'">
		      <a class="overlay" href="gallery.php?album_id='.$row['album_id'].'">
	         	                                    <span>'.truncate_c($row['album_name']).'</span>
		       </a>
	</div>
И вече в gallery.php искам снимките да ги страницирам с аякс-а, като в gallery.php имам
Код:
<script type="text/javascript" src="script.js"></script>
В script.js ми е
Код:
$(function(){
 $.ajax({
	     url:"dbmanupulate.php",
                  type:"POST",
                  data:"album_id=album_id&page=1",
	          cache: false,
	          success: function(response){
		   
		  $('#pagination').html(response);
		 
		}
		
	   });
    $('#pagination').on('click','.page-numbers',function(){
       $page = $(this).attr('href');
	   $pageind = $page.indexOf('page=');
	   $page = $page.substring(($pageind+5));
       
	   $.ajax({
	     url:"dbmanupulate.php",
                  type:"POST",
                  data:"album_id=album_id&page="+$page,
        cache: false,
        success: function(response){
		   
		  $('#pagination').html(response);
		 
		}
		
	   });
	return false;
	});

});
А в dbmanupulate.php
Код:
if(isset($_POST['album_id']) && isset($_POST['album_id'])!=''){
$album_id = $_POST['album_id'];
  
   call_user_func($album_id,$_POST,$con,$limit,$adjacent);
}
function album_id($data,$con,$limit,$adjacent){
  $page = $data['page'];
   if($page==1){
   $start = 0;  
  }
  else{
  $start = ($page-1)*$limit;
  }
  $sql = "select * from images order by image_id asc";
  $rows  = $con->query($sql);
  $rows  = $rows->num_rows;
  
  $sql = "select * from images where image_album='$album_id' order by image_id asc limit $start,$limit";
  
  $data = $con->query($sql);
  if($data->num_rows>0){
   while( $row = $data->fetch_array(MYSQLI_ASSOC)){
      $str.='<img src="../images/gallery/thumb/'.$row['image_name'].'" style="width: 100px; height: 100px;">';
   }
   }else{
    $str .= "No Data Available";
   }
Дано така стана малко по-ясно.
Сега както е в момента не изкарва нищо.. когато добавя в заявката where image_album='$album_id' .. ако го махна това няма значение кой албум/категория е избрана/кликнато изкарва всички снимки ...
 
Аз наскоро правих подобно нещо, но реших, че ще е по-удобно да е като при коментарите в youtune - изкарва ти първите десет, цъкаш "още" и ти добавя следващите десет. А и така всяка "страница" (серия) се зарежда само веднъж, ако си на първа и отвориш втора, ако цъкнеш пак първа нямаш втори request. Както предпочиташ, разбира се :)
 
vinsbg каза:
Това lazy loading ли се води за което приказваш?
Всъщност да. Вижда ми се по-удобно за потребителя, а и по-лесно за реализиране - просто подаваш ид-то на последния коментар (записан някъде в data-* например) и връщаш следващите n резултата. Ако не е подаден $_GET['start_id'] връщаш последните n резултата.
 

Back
Горе