2

すべてのページにサイドバー (layout.ejs のサイドバー) が表示されるように hexo を使用したいと思います。このサイドバーには、すべての投稿へのリンクが時系列の逆順で表示されます。

私のテーマには、次のような 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
<% }); %>

ただし、layout.ejs に sidebar.ejs が含まれており、page 変数を参照するとページが見つからないというエラーが発生するようで、sidebar.ejs で page.posts を使用することはできません。

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 に答える
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 に答える