summaryrefslogtreecommitdiff
path: root/app/models/Entry.php
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2012-12-08 02:50:42 +0100
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2012-12-08 02:50:42 +0100
commita4173dd2e979773f9a65b51c20ef0708ba1474d5 (patch)
treebba54686152793b0d4dae1bca721384c9f1b4da2 /app/models/Entry.php
parentadc704c3d75518fd7ed7a32b9ed21d9b7eb71c99 (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-xapp/models/Entry.php86
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;