即刻短文的三种部署方案

即刻短文的三种部署方案

原文来源

{% link Butterfly的魔改教程:即刻短文页,亦小封,https://meuicat.com/posts/1cdf15f7.html %} {% link 即刻短文(瀑布流)部署方案,安知鱼,https://blog.anheyu.com/posts/3753.html %} {% link Heo即刻短文:分享自我与精彩生活,随风起,https://blog.bywind.xyz/posts/10b1d3b5.html %}

注意:本章节没有bbtalk,artitalk和ispeak(配置麻烦),因为教程方案有些老需要额外再出教程

配置部署方案(icat方案)

{% note info flat %} 提示:此方案有三种不同类型,可能导致无法正常显示(可以选择去原作者那里查看,本篇只是收集并整理进来) {% endnote %}

功能对比

todolist本地yml*动态JSON动态Memos
瀑布流✔️支持支持✔️支持✔️支持
图片灯箱✔️支持支持✔️支持✔️支持
多图显示✔️支持支持✔️支持✔️支持
外部链接✔️支持支持✔️支持✔️支持
自定标识✔️支持✔️支持✔️支持
快速评论✔️支持✔️支持✔️支持
音乐模块✔️支持✔️支持✔️支持
视频模块✔️支持✔️支持✔️支持
说说置顶✔️支持✔️支持✔️支持

部署历程

创建数据

创建页面配置

创建 blogRoot/source/essay/index.md 页面,配置以下内容:

MARKDOWN
---
title: 即刻短文
date: 2023-01-17 13:38:17
type: essay
top_img: false
aside: false
top_page: true
top_bg: https://img.meuicat.com/banner
top_item: 即刻短文
top_title: 封の碎碎念
top_tips: 使用 即刻短文动态部署版 构建
top_link: /about/
top_text: 关于博主
---
新建页面内容

(1).新建页面选择(在配置文件中进行设置) 创建 blogRoot/themes/butterfly/layout/includes/page/essay.pug 页面文件,并新增以下内容:

PUG
#icat-bber
    section.icat-page
        case theme.essay.mode
            when 'local'
                include ./essay/local.pug
            when 'json'
                include ./essay/json.pug
            when 'memos'
                include ./essay/memos.pug

(2).新建静态本地 创建 blogRoot/themes/butterfly/layout/includes/page/essay/local.pug 页面文件,并新增以下内容 (注意该页面中可能存在部分 fontawesome 图标 需要自行替换)

(3).新建动态JSON 新建 blogRoot/themes/butterfly/layout/includes/page/essay/json.pug 页面文件,并新增以下内容 (注意该页面中可能存在部分 fontawesome 图标 需要自行替换)

(4).新建MEMOS页面 创建 blogRoot/themes/butterfly/layout/includes/page/essay/memos.pug 页面文件,并新增以下内容 (注意该页面中可能存在部分 fontawesome 图标 需要自行替换)

(5).修改页面文件(页面匹配markdown的type) 修改 blogRoot/themes/butterfly/layout/page.pug 来使页面匹配 ( + 号直接删除 即是正常缩进)

PUG
      when 'categories'
        include includes/page/categories.pug
+      when 'essay'
+        include includes/page/essay.pug
      default
        include includes/page/default-page.pug

(6).开启PJAX设置(可选) 【可选】在 _config.butterfly.yml 主题配置文件中开启站点的 pjax

YML
# Pjax
# https://github.com/MoOx/pjax
# 当用户点击链接,通过ajax更新页面需要变化的部分,然后使用HTML5的pushState修改浏览器的URL地址;这样可以不用重复加载相同的资源(css/js), 从而提升网页的加载速度
# 使用pjax后,一些自己DIY的js可能会无效,跳转页面时需要重新调用;使用pjax后,一些个别页面加载的js/css,将会改为所有页面都加载
# --------------------------------------
pjax:
  enable: true
  exclude:
    # - xxxx
    # - xxxx

(7).设置样式(styl或者css) 新建 blogRoot/themes/butterfly/source/css/_page/essay.styl 样式文件,并新增以下内容:

{% folding cyan, 可选CSS样式 %} 新建 blogRoot/source/css/essay.css 样式文件,并新增以下内容 (也可以在自建的css文件里新增内容)

(8).添加css样式到配置文件 在 _config.butterfly.yml 主题配置文件中 inject 下的 head 引入 essay.css 样式文件:

YML
  ···

inject:
  head:
    - <link rel="stylesheet" href="/css/essay.css"> # 即刻短文样式
  bottom:
    - ···

  ···

{% endfolding %}

(9).新建js文件 创建 blogRoot/source/js/essay.js 文件,并新增以下内容,用来处理即刻短文的逻辑 (或写在自建的公共 js 中也可以)

创建 blogRoot/source/js/waterfall.js 文件,并新增以下内容,用于处理瀑布流 (或写在公共 js 中也可以)

(10).引入js文件 在 _config.butterfly.yml 主题配置文件中 inject 下的 bottom 引入 essay.js 和 waterfall.js

YML
  ···

inject:
  head:
    - ···
  bottom:
    - <script async src="/js/waterfall.js"></script> # 瀑布流JS
    - <script defer src="/js/essay.js"></script> # 即刻逻辑文件

  ···

(11).添加以下配置 在 _config.butterfly.yml 主题配置文件中,新增以下配置项

YML
# essay 即刻短文
# MeuiCat设计
# https://meuicat.com/blog/67/
# --------------------------------------

essay:
  enable: true
  # 即刻短文仅展示前n条
  # Jike short text only shows the first n
  strip: 50
  mode: memos # local:本地静态 / json:动态json / memos:动态Memos
  mode_link: https://memos.meuicat.com/api/v1/memo?creatorId=1&tag=说说 #动态模式地址

创建数据内容

{% tabs 数据模式 %}

创建 blogRoot/source/_data/essay.yml 文件,并新增以下内容

JSON文件可参照以下格式

Memos用法:

MARKDOWN
#说说 {标识符} 我是内容 [我是链接](https://meuicat.com) ![](https://img.meuicat.cn/blog/8.png)
<!-- 常规写法 -->

#说说 网易云音乐 {music netease 29947420 }
#说说 腾讯音乐 {music tencent 330977131 }
<!-- 音乐写法 -->

#说说 普通视频 { player https://v.meuicat.com/video/1.mp4 }
#说说 哔哩哔哩手机视频 { bilibili https://m.bilibili.com/video/BV17T4y1A7eW }
#说说 哔哩哔哩网页视频 { bilibili https://www.bilibili.com/video/BV17T4y1A7eW/?spm_id_from=333.1007.tianma.1-3-3.click }
<!-- 视频写法 -->

#说说 #top
我是内容 ![我是图片描述](https://img.meuicat.cn/blog/8.png)![](https://img.meuicat.cn/blog/8.png)
<!-- 置顶写法 -->

{% endtabs %}

即刻Mini

(1).创建页面内容 新增 blogRoot/themes/butterfly/layout/includes/mixins/post-ui.pug 页面内容 ( + 号直接删除 即是正常缩进)

PUG
mixin postUI(posts)
  - let newTitle= newPost()
+  if theme.essay.enable && theme.essay.home_mini
+    include ./essay_mini.pug
  each article , index in page.posts.data
    .recent-post-item
  
  ···

创建 blogRoot/themes/butterfly/layout/includes/mixins/essay_mini.pug 页面,并新增以下内容 (注意该内容中 fontawesome 图标 需要自行替换)

(2).新建样式文件

新建 blogRoot/themes/butterfly/source/css/_page/homepage.styl 样式文件内容 ( + 号直接删除 即是正常缩进)

{% folding cyan, 可选CSS样式 %}

新增 blogRoot/source/css/essay.css 样式文件内容 (也可以在自建的css文件里新增内容)

{% endfolding %} (3).新建js文件

新增 blogRoot/source/js/essay.js 文件内容 (或写在自建的公共 js 中也可以)

在 _config.butterfly.yml 主题配置文件中 inject 下的 bottom 引入 essay.js 和 waterfall.js

YML
  ···

inject:
  head:
    - ···
  bottom:
    - <script src="https://cdn.staticfile.net/Swiper/10.3.1/swiper-bundle.min.js"></script> # Swiper - 轮播动画库

  ···

随风起(即刻短文)

支持类型

列表是否支持
图片
链接
音乐
瀑布流
首页滚动
位置信息

创建数据

在source/_data目录下创建essay.yml:

配置参数介绍

参数含义
content即刻短文内容
image图片
link链接
music.server音乐服务商(tencentQQ,netease网易云,,kugou酷狗, xiami虾米)
music.id音乐id
location位置信息
date日期

创建md页面

创建md页面,在控制台输入hexo new page essay,生成文件在source/essay/index.md

MARKDOWN
---
title: 即刻短文
date: 2022-12-20 22:06:17
comments: true
aside: false
top_img: false
type: essay
---

创建页面文件

在themes/butterfly/layout/includes/page目录下创建essay.pug

修改Page文件

修改themes/butterfly/layout/page.pug

PUG
    case page.type
      when 'tags'
        include includes/page/tags.pug
      when 'link'
        include includes/page/flink.pug
+      when 'essay'
+        include includes/page/essay.pug

首页即刻(可选)

新建themes/butterfly/layout/includes/bbTimeList.pug

首页即刻(可选)

(1).新建首页轮播内容

新建themes/butterfly/layout/includes/bbTimeList.pug

PUG
#bbTimeList.bbTimeList.container
    i.bber-logo.iconfont.icon-bblogo(onclick=`pjax.loadUrl("/essay/")`,title="即刻短文",style="font-size: 2rem;")
    #bbtalk.swiper-container.swiper-no-swiping(tabindex="-1")
        #bber-talk.swiper-wrapper(onclick=`pjax.loadUrl("/essay/")`)
            each i in site.data.essay
                each item, index in i.essay_list
                    if index < 10
                        - var contentText = item.content
                        if item.image
                            - contentText= item.content + ' [图片]'
                        else if item.music
                            - contentText= item.content + ' [音乐]'
                        .li-style.swiper-slide= contentText

    i.bber-gotobb.fas.fa-arrow-circle-right(onclick=`pjax.loadUrl("/essay/")`,title="查看全文")
script(src='https://cdn.jsdelivr.net/npm/swiper/swiper-bundle.min.js',data-pjax='')

(2).引入到主页

PUG
block content
  include ./includes/mixins/post-ui.pug
  #recent-posts.recent-posts
    include includes/categoryList.pug
+    include includes/bbTimeList.pug
    +postUI
    include includes/pagination.pug

(3).引入样式文件

YML
inject:
  head:
        - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper/swiper-bundle.min.css">
        - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/js-heo@1.0.11/bb/showbb_in_index.css">
        - <script src="https://cdn.staticaly.com/gh/haonan15/CDN@main/source/waterfall.min.js"></script> # 瀑布流

(4).添加自定义js

JS
if (document.querySelector('#bber-talk')) {
      var swiper = new Swiper('.swiper-container', {
        direction: 'vertical', 
        loop: true,
        autoplay: {
        delay: 3000,
        pauseOnMouseEnter: true
      },
      });
    }

(5).添加CSS文件

安知鱼(即刻短文)

功能对比

todolist支持度
图片灯箱
多图片多行显示
外部链接
瀑布流
首页滚动
快速评论
本地修改yml发布
aplayer
单曲音乐
插件版本

添加颜色内容

详情可以前往这个文章查看颜色样式

创建数据

创建 source/_data/essay.yml

数据参数释义

参数备选值/类型释义
class_nameString【可选】标识符,无实际意义,选填
essay_listArray【必选】即刻短文数据列表
essay_list.contentString【必选】短文 文字内容
essay_list.dateTime【必选】短文发布时间 格式建议为 2022/10/26 08:00:00
essay_list.imageArray【可选】短文图片内容, 可填写多张图片
essay_list.fromString【可选】短文 来自何处, 当然也可以填任何你想填写的标识
essay_list.linkString【可选】外部链接
essay_list.aplayerArray【可选】aplayer 播放器的单曲音乐, 需 aplayer 支持
essay_list.aplayer.serverString【essay_list.aplayer 后必选】aplayer 服务商
essay_list.aplayer.idString【essay_list.aplayer 后必选】单曲 id

创建 md 页面文件

创建source/essay/index.md 来生成页面 page

MARKDOWN
---
title: 即刻短文
date: 2020-07-22 22:06:17
comments: true
aside: false
top_img: false
type: essay
---

创建 dom 文件

创建themes/butterfly/layout/includes/page/essay.pug, 页面内容, 注意该页面中可能存在部分fontawesome 图标需要自行替换。

修改 Page 文件

修改themes/butterfly/layout/page.pug 来使页面内容匹配 在 case page.type 子项里面添加, 注意缩进

pug
    case page.type
+     when 'essay'
+       include includes/page/essay.pug
      when 'tags'
        include includes/page/tags.pug
      when 'link'
        include includes/page/flink.pug
      when 'categories'
        include includes/page/categories.pug

加入 css

创建source/css/essay_page/essay_page.css, 然后在_config.butterfly.yml中的inject下的head引入, 注意缩进

YML
inject:
  head:
    - <link rel="stylesheet" href="/css/essay_page/essay_page.css">

js 处理

新建一个 js 文件用来处理即刻短文的逻辑, 或者写在公共 js 中也可以, 博主写在公共 js 中, 即custom.js, 该 js 在_config.butterfly.yml中的inject使用如下方式引入, 加入了data-pjax, 并且开启了站点的pjax, 然后再引入waterfall.js用于处理瀑布流。

YML
inject:
  bottom:
    - <script async data-pjax src="/js/custom.js"></script>
    # 即刻依赖waterfall
    - <script async data-pjax src="/js/waterfall/waterfall.js"></script>
YML
# Pjax
# It may contain bugs and unstable, give feedback when you find the bugs.
# https://github.com/MoOx/pjax
pjax:
  enable: true
  exclude:

新建 source/js/waterfall/waterfall.js 内容如下

custom.js内容如下

其中anzhiyu变量中存储的四个方法

变量变量特点
diffDate为处理时间的方法,其实 btf 中也有,只是不太喜欢那个的显示方式,就改成现在这个了。
changeTimeInEssay初始化即刻时间
reflashEssayWaterFall处理瀑布流显示
commentText处理点击跳转评论并添加评论

方法essayScroll为检查滚动条卷去一个视口高度的 100 范围内执行一次, 滑动到底部或评论区取消监听执行。此处博主未做 else 处理取消监听, 如果有写percent函数监听滑动可以一起写在同一个方法里面。(博主就是写在同一个方法里面), 如果即刻文章很少的话其实是可以不监听滑动的, 即只显示近 30 条, 因为进入页面后会执行一次瀑布流, 页面不会乱, 但是如果您把 essay.pug 中 17 行左右修改后可以达到无限的效果就会出现 dom 结构还没渲染瀑布流就已经执行完了的情况就需要监听滚动来再次执行瀑布流以完成布局。

首页滚动显示即刻(可选)

创建 themes/butterfly/layout/includes/bbTimeList.pug, 部分fontawesome图标可能需要您自行修改。

PUG
#bbTimeList.bbTimeList.container
    svg.icon.bber-logo.iconfont.icon-chrome(onclick=`pjax.loadUrl("/essay/")`,title="即刻短文",aria-hidden="true")
      use(xlink:href="#icon-chrome")
    #bbtalk.swiper-container.swiper-no-swiping.essay_bar_swiper_container(tabindex="-1")
      #bber-talk.swiper-wrapper(onclick=`pjax.loadUrl("/essay/")`)
        each i in site.data.essay
          each item, index in i.essay_list
            if index < 10
              - var contentText = item.image ? item.content + ' [图片]' : item.content
              .li-style.swiper-slide= contentText

    i.bber-gotobb.fas.fa-arrow-circle-right(onclick=`pjax.loadUrl("/essay/")`,title="查看全文")

引入到主页

修改themes/butterfly/layout/index.pug, 注意缩进

PUG
block content
  include ./includes/mixins/post-ui.pug
  #recent-posts.recent-posts
    include includes/categoryList.pug
+   include includes/bbTimeList.pug
    +postUI
    include includes/pagination.pug

如果需要像本站一样在整个顶部引入的话可以参考下面的代码,修改themes/butterfly/layout/includes/layout.pug

PUG
if page.type !== '404'
  #body-wrap(class=pageType)
    include ./header/index.pug
+   if (is_home())
+     include ./bbTimeList.pug

引入 swiper 依赖

在_config.butterfly.yml引入依赖, 如果有使用轮播图插件的话此处无需引入

YML
inject:
  head:
    - <link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-swiper-anzhiyu@1.0.4/lib/swiper.min.css">
  bottom:
    - <script data-pjax src="https://npm.elemecdn.com/anzhiyu-blog@1.1.6/js/swiper.min.js"></script>

添加自定义 css

创建source/css/essay_page/home_essay_bar.css, 然后在_config.butterfly.yml中的inject下的head引入, 注意缩进

YML
inject:
  head:
    - <link rel="stylesheet" href="/css/essay_page/home_essay_bar.css">

修改自定义 js

修改custom.js

给页面加上所属分类和标签以及美化
卡片美化

评论区

评论加载中...