2013-05-10 11 views
10

Mam pytanie o laravel paginacji i nieskończonego przewijania:laravel i nieskończonego przewijania

Przede wszystkim, mam to:

<div class="row"> 

<div id="boxes"> 

    @forelse($duels->results as $d) 

     <div class="col-span-4 box notizy"> 

      @include('versus.versus') 

     </div> 



    @empty 



    @endforelse 

</div> 

<div class="col-span-12"> 
    <div class="paginate text-center"> 
     {{$duels->links()}} 
    </div> 
</div> 

Jak widać, mam div #boxes które zawierają divy .box. paginacji jest ustawiony przez laravel i wygląda następująco:

<div class="col-span-12"> 
    <div class="paginate text-center"> 
     <div class="pagination"> 
      <ul> 
       <li class="previous_page disabled"><a href="#">&laquo; Previous</a></li> 
       <li class="active"><a href="#">1</a></li> <li><a href="index.php?page=2">2</a></li> 
       <li class="next_page"><a href="index.php?page=2">Next &raquo;</a></li> 
      </ul> 
      </div>  
     </div> 
</div> 

Więc teraz chcę umieścić nieskończoną zwój zamiast paginacji. Co należy zrobić, korzystając z https://github.com/paulirish/infinite-scroll?

Zostaję tutaj, jeśli masz pytania!

PS: Próbowałem kilka rzeczy, ale nikt nie pracował jak:

$('#boxes').infinitescroll({ 
    loading: { 
     finished: undefined, 
     finishedMsg: "<em>Congratulations, you've reached the end of the internet.</em>", 
     msg: null, 
     msgText: "<em>Loading the next set of posts...</em>", 
     selector: null, 
     speed: 'fast', 
     start: undefined 
    }, 
    state: { 
     isDuringAjax: false, 
     isInvalidPage: false, 
     isDestroyed: false, 
     isDone: false, // For when it goes all the way through the archive. 
     isPaused: false, 
     currPage: 1 
    }, 
    debug: false, 
    behavior: undefined, 
    binder: $(window), // used to cache the selector for the element that will be scrolling 
    nextSelector: "div.paginate li.active a", 
    navSelector: "div.paginate", 
    contentSelector: null, // rename to pageFragment 
    extraScrollPx: 0, 
    itemSelector: "div.notizy", 
    animate: false, 
    pathParse: undefined, 
    dataType: 'html', 
    appendCallback: true, 
    bufferPx: 40, 
    errorCallback: function() { }, 
    infid: 0, //Instance ID 
    pixelsFromNavToBottom: undefined, 
    path: undefined, // Can either be an array of URL parts (e.g. ["/page/", "/"]) or a function that accepts the page number and returns a URL 
    prefill: false, // When the document is smaller than the window, load data until the document is larger or links are exhausted 
    maxPage:undefined // to manually control maximum page (when maxPage is undefined, maximum page limitation is not work) 
}); 

Bazując na przykładzie strony github (i zastąpienie co należy wymienić), ale nie ma absolutnie żadnego wpływu takiego postępowania.

+0

W łączu jest coś przydatnego: http://wern-ancheta.com/blog/2015/03/01/how-to-implement-scroll-in-laravel/ – Setmax

Odpowiedz

17

znalazłem rozwiązanie (dla was, ludzie przyszłości):

$('#boxes').infinitescroll({ 
    navSelector  : ".paginate", 
    nextSelector : ".paginate a:last", 
    itemSelector : ".box", 
    debug   : false, 
    dataType  : 'html', 
    path: function(index) { 
     return "?page=" + index; 
    } 
}, function(newElements, data, url){ 

    var $newElems = $(newElements); 
    $('#boxes').masonry('appended', $newElems, true); 

}); 

To działa, ponieważ:

  • paginacji podane przez laravel 4 jest jak widzieliśmy przed
  • Paginacja w języku lara daje adres URL podobny do ...? Page = x

WAŻNE

Błąd można spotkać to:

Podczas przewijania w dół poza to, co powinno być na ostatniej stronie, prawdopodobnie okaże się, że utrzymanie się na ostatnią stronę i kółko, powodując autentycznie nieskończone przewijanie.

aby rozwiązać ten problem, przejdź do paginator.php (w folderze laravel) i zmienić ją następująco:

if (is_numeric($page) and $page > $last = ceil($total/$per_page)) 
    { 
     return Response::error('404'); 
    } 

nadzieję, że pomoże ktoś kiedyś!

+0

Wielkie dzięki za odpowiedź, ale nie zadziałał dla mnie, ten jest zrobiony i jest nowszy dla Lara 5 [http://stackoverflow.com/questions/33221805/infinite-scroll-jquery-laravel-5-paginate] –

2

Dziękuję Pretty Good Pancake za to rozwiązanie, działa dobrze. Jednak myślę, że w Laravel 4, Fasada odpowiedzi nie ma już metody error(), więc zadziała coś takiego jak App::abort('404', '...') lub Response::make('...', 404). Pamiętaj tylko, aby dodać use Illuminate\Support\Facades\.. do pliku, ponieważ plik ma nazwę namespaced.

Myślę, że czystszym sposobem na zrobienie tego jest prawdopodobnie rozszerzenie klasy Paginator i wdrożenie funkcji getCurrentPage. W ten sposób zmiany nie zostaną wymazane podczas wykonywania php composer.phar update, które mogą zastąpić pliki w katalogu dostawcy.

17

Istnieje również sposób na zaimplementowanie tego z inną nieskończoną wtyczką przewijania https://github.com/pklauzinski/jscroll.

Zakładając masz prosty pogląd Blade:

<div class="scroll"> 
<ol> 
    @foreach($media as $m) 
     <li>{{$m->title}}</li> 
    @endforeach 
</ol> 

{{$media->links()}} 
</div> 

Możemy osiągnąć nieskończoną zwój z następującym JS kodu

<?=HTML::script('<YOUR PATH HERE>jquery.jscroll/jquery.jscroll.min.js');?> 
<script type="text/javascript"> 
$(function() { 
    $('.scroll').jscroll({ 
     autoTrigger: true, 
     nextSelector: '.pagination li.active + li a', 
     contentSelector: 'div.scroll', 
     callback: function() { 
      $('ul.pagination:visible:first').hide(); 
     } 
    }); 
}); 
</script> 

nextSelector nieruchomość wybierze następnego linku strony w domyślne stronicowanie Laravel, contentSelector wybiera tylko wymaganą zawartość, a funkcja oddzwaniania ukrywa funkcję stronicowania namiot (musiałem ręcznie go ukryć, ponieważ ich atrybut pagingSelector wydaje się dla mnie nieważny). Możesz znaleźć szczegóły trybu na stronie głównej wtyczki.

+0

To jest niesamowite i lekkie, dzięki za udostępnienie, ALE nie będzie obsługiwać wielu zwojów na tej samej stronie, więc dla przyszłych facetów: D być ŚWIADOMA! –

+0

To powinna być zaakceptowana odpowiedź, działa jak urok! –

Powiązane problemy