[Muestra] los artículos más populares y recientes en el home

This commit is contained in:
Ricardo García Jiménez 2022-02-19 15:36:31 -06:00
parent 0cb93b180c
commit a0b6bdd18d
3 changed files with 62 additions and 3 deletions

View File

@ -21,7 +21,7 @@ defined('NABU') || exit();
require_once 'models/articlesModel.php';
class articlesController {
private const limit = 9;
private const limit = 10;
// Renderiza la página para publicar artículos
// y envía un artículo para su aprobación con el método POST.

View File

@ -25,8 +25,10 @@ class blogController {
$blogModel = new blogModel();
$articles = array();
$recent_articles = array();
$articles = $blogModel -> popular(5);
$recent_articles = $blogModel -> recent(10);
unset($blogModel);
$messages = messages::get();

View File

@ -23,6 +23,63 @@ class blogModel extends dbConnection {
parent::__construct();
}
// @return un array asociativo de los artículos más populares.
public function popular(int $limit) {
$query = 'SELECT a.title, a.synopsis, a.slug, a.cover, u.username AS author, p.avatar, ' .
'COUNT(c.article_id) AS comments, COUNT(f.article_id) AS likes ' .
'FROM articles AS a ' .
'INNER JOIN users AS u ON a.user_id = u.id ' .
'LEFT JOIN profiles AS p ON u.id = p.id ' .
'LEFT JOIN comments AS c ON a.id = c.article_id ' .
'LEFT JOIN favorites AS f ON a.id = f.article_id ' .
'WHERE a.authorized = TRUE GROUP BY a.id ORDER BY likes DESC, comments DESC LIMIT ?';
try {
$prepare = $this -> pdo -> prepare($query);
$prepare -> execute(array($limit));
$articles = $prepare -> fetchAll();
if (empty($articles))
$articles = array();
return $articles;
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para listar los artículos más populares');
}
}
// @return un array asociativo de los artículos publicados recientemente.
public function recent(int $limit) {
$query = 'SELECT a.title, a.synopsis, a.slug, a.cover, u.username AS author, p.avatar, ' .
'COUNT(c.article_id) AS comments, COUNT(f.article_id) AS likes ' .
'FROM articles AS a ' .
'INNER JOIN users AS u ON a.user_id = u.id ' .
'LEFT JOIN profiles AS p ON u.id = p.id ' .
'LEFT JOIN comments AS c ON a.id = c.article_id ' .
'LEFT JOIN favorites AS f ON a.id = f.article_id ' .
'WHERE a.authorized = TRUE GROUP BY a.id ORDER BY a.modification_date DESC LIMIT ?';
try {
$prepare = $this -> pdo -> prepare($query);
$prepare -> execute(array($limit));
$articles = $prepare -> fetchAll();
if (empty($articles))
$articles = array();
return $articles;
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para listar los artículos más recientes');
}
}
public function __destruct() {
parent::__destruct();
$this -> pdo = null;