2014-10-07 53 views
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; 
    }); 
}); 
}); 

回答

0

通過利用getAllNotifications(null, 30)存儲庫方法的現有參數,我可以設置初始頁面加載的限制,而不會干擾加載更多功能。

public function historyAction() 
{ 
    $this->view->pageTitle = "Notification Center"; 
    $this->view->headScript()->appendFile("/js/tableSorter/jquery.tablesorter.min.js"); 

    $this->view->notifications = \Fisdap\EntityUtils::getRepository('Notification')->getAllNotifications(null, 30); 
} 
相關問題