From a6b519a4c7454c6368848fd3e5035bf99e9c750c Mon Sep 17 00:00:00 2001 From: 65160258 <65160258@go.buu.ac.th> Date: Mon, 24 Mar 2025 18:38:52 +0700 Subject: [PATCH] category update --- app.js | 43 +++++++++++++++++++++++++++++++++---------- views/pages/index.ejs | 12 ++++++++++++ 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/app.js b/app.js index 4d170e5..01bdfd8 100644 --- a/app.js +++ b/app.js @@ -52,21 +52,44 @@ app.get('/', (req, res) => { app.get('/index', async (req, res) => { if (!req.session.user) return res.redirect('/'); try { - // ดึง posts จากฐานข้อมูล (หากต้องการ) - const [posts] = await db.query( - `SELECT p.*, u.username, c.name AS category_name - FROM posts p - JOIN users u ON p.user_id = u.id - JOIN categories c ON p.category_id = c.id - ORDER BY p.created_at DESC` - ); - res.render('pages/index', { posts, user: req.session.user }); + const categoryId = req.query.category || ''; // รับค่า category จาก query parameter + const params = []; + + let query = ` + SELECT p.*, u.username, c.name AS category_name + FROM posts p + JOIN users u ON p.user_id = u.id + JOIN categories c ON p.category_id = c.id + `; + + if (categoryId) { + query += ` WHERE p.category_id = ?`; + params.push(categoryId); + } + + query += ` ORDER BY p.created_at DESC`; + + const [posts] = await db.query(query, params); + const [categories] = await db.query(`SELECT * FROM categories`); // ดึงรายการ category ทั้งหมด + + res.render('pages/index', { + posts, + categories, + selectedCategory: categoryId, + user: req.session.user + }); } catch (error) { console.error('Error fetching posts:', error); - res.render('pages/index', { posts: [], user: req.session.user }); + res.render('pages/index', { + posts: [], + categories: [], + selectedCategory: '', + user: req.session.user + }); } }); + // ค้นหาบทความ (ค้นหาจาก title) app.get('/index/search', async (req, res) => { if (!req.session.user) return res.redirect('/'); diff --git a/views/pages/index.ejs b/views/pages/index.ejs index efebb49..3ca9ac5 100644 --- a/views/pages/index.ejs +++ b/views/pages/index.ejs @@ -4,6 +4,18 @@ <div class="main-content"> <div class="d-flex justify-content-between align-items-center mb-5"> <h1 class="h2 fw-bold text-primary">All Posts</h1> + <form action="/index" method="GET" class="mb-4"> + <label for="category" class="form-label">Filter by Category:</label> + <select name="category" id="category" class="form-select w-auto d-inline-block" onchange="this.form.submit()"> + <option value="">All Categories</option> + <% categories.forEach(category => { %> + <option value="<%= category.id %>" <%= selectedCategory == category.id ? 'selected' : '' %>> + <%= category.name %> + </option> + <% }) %> + </select> + </form> + <div class="badge bg-primary rounded-pill"><%= posts.length %> posts</div> </div> -- GitLab