2

我想使用 hexo,这样我就有一个出现在每个页面上的侧边栏(layout.ejs 中的一个侧边栏),它按时间倒序链接到我的所有帖子。

在我的主题中,我有一个 sidebar.ejs 片段,如下所示:

<div class="sidebar-links-wrapper">
     <% site.posts.each(function(item){ %>
            <a href="<%- config.root %><%- item.path %>" class="navlink"><%- item.title %></a>
       <% }); %>
</div>

但 site.posts 的顺序似乎不正确。它不按帖子创建日期的顺序显示。

在 index.ejs 中,我有一个部分以正确的顺序显示帖子(使用 page.posts)。

<% page.posts.each(function(item){ %>
 -- some other stuff
<% }); %>

但是,我不能在 sidebar.ejs 中使用 page.posts,因为 layout.ejs 包含 sidebar.ejs,如果我引用 page 变量,它似乎会抛出一个错误,即找不到页面。

有没有办法正确订购site.posts?或者从 layout.ejs 引用 page.posts 的方法?或者用不同的方式来达到我想要的效果?

感谢您的任何帮助。

4

3 回答 3

3
<div class="sidebar-links-wrapper">
    <%
        // Fast array clone
        var posts = site.posts.slice(0);
        posts.sort(function(a, b){
          return a.date < b.date
        });
    %>
    <% posts.forEach( function(item, i) { %>
        <a href="<%- config.root %><%- item.path %>" class="navlink"><%- item.title %></a>
    <% } %>
</div>
于 2016-06-25T22:07:11.403 回答
2

在 Hexo 3 中:

<% site.posts.sort('date', -1).each(function(item){ %>
     <%- item.title %></a>
<% }); %>
于 2018-03-28T15:47:27.397 回答
1

我能够使用 Javascript 对 sidebar.ejs 中的 site.posts 进行排序。

下面是我的 sidebar.ejs 的片段:

 <div class="sidebar-links-wrapper">
         <%
             var posts = [];
             site.posts.forEach(function(item){
                 posts.push(item);
             });
             posts.sort(function(a, b){
                 return a.date < b.date
             });
       %>
         <% for (i = 0; i < posts.length; i++) {  var item=posts[i]; %>
                <a href="<%- config.root %><%- item.path %>" class="navlink"><%- item.title %></a>
           <% }; %>
    </div>
于 2016-06-25T19:23:29.883 回答