我有一个关于laravel分页和无限滚动的问题:
首先,我有这个:
<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>
正如我们所看到的,我有一个div #boxes,其中包含div .box。 分页由Laravel设定,看起来像这样:
<div class="col-span-12">
<div class="paginate text-center">
<div class="pagination">
<ul>
<li class="previous_page disabled"><a href="#">« 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 »</a></li>
</ul>
</div>
</div>
</div>
所以现在,我想要一个无限卷轴而不是一个分页。 我应该如何使用https://github.com/paulirish/infinite-scroll?
如果您有任何疑问,我会待在这里!
PS:我尝试了一些但没有一个像:
$('#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)
});
基于github页面的示例(并替换应该替换的内容),但这样做绝对没有效果。
答案 0 :(得分:23)
还有一种方法可以使用另一个无限滚动插件https://github.com/pklauzinski/jscroll来实现它。
假设你有一个简单的Blade视图:
<div class="scroll">
<ol>
@foreach($media as $m)
<li>{{$m->title}}</li>
@endforeach
</ol>
{{$media->links()}}
</div>
我们可以使用以下JS代码实现无限滚动
<?=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 属性将选择默认Laravel分页中的下一页链接, contentSelector 仅选择所需内容,回调功能隐藏分页内容(我不得不手动隐藏它,因为它们的属性 pagingSelector 似乎对我无效)。您可以在插件的主页上找到模式详细信息。
答案 1 :(得分:18)
我找到了解决方案(适合你,未来的人):
$('#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);
});
这是因为:
重要强>
您将遇到的错误是:
当你向下滚动到最后一页的位置时,你可能会发现你不断翻到最后一页,导致真正无限滚动。
要解决这个问题,请转到paginator.php(在laravel文件夹中)并按如下所示进行更改:
if (is_numeric($page) and $page > $last = ceil($total / $per_page))
{
return Response::error('404');
}
希望有一天能帮助别人!
答案 2 :(得分:2)
感谢Pretty Good Pancake这个解决方案,效果很好。但是我认为在Laravel 4中,Response Facade不再具有error()方法,因此App::abort('404', '...')
或Response::make('...', 404)
之类的东西可以工作。只记得将use Illuminate\Support\Facades\..
添加到文件中,因为该文件是命名空间。
我认为更简洁的方法是自己扩展Paginator类并实现getCurrentPage函数。这样,当您执行可能覆盖供应商目录中的文件的php composer.phar update
时,更改将不会被删除。