2016-06-25 4 views
0

私はすべてのページ(layout.ejsのサイドバー)に表示されるサイドバーを持つようにhexoを使いたいと思います。ヘキサのlayout.ejsのsite.postsのポストから繰り返しの順序を変更するにはどうすればよいですか?

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

しかしsite.postsが正しい順序であるようには見えない。私のテーマで

私はこのようになりますsidebar.ejsスニペットを持っています。投稿作成日の順番では表示されません。

index.ejsには、投稿が正しい順序で表示されるセクションがあります(page.postsを使用)。 layout.ejsはsidebar.ejsを含み、私がページの変数を参照する場合は、ページが見つからないエラーをスローするように見えるので、

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

しかし、私はsidebar.ejsでpage.postsを使用することはできません。

site.postsを正しく注文する方法はありますか?またはlayout.ejsからpage.postsを参照する方法?または私の希望の効果を達成するための別の方法は?

ありがとうございました。

+0

:ここ

は、以下の私のsidebar.ejsからの抜粋ですhttp://www.codeblocq.com/2016/03/Create-an -Hexo-Theme-Part-1-Index/ – maxfowler

答えて

1

Javascriptを使用してsidebar.ejsのsite.postsをソートすることができました。私のテーマは、このチュートリアルのオフに基づいていた

<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> 
+0

今日(2017年1月15日)これを試してみました。他の答えはしませんでした。私が使用した特定の構文で更新しました。問題は 'site.posts'が* real *配列ではないので、他の答えの' posts.sort'は決して呼び出されないということです。 – rockerest

2
<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>