Hexo博客首页自动添加Read More标记-不在首页显示全部文章全部内容

原文来自

背景

hexo 在写作的时候,如果在文中添加(

解决过程

在 hexo 的 github 上看到有人说是跟主题有关,费死八难找到了代码的关键部分:

文件/themes/[主题名]/layout/_partial/article.ejs其中有一段为:

原文代码

无论是哪个主题,都有这个文件,请寻找以<div class="article-entry" ……为开始,往下找第一个
</div>结束的部分,此处就涉及到文章开头所阐述的问题




<div class="article-entry" itemprop="articleBody">
  <% if (post.excerpt && index) { %>
    <%- post.excerpt %>
    <% if (theme.excerpt_link) { %>
      <p class="article-more-link">
        <a href="<%- config.root %><%- post.path %>#more"><%= theme.excerpt_link %></a>
      </p>
    <% } %>
  <% } else { %>
      <%- post.content %>
  <% } %>
</div>

从代码上看,post.excerpt 就是加了 more 标记之后的文章摘要,如果 post.excerpt 存在且在首页的话,则显示文章的摘要和「Read More」按钮。当不符合上述条件(post.excerpt 存在且在首页),就显示整个文章的内容 post.content。

因为需要的是在文章里没有 more 标记时自动添加标记,所以需要改动的代码是要放在 else 后面的。我打算在文章没有 more 标记的时候,截取文章的前两段作为摘要,如果文章少于两段,则直接显示整篇文章内容。

处理方法

应该的逻辑代码大概是这样:

var count = 0
var content = post.content
while(count < 4) {
  content = content.replace('\n','x')
}
var br = content.indexOf('\n') // 第一个换行符所在的位置
if (br == -1 || !index) { // 如果不存在第一个换行符或者不在首页
  post.content // 显示整篇文章
} else {
  post.content.substring(0,br) // 截取到第二个换行符的位置
  // 显示「Read More」按钮
}

根据上述思路,修改后的代码为:

<div class="article-entry" itemprop="articleBody">
  <% if (post.excerpt && index) { %>
    <%- post.excerpt %>
    <% if (theme.excerpt_link) { %>
      <p class="article-more-link">
        <a href="<%- config.root %><%- post.path %>#more"><%= theme.excerpt_link %></a>
      </p>
    <% } %>
  <% } else { %>
    <% var br = post.content.indexOf('\n') %>
    <% if(br < 0 || !index) { %>
      <%- post.content %>
    <% } else { %>
      <%- post.content.substring(0, br) %>
      <% if (theme.excerpt_link) { %>
        <p class="article-more-link">
          <a href="<%- config.root %><%- post.path %>#more"><%= theme.excerpt_link %></a>
        </p>
      <% } %>
    <% } %>
  <% } %>
</div>

如果需要截取 N 个段落,则可以使用 replace 替换 content 里 N-1 次\n然后使用 indexOf 即可。但是发现如果所要截取的部分有一半处于代码片段的话,就会很惨不忍睹。所以建议使用这种方法自动截取摘要的话,尽量为自己博客有代码的文章手动截取摘要。

注意

** 注意一定要是在<div class="article-entry" ……为开始,往下找第一个
</div>结束的部分 **
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值