3

我只需要显示部分博客文章...带有指向完整博客文章的“阅读更多”链接。

主页:列出最后 5 个部分/介绍性帖子,并阅读更多内容。

这在 Docpad 中可行吗?

谢谢..

4

4 回答 4

4

可能由

    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>Читать далее &rarr;</strong></a></div>
                <% end %>
            </article>
        <% end %>

帖子

并添加到帖子

 <!-- Read more -->
于 2013-06-19T07:29:33.090 回答
0

如果您想要之前更多和之后的不同页面,您可以使用分页插件及其将文档拆分为多个页面示例

就像是:

---
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”以防止这种情况发生。

于 2013-07-02T10:50:58.823 回答
0

如果您不希望 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>
    """
于 2013-07-02T10:56:14.000 回答
0

正如另一种方式,我在 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
于 2015-08-26T10:29:52.840 回答