//routes/backend/category.js import express from 'express' const categoryRouter = express.Router() import category from '../../controllers/backend/category.js' categoryRouter.get('/', async function(req,res){ await category.getPage(req,res) }) categoryRouter.post('/', async function(req,res){ await category.createItem(req,res) }) categoryRouter.get('/edit/:id', async function(req,res){ await category.getPage(req,res) }) categoryRouter.post('/edit/:id', async function(req,res){ await category.updateItem(req,res) }) categoryRouter.get('/delete/:id', async function(req,res){ await category.deleteItem(req,res) }) categoryRouter.post('/paginate', async function(req,res){ await category.paginateItem(req,res) }) export default categoryRouter
//controllers/backend/category.js import category from '../../models/category.js' class Category{ async getPage(req,res){ if(req.session.user){ req.settings.pageTitle = 'ទំព័រជំពូក' req.settings.message = '' req.settings.route = '/admin/category' req.settings.type = "category" req.settings.items = await category.getItem(req,req.settings.dItemLimit) req.settings.count = await category.countItem(req) if(req.params.id){ req.settings.item = await category.getItem(req,req.settings.dItemLimit,req.params.id) } res.render('base', {data:req.settings}) }else{ res.redirect('/admin/login') } } async createItem(req,res){ if(req.session.user){ if(req.session.user.role == 'Admin'){ category.createItem(req) } res.redirect('/admin/category') }else{ res.redirect('/admin/login') } } async updateItem(req,res){ if(req.session.user){ if(req.session.user.role == 'Admin'){ category.updateItem(req) } res.redirect('/admin/category') }else{ res.redirect('/admin/login') } } async deleteItem(req,res){ if(req.session.user){ if(req.session.user.role == 'Admin'){ category.deleteItem(req) } res.redirect('/admin/category') }else{ res.redirect('/admin/login') } } async paginateItem(req,res){ if(req.session.user){ req.settings.type = 'category' req.settings.items = await category.getItem(req,req.settings.dItemLimit) res.json(req.settings) }else{ res.redirect('/admin/login') } } } export default new Category()
//models/category.js class Category{ async createItem(req){ const id = Date.now() + Math.round(Math.random() * 1E9).toString() let myCategory = { id: id, title: req.body.label, thumb: req.body.thumb, date: req.body.datetime } req.mydb.collection("categories").insertOne(myCategory) } async countItem(req){ return await req.mydb.collection('categories').countDocuments() } async getItem(req,amount=10,id=false){ if(id){ return await req.mydb.collection("categories").findOne({id:id}) }else if(req.body.page){ let page = req.body.page return await req.mydb.collection("categories").find().skip(amount*page).sort({date:-1,_id:-1}).limit(amount).toArray() }else if(amount === 'all'){ return await req.mydb.collection("categories").find({}, {title:1,_id:0}).sort({title:1}).toArray() }else{ return await req.mydb.collection("categories").find().sort({date:-1,_id:-1}).limit(amount).toArray() } } async updateItem(req){ const myquery = {id:req.params.id} let newvalue = {$set: { title: req.body.label, thumb: req.body.thumb, date: req.body.datetime }} await req.mydb.collection("categories").updateOne(myquery,newvalue) } async deleteItem(req){ const myquery = {id:req.params.id} await req.mydb.collection("categories").deleteOne(myquery) } } export default new Category()
<!--views/backend/index.ejs--> <link href="/styles/backend/index.css" rel="stylesheet"> <script src="/scripts/backend/paginate.js"></script> <section class="Header"> <div class="wrapper region"> <div class="logo"><%= data.pageTitle %></div> <form method="post" action="/search"> <select name="type"> <option>ការផ្សាយ</option> <option>ទំព័រស្តាទិក</option> <option>អ្នកប្រើប្រាស់</option> </select> <input type="text" name="q" placeholder="Search" required> <input type="submit" value="ស្វែងរក"> </form> <div class="logout"> <a href="/">ទំព័រមុខ</a> | <a href="/admin/login/logout">ចេញក្រៅ</a> </div> </div> </section> <section class="Body"> <div class="wrapper region"> <div class="sidebar"> <a href='/admin/post'><img src='/images/movie.png' /></a> <a href='/admin/post'>ការផ្សាយ</a> <a href='/admin/category'><img src='/images/category.png' /></a> <a href='/admin/category'>ជំពូក</a> <a href='/admin/book'><img src='/images/books.png' /></a> <a href='/admin/book'>សៀវភៅ</a> <a href='/admin/upload'><img src='/images/upload.png' /></a> <a href='/admin/upload'>Upload</a> <a href='/admin/user'><img src='/images/users.png' /></a> <a href='/admin/user'>អ្នកប្រើប្រាស់</a> <a href='/admin/setting'><img src='/images/setting.png' /></a> <a href='/admin/setting'>Setting</a> </div> <% if(data.route == '/admin/post'){ %> <%- include('./post.ejs') %> <% } else if(data.route == '/admin/category'){ %> <%- include('./category.ejs') %> <% } %> </div> </section> <section class="Footer Listing region"> <div class="info">សរុបទាំងអស់មានចំនួនៈ <%= data.count %></div> <ul class="list"> <% if('items' in data){ %> <% for(let item of data.items) { %> <li> <div class='thumb'> <a href='/<%= data.type %>/<%= item.id %>'><img src='<%= item.thumb %>'/></a> <% if('video' in item){ %> <% if(item.video !== ''){ %> <img class="play-icon" src="/images/play-icon"/> <% } %> <% } %> </div> <div class="title"> <a href="/<%= data.type %>/<%= item.id %>"><%= item.title %></a> <div><%= (new Date(item.date)).toLocaleDateString('it-IT') %></div> </div> <div class="edit"> <a href="<%= data.route %>/edit/<%= item.id %>"><img src="/images/edit.png"/></a> <a href="<%= data.route %>/delete/<%= item.id %>"><img src="/images/delete.png"/></a> </div> </li> <% } %> <% } %> </ul> <div class="paginate"> <img onclick="paginate('<%= data.route %>')" src='/images/load-more.png' /> </div> </section>
//public/scripts/backend/paginate.js let page = 0 function paginate(route){ $('.paginate img').attr('src', '/images/loading.gif') page += 1 $.post(`${route}/paginate`,{page:page},function(data, status){ appendItem(data.items,route,data) }) } function appendItem(items, route,data){ let html = '' if(items){ for(let item of items){ html += `<li>` html += `<div class='thumb'>` html += `<a href="/${data.type}/${item.id}"><img src="${item.thumb}"/></a>` if((item.video)&&(item.video !== '[]')){ html += `<img class="play-icon" src="/images/play.png"/>` } html += `</div>` html += `<div class="title">` html += `<a href="/${data.type}/${item.id}">${item.title}</a>` html += `<div>${new Date(item.date).toLocaleDateString()}</div>` html += `</div>` html += `<div class="edit">` html += `<a href="${route}/edit/${item.id}"><img src="/images/edit.png"/></a>` html += `<a href="${route}/delete/${item.id}"><img src="/images/delete.png"/></a>` html += `</div>` html += `</li>` } } $('.list').append(html) if(route === '/admin/user'){ $('.Listing .list li').css({'grid-template-columns':'13% auto 25%'}) $('.Listing .list li .thumb').css({'padding-top':'100%'}) $('.Listing .list li .thumb img').css({'border-radius':'50%'}) } $('.paginate img').attr('src', '/images/load-more.png') }