Ivan Ivković Posted June 6, 2012 Share Posted June 6, 2012 The template file. <?php include(WIDGETS . 'html_head.php'); ?> <link rel="stylesheet" type="text/css" href="/src/styles/masonry.css"/> </script> </head> <body id="<?php echo $this -> registry -> router -> page ?>"> <div id="background"></div> <?php include(WIDGETS . 'navigation.php'); ?> <div id="container" style="position: absolute; top: 80px;"> <?php $result = $this -> registry -> db -> query('SELECT * FROM sc_pics ORDER BY pic_id DESC LIMIT 20'); $world = new WorldDatabase($this -> registry -> db); $cat = new Categories($this -> registry -> db); include('includes/fbconfig.php'); while($fetch = $result -> fetch_array()){ ?> <div class="element item" id="pic_<?php echo $fetch['pic_id'] ?>"> <?php echo '<img src="/thumb.php?pic=content/pics/' . $fetch['user_id'] . $fetch['src'] . '&h=200&w=210"/>'; ?> </div> <?php } ?> </div> <input type="hidden" id="last_id"/> <script> $('#last_id').attr('value', $('.item:last').attr('id')); </script> <script type="text/javascript" src="/src/scripts/masonry.js"></script> <script type="text/javascript"> var container = document.getElementById('container'); var wall = new Masonry( container, {isFitWidth: true }); var boxMaker = {}; boxMaker.makeBoxes = function(last_id){ var boxes = []; var request = $.ajax({ url: '/ajax/infinite_scroll/', type: 'POST', data: { last_id : last_id }, dataType: 'json' }); request.fail(function(jqXHR, textStatus){ alert( "Request failed: " + textStatus); }); request.done(function(data){ ndata = data; return data; }); if(!ndata.error){ $('#last_id').val('pic_' + ndata.pic_id); alert('NEW ID: pic_' + ndata.pic_id + ',' + ' NEW LAST ID: ' + $('#last_id').val()); var box = document.createElement('div'); text = document.createElement('img'); text.src = '/thumb.php?pic=content/pics/' + ndata.user_id + ndata.src + '&h=200&w=210"'; box.className = 'element item masonry-brick'; box.id = 'pic_' + ndata.pic_id; box.appendChild( text ); boxes.push( box ); }else{ if(ndata.error != 'complete'){ alert(ndata.error); } } return boxes; }; window.onscroll = function(){ if(($(document).height() - $(window).height() - $(document).scrollTop()) < 300){ var container = document.getElementById('container'); var wall = new Masonry( container, {isFitWidth: true }); var last_id = $('#last_id').val(); alert('Start LAST ID: ' + last_id ); var boxes = boxMaker.makeBoxes(last_id); for (var i=0; i < boxes.length; i++) { container.appendChild( boxes[i] ); } wall.appended( boxes ); } } </script> </body> </html> This is an infinite scroll I'm doing and I store my last picture ID in an input type hidden element for the AJAX -> PHP to know from which ID to continue outputting pictures. However, this last_id does not function properly and the app makes double pictures. I put up alert boxes for testing purposes, hope they help you too. PHP side: public function infinite_scroll(){ header("Content-Type: application/json"); if(!empty($_POST)){ if(isset($_POST['last_id'])){ $pic_id = end(explode('_', $_POST['last_id'])); $security = new Security($this -> registry -> db); $pic = new Picture($this -> registry -> db); if($security -> checkNum($pic_id)){ $items = $pic -> getInfiniteScrollData($pic_id); if($items !== false ){ foreach($items as $key => $value){ $data[$key] = $value; } }else{ $data = array( 'error' => 'complete' ); } }else{ $data = array( 'error' => 'Invalid input!' ); } } } echo json_encode($data); } URL : http://pixpresso.mycyberlove.com Pls help. Quote Link to comment Share on other sites More sharing options...
Ivan Ivković Posted June 11, 2012 Author Share Posted June 11, 2012 Anyone? :S Quote Link to comment Share on other sites More sharing options...
smoseley Posted June 11, 2012 Share Posted June 11, 2012 Try this? $items = $pic -> getInfiniteScrollData($pic_id + 1); Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.