0
我正在使用Doctrine的查詢構建器來獲取數據表並利用Zend在頁面上顯示信息。我正在使用一些Ajax來啓用「加載更多」功能,但我需要限制返回的最初行數,同時仍然可以使用利用相同存儲庫函數getAllNotifications的Ajax調用「加載更多」。限制最初的Doctrine QueryBuilder響應,允許「加載更多」
這可以在Zend控制器中的action方法中完成嗎?如果不是,那麼最好的方法是什麼?在控制器
操作方法:在控制器
public function historyAction()
{
$this->view->pageTitle = "Notification Center";
$this->view->notifications = \Home\EntityUtils::getRepository('Notification')->getAllNotifications();
}
負載更多的動作方法:
public function loadMoreNotificationsAction()
{
$offset = $this->getParam('offset');
$limit = $this->getParam('limit', 30);
//get notifications
$this->view->notifications = \Home\EntityUtils::getRepository('Notification')->getAllNotifications($offset, $limit);
//render notifications using partialLoop
$notificationsHtml = $this->view->partialLoop("notificationHistoryRow.phtml", $this->view->notifications);
//return notification html via json
$this->_helper->json($notificationsHtml);
}
getAllNotifications存儲庫中的方法,使用上面的:
public function getAllNotifications($offset = null, $limit = null)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('n.date_posted, nt.name as type, nt.class, n.id, n.title, n.message, n.recipient_params')
->from('\Home\Entity\Notification', 'n')
->orderBy('n.date_posted', 'DESC')
->leftJoin('n.notification_type', 'nt');
if ($limit) {
$qb->setMaxResults($limit);
}
if ($offset) {
$qb->setFirstResult($offset);
}
$results = $qb->getQuery()->getArrayResult();
return $results;
}
JavaScript中使用爲「加載更多」功能:
$(function() {
var offset = 0;
$("#load-more").click(function(e) {
e.preventDefault();
$.post("load-more-notifications", {offset: offset, limit: 30}, function(response) {
$(".notification-table-body").append(response);
offset += 30;
});
});
});