鍍金池/ 教程/ HTML/ 第8章 增加存檔頁面
第9章 增加標(biāo)簽和標(biāo)簽頁面
番外篇之——使用 Mongoose
番外篇之——使用 Async
第4章 實(shí)現(xiàn)用戶頁面和文章頁面
第12章 增加友情鏈接
第14章 增加頭像
第7章 實(shí)現(xiàn)分頁功能
第5章 增加編輯與刪除功能
第11章 增加文章檢索功能
第3章 增加文件上傳功能
番外篇之——部署到 Heroku
第2章 使用 Markdown
第13章 增加404頁面
第16章 增加日志功能
第1章 一個(gè)簡(jiǎn)單的博客
番外篇之——使用 Handlebars
第10章 增加pv統(tǒng)計(jì)和留言統(tǒng)計(jì)
番外篇之——使用 Passport
第15章 增加轉(zhuǎn)載功能和轉(zhuǎn)載統(tǒng)計(jì)
第8章 增加存檔頁面
番外篇之——使用 generic pool
番外篇之——使用 _id 查詢
番外篇之——使用 Disqus
番外篇之——使用 KindEditor
第6章 實(shí)現(xiàn)留言功能

第8章 增加存檔頁面

現(xiàn)在我們來給博客增加存檔功能,當(dāng)進(jìn)入存檔頁時(shí),按年份和日期的降序列出所有的文章。

首先,我們?cè)谥黜撟髠?cè)導(dǎo)航中添加存檔頁(archive)的鏈接,修改 header.ejs,在 home 下添加一行代碼:

<span><a title="存檔" href="/archive">archive</a></span>

打開 post.js ,在最后添加以下代碼:

//返回所有文章存檔信息
Post.getArchive = function(callback) {
  //打開數(shù)據(jù)庫(kù)
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //讀取 posts 集合
    db.collection('posts', function (err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      //返回只包含 name、time、title 屬性的文檔組成的存檔數(shù)組
      collection.find({}, {
        "name": 1,
        "time": 1,
        "title": 1
      }).sort({
        time: -1
      }).toArray(function (err, docs) {
        mongodb.close();
        if (err) {
          return callback(err);
        }
        callback(null, docs);
      });
    });
  });
};

接下來我們?cè)?index.js 中添加 /archive 的路由規(guī)則。打開 index.js ,在 app.get('/u/:name') 前添加以下代碼:

app.get('/archive', function (req, res) {
  Post.getArchive(function (err, posts) {
    if (err) {
      req.flash('error', err); 
      return res.redirect('/');
    }
    res.render('archive', {
      title: '存檔',
      posts: posts,
      user: req.session.user,
      success: req.flash('success').toString(),
      error: req.flash('error').toString()
    });
  });
});

在 views 文件夾下新建 archive.ejs 模版文件,添加如下代碼:

<%- include header %>
<ul class="archive">
<% var lastYear = 0 %>
<% posts.forEach(function (post, index) { %>
  <% if (lastYear != post.time.year) { %>
    <li><h3><%= post.time.year %></h3></li>
  <% lastYear=post.time.year } %>
  <li><time><%= post.time.day %></time></li>
  <li><a href="/u/<%= post.name %>/<%= post.time.day %>/<%= post.title %>"><%= post.title %></a></li>
<% }) %>
</ul>
<%- include footer %>

這里我們通過在模版中設(shè)置一個(gè) lastYear 變量判斷是否和上次已經(jīng)顯示的年份相同,相同則不再顯示年份,不同則顯示。

最后,在 style.css 中添加如下樣式:

.archive{list-style:none;line-height:28px;}
.archive h3{margin:0.5em 0;}
.archive time{float:left;font-size:14px;color:#999999;margin-right:1.2em;}

現(xiàn)在,我們?cè)黾恿宋恼碌拇鏅n頁面。