2016-06-25 16 views
0

Ich möchte Hexo verwenden, so dass ich eine Seitenleiste habe, die auf jeder Seite erscheint (eine Seitenleiste in layout.ejs), die Links zu allen meinen Posts in umgekehrter chronologischer Reihenfolge hat.Wie kann ich die Reihenfolge der Iteration über die Posts in site.posts in layout.ejs in hexo ändern?

In meinem Thema Ich habe einen sidebar.ejs Snippet, das wie folgt aussieht:

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

Aber site.posts erscheint nicht in der richtigen Reihenfolge zu sein. Es wird nicht in der Reihenfolge des Post-Erstellungsdatums angezeigt.

In index.ejs habe ich einen Bereich, wo die Beiträge in der richtigen Reihenfolge angezeigt werden (mit page.posts).

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

Allerdings kann ich nicht page.posts in sidebar.ejs verwenden, da layout.ejs sidebar.ejs enthält und es scheint, einen Fehler zu werfen, dass Seite nicht, wenn ich die Seite variable Referenz gefunden wird.

Gibt es eine Möglichkeit, site.posts korrekt zu bestellen? Oder eine Möglichkeit, page.posts aus layout.ejs zu referenzieren? Oder eine andere Art, meinen gewünschten Effekt zu erzielen?

Vielen Dank für jede Hilfe.

+0

mein Thema beruhte dieses Tutorial aus: http://www.codeblocq.com/2016/03/Create-an -Hexo-Theme-Part-1-Index/ – maxfowler

Antwort

1

Ich konnte site.posts in sidebar.ejs mit Javascript sortieren. Hier

ist der Ausschnitt aus meinem sidebar.ejs unter:

<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

Habe es heute (15. Januar 2017) versucht und es hat funktioniert. Die andere Antwort nicht. Ich habe die spezifische Syntax aktualisiert, die ich verwendet habe. Ich bin überzeugt, das Problem ist, dass 'site.posts' kein * real * -Array ist, so dass' posts.sort' in der anderen Antwort nie aufgerufen wurde. – 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>