Symfony2 Ajax Бесконечный свиток

Я совершенно новичок в Symfony2 и не понимаю полностью маршрутизации и шаблонов. Пожалуйста, помогите со следующей проблемой:
Мне нужно реализовать бесконечную прокрутку с Symfony 2 и Ajax. У меня есть indexController, который получает 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 %}

Какой ответ должен вернуть контроллер, чтобы получить 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();
}
}
});

3

Решение

Вы можете использовать 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

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]