diff --git a/controllers/sites.js b/controllers/sites.js index 8649a9a..39df5bc 100644 --- a/controllers/sites.js +++ b/controllers/sites.js @@ -13,6 +13,16 @@ module.exports = { } }); }, + findBySlug: function(req, res){ + Site.findBySlug(req.params.slug, function(err, site){ + // if(err) throw err; + if(err) res.render('index', { title: 'Site is not found!'}); + else { + console.log("Site->Controller: findBySlug queried: " + site.site); + res.render('site', { title: site.site, site: site }); + } + }); + }, getHome: function(req, res){ Site.getAll(function(err, sites){ Visit.findUniqueSites(function(err, uniqueSites){ diff --git a/database/build.js b/database/build.js index 394e779..38df76c 100644 --- a/database/build.js +++ b/database/build.js @@ -33,6 +33,7 @@ con.connect(function(err) { unesco_unique int UNIQUE,\ img_url varchar(255),\ states varchar(255),\ + slug varchar(255) UNIQUE,\ PRIMARY KEY (id)\ )", function(err, res){ if (err) throw err; diff --git a/database/fill-sites.js b/database/fill-sites.js index 30cbe16..1b4bfd4 100644 --- a/database/fill-sites.js +++ b/database/fill-sites.js @@ -22,7 +22,13 @@ val.query.row.forEach(function(site){ s.push(site.unique_number); s.push(site.image_url); s.push(site.states); - // console.log(site); + // Generating a slug. + var slug = htmlToText.fromString(htmlToText.fromString(site.site), { wordwrap: false }); + var punctuationless = slug.replace(/[.',\/#!$%\^&\*;:{}=\-_`~()]/g,""); + var finalString = punctuationless.replace(/\s{2,}/g," "); + slug = finalString.toLowerCase().split(" ").join("-"); + s.push(slug); + console.log(slug); arr.push(s); }); @@ -32,7 +38,7 @@ con.connect(function(err) { if (err) throw err; console.log("Connected!"); - sql = "INSERT INTO sites (category, in_danger, date_inscribed, unesco_url, latitude, longitude, description, site, unesco_unique, img_url, states) VALUES ?"; + sql = "INSERT INTO sites (category, in_danger, date_inscribed, unesco_url, latitude, longitude, description, site, unesco_unique, img_url, states, slug) VALUES ?"; con.query(sql, [arr], function(err, res){ if (err) throw err; diff --git a/model/Site.js b/model/Site.js index 3813469..befd370 100644 --- a/model/Site.js +++ b/model/Site.js @@ -13,6 +13,7 @@ var Site = function(data){ this.unesco_unique = data.unesco_unique; this.img_url = data.img_url this.states = data.states; + this.slug = data.slug; }; // Finding the site by ID. @@ -30,6 +31,21 @@ Site.findById = function(id, callback){ }); }; +// Finding the site by slug. +Site.findBySlug = function(slug, callback){ + var sql = "SELECT * FROM sites WHERE slug=? limit 1"; + + con.query(sql, slug, function(err, result){ + if (err) return callback(err); + // if not site is found. + if (result[0] == undefined) callback(404); + else { + console.log("Site.findBySlug: " + result[0].site + " retrieved!"); + callback(err, new Site(result[0])); + } + }); +}; + // Finding all sites by IDs. Site.findAllById = function(ids, callback){ var sql = "SELECT * FROM sites WHERE id in (?)"; diff --git a/routes/sites.js b/routes/sites.js index ad6376d..a98bfe5 100644 --- a/routes/sites.js +++ b/routes/sites.js @@ -4,6 +4,7 @@ var router = express.Router(); var siteController = require('../controllers/sites'); router.get('/', siteController.getAll); -router.get('/:id', siteController.findById); +// router.get('/:id', siteController.findById); +router.get('/:slug', siteController.findBySlug); module.exports = router; diff --git a/views/index.pug b/views/index.pug index c43d7d8..279089a 100644 --- a/views/index.pug +++ b/views/index.pug @@ -34,7 +34,7 @@ block content if (i + 1 < states.length) | , else - h3= "Removed!" + //- h3= "Removed!" include footer.pug