我是Symfony2的新手,并不完全理解路由和模板.请帮助解决以下问题:
我需要使用Symfony 2和Ajax实现无限滚动.我有indexController从db获取10个库项目.我希望每次向下滚动时再获得10个项目.
这是控制器:
/**
* @Route("/", name="gallery_homepage")
*/
public function indexAction(Request $request)
{
$em = $this->getDoctrine()
->getEntityManager();
if($request->isXmlHttpRequest())
{
$page = $request->get('page', 1);
$limit = 10;
$start = $page * $limit - $limit;
$objects = $em->createqueryBuilder()
->select('o')
->from('ObjectBundle:Object', 'o')
->getQuery()
->setFirstResult($start)
->setMaxResults($limit)
->getResult();
$response = json_decode($objects);
return new Response(???));
}
else
{
}
}
这是树枝模板
{% block body %}
<section class="container">
<ul class="printedall">
{% for object in objects %}
<li class="printedimgs">
<a class="object_prints" href="object.url">
<img src="object.imageURL"/>
</a>
</li>
{% endfor %}
</ul>
</section>
{% endblock %}
控制器必须返回什么响应才能从db中获取10个项目并将它们附加到显示的项目中?
这是javascript
is_processing = false;
last_page = false;
function addMoreElements() {
is_processing = true;
$.ajax({
type: "GET",
//FOS Routing
url: Routing.generate('gallery_homepage', {page: page}),
success: function(data) {
if (data.html.length > 0) {
$('.printedall').append(data.html);
page = page + 1;
last_page = data.last_page;
} else {
last_page = true;
}
is_processing = false;
},
error: function(data) {
is_processing = false;
}
});
}
$(window).scroll(function() {
var wintop = $(window).scrollTop(), docheight = $(document).height(), winheight = $(window).height();
var scrolltrigger = 0.80;
if ((wintop / (docheight - winheight)) > scrolltrigger) {
if (last_page === false && is_processing === false) {
addMoreElements();
}
}
});
解决方法:
您可以使用控制器中的Request类,您可以从中获知该请求是否为AJAX.您还必须在查询对象上调用setFirstResult和setMaxResults方法:
use Symfony\Component\HttpFoundation\Response;
// ...
public function indexAction(Request $request) {
if ($request->isXmlHttpRequest()) {
//~ Is AJAX Request
$offset = $request->get('offset');
$limit = $request->get('limit');
$em = $this->getDoctrine()
->getEntityManager();
$objects = $em->createqueryBuilder()
->select('o')
->from('ThreedBundle:Threedobject', 'o')
->where('o.status = 2 AND o.showgallery = 1')
->getQuery()
->setFirstResult($offset)
->setMaxResults($limit)
->getResult();
} else {
//~ Request is not AJAX
}
}
对于无限滚动,您可以使用任何jquery无限滚动插件:
例如http://infiniteajaxscroll.com/examples/basic/page1.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。