我只需要显示部分博客文章...带有指向完整博客文章的“阅读更多”链接。
主页:列出最后 5 个部分/介绍性帖子,并阅读更多内容。
这在 Docpad 中可行吗?
谢谢..
可能由
getCuttedContent: (content) ->
i = content.search('<!-- Read more -->')
if i >= 0
content[0..i-1]
else
content
hasReadMore: (content) ->
content.search('<!-- Read more -->') >= 0
和
<% posts = @getCollection('posts') %>
<% for i in [@document.page.startIdx...@document.page.endIdx]: %>
<% document = posts.at(i).toJSON() %>
<article class="post">
<h3><span class="posts_date"><%= @formatDate(document.date) %></span> <a class="post_head" href="<%= document.url %>"><%= document.title %></a></h3>
<div class="post-content"><%- @getCuttedContent(String(document.contentRenderedWithoutLayouts)) %></div>
<% if @hasReadMore(String(document.contentRenderedWithoutLayouts)): %>
<div class="read_more"><a href="<%= document.url %>"><strong>Читать далее →</strong></a></div>
<% end %>
</article>
<% end %>
并添加到帖子
<!-- Read more -->
如果您想要之前更多和之后的不同页面,您可以使用分页插件及其将文档拆分为多个页面示例。
就像是:
---
title: 'Awesome Pages Post'
layout: 'default'
isPaged: true
pageCount: 2
pageSize: 1
---
<!-- Page Content -->
before more
if @document.page.number is 1: %>
after more
<% end %>
<!-- Page Listing -->
<% if @document.page.number is 0: %>
<!-- Read More Button -->
<a href="<%= @getNextPage() %>">Read more!</a></li>
<% end %>
应该做的伎俩。然后,您可以自定义逻辑来处理不同的用例。例如,ths 将在两个页面上显示“before more”文本。但是如果你愿意的话,你可以在“is page 0”检查中包含“before more”以防止这种情况发生。
如果您不希望 before more 和 after more 使用不同的页面,而只是想在内容列表中使用 before more。您可以将之前的更多内容放在“描述”元数据属性中,如下所示:
--- cson
title: 'Awesome Pages Post"
layout: "default"
description: """
Before more content goes here
"""
---
After more content (the actual page content) goes here.
然后,您可以通过执行以下操作在内容列表中显示描述:
<%- post.description or post.contentRenderedWithoutLayouts %>
如果未定义描述,它将回退到完整内容。
如果您希望能够呈现您的描述,文本插件可以满足您的需求。将您的元数据描述更改为以下内容:
description: """
<t render="markdown">With the text plugin **you can render anything providing you have the plugins installed!**</t>
"""
正如另一种方式,我在 docpad.coffee 中使用以下方法截断帖子以显示在主页上。它处理链接,这将使文本看起来更长,并且您可能最终会在中间中断
# Used for shortening a post
truncateText: (content,trimTo) ->
trimTo = trimTo || 200
output = content.substr(0,trimTo).trim()
#remove anchor tags as they don't show up on the page
nolinks = output.replace(/<a(\s[^>]*)?>.*?<\/a>/ig,"")
#check if there is a difference in length - if so add this
#difference to the trimTo length - add the text length that will not show
#up in the rendered HTML
diff = output.length - nolinks.length
output = content.substr(0,trimTo + diff)
#find the last space so that we don't break the text
#in the middle of a word
i = output.lastIndexOf(' ',output.length-1)
output = output.substr(0,i)+"..."
count1 = (output.match(/<blockquote>/g) || []).length
count2 = (output.match(/<\/blockquote>/g) || []).length
if count1 > count2
output += "</blockquote>"
return output