diff options
| author | 2012-12-08 02:50:42 +0100 | |
|---|---|---|
| committer | 2012-12-08 02:50:42 +0100 | |
| commit | a4173dd2e979773f9a65b51c20ef0708ba1474d5 (patch) | |
| tree | bba54686152793b0d4dae1bca721384c9f1b4da2 /app/models/Entry.php | |
| parent | adc704c3d75518fd7ed7a32b9ed21d9b7eb71c99 (diff) | |
On simule la pagination pour optimiser les requêtes en BDD (évite de tout charger puis d'en jeter les 3/4)
Diffstat (limited to 'app/models/Entry.php')
| -rwxr-xr-x | app/models/Entry.php | 86 |
1 files changed, 68 insertions, 18 deletions
diff --git a/app/models/Entry.php b/app/models/Entry.php index fb7399fec..d434e99f6 100755 --- a/app/models/Entry.php +++ b/app/models/Entry.php @@ -214,7 +214,18 @@ class EntryDAO extends Model_pdo { $order = ''; } - $sql = 'SELECT * FROM entry' . $where . ' ORDER BY date' . $order; + $sql = 'SELECT COUNT(*) AS count FROM entry' . $where; + $stm = $this->bd->prepare ($sql); + $stm->execute (); + $res = $stm->fetchAll (PDO::FETCH_ASSOC); + $this->nbItems = $res[0]['count']; + + $deb = ($this->currentPage - 1) * $this->nbItemsPerPage; + $fin = $this->nbItemsPerPage; + + $sql = 'SELECT * FROM entry' . $where + . ' ORDER BY date' . $order + . ' LIMIT ' . $deb . ', ' . $fin; $stm = $this->bd->prepare ($sql); $stm->execute (); @@ -233,7 +244,18 @@ class EntryDAO extends Model_pdo { $order = ''; } - $sql = 'SELECT * FROM entry' . $where . ' ORDER BY date' . $order; + $sql = 'SELECT COUNT(*) AS count FROM entry' . $where; + $stm = $this->bd->prepare ($sql); + $stm->execute (); + $res = $stm->fetchAll (PDO::FETCH_ASSOC); + $this->nbItems = $res[0]['count']; + + $deb = ($this->currentPage - 1) * $this->nbItemsPerPage; + $fin = $this->nbItemsPerPage; + + $sql = 'SELECT * FROM entry' . $where + . ' ORDER BY date' . $order + . ' LIMIT ' . $deb . ', ' . $fin; $stm = $this->bd->prepare ($sql); $stm->execute (); @@ -253,7 +275,18 @@ class EntryDAO extends Model_pdo { $order = ''; } - $sql = 'SELECT * FROM entry e INNER JOIN feed f ON e.id_feed = f.id' . $where . ' ORDER BY date' . $order; + $sql = 'SELECT COUNT(*) AS count FROM entry e INNER JOIN feed f ON e.id_feed = f.id' . $where; + $stm = $this->bd->prepare ($sql); + $values = array ($cat); + $stm->execute ($values); + $res = $stm->fetchAll (PDO::FETCH_ASSOC); + $this->nbItems = $res[0]['count']; + + $deb = ($this->currentPage - 1) * $this->nbItemsPerPage; + $fin = $this->nbItemsPerPage; + $sql = 'SELECT * FROM entry e INNER JOIN feed f ON e.id_feed = f.id' . $where + . ' ORDER BY date' . $order + . ' LIMIT ' . $deb . ', ' . $fin; $stm = $this->bd->prepare ($sql); @@ -290,31 +323,48 @@ class EntryDAO extends Model_pdo { return $res[0]['count']; } + + // gestion de la pagination directement via le DAO + private $nbItemsPerPage = 1; + private $currentPage = 1; + private $nbItems = 0; + public function _nbItemsPerPage ($value) { + $this->nbItemsPerPage = $value; + } + public function _currentPage ($value) { + $this->currentPage = $value; + } + + public function getPaginator ($entries) { + $paginator = new Paginator ($entries); + $paginator->_nbItems ($this->nbItems); + $paginator->_nbItemsPerPage ($this->nbItemsPerPage); + $paginator->_currentPage ($this->currentPage); + + return $paginator; + } } class HelperEntry { public static function daoToEntry ($listDAO, $mode = 'all', $favorite = false) { $list = array (); - + if (!is_array ($listDAO)) { $listDAO = array ($listDAO); } foreach ($listDAO as $key => $dao) { - if (($mode != 'not_read' || !$dao['is_read']) - && ($favorite == false || $dao['is_favorite'])) { - $list[$key] = new Entry ( - $dao['id_feed'], - $dao['guid'], - $dao['title'], - $dao['author'], - unserialize (gzinflate (base64_decode ($dao['content']))), - $dao['link'], - $dao['date'], - $dao['is_read'], - $dao['is_favorite'] - ); - } + $list[$key] = new Entry ( + $dao['id_feed'], + $dao['guid'], + $dao['title'], + $dao['author'], + unserialize (gzinflate (base64_decode ($dao['content']))), + $dao['link'], + $dao['date'], + $dao['is_read'], + $dao['is_favorite'] + ); } return $list; |
