Skip to content

参与和传播

您可以通过提供一个人们可以订阅的RSS源和集成讨论系统来促进读者参与并改善您博客内容的传播。为了更好地了解谁在阅读您的帖子,您可能希望集成一个分析系统。您还可以在发布新博客文章时在社交媒体上发布信息。本教程将为您提供这些主题的基础知识。

所需时间: 通常为30分钟

RSS源

一个 RSS源 允许用户订阅博客,以便在您发布新帖子时收到通知。RSS阅读器通常用于访问用户关注的博客。它们通常支持下载博客内容以供离线查看。

为您的博客创建RSS源的简单方法是使用 MkDocs RSS Plugin,该插件与Material for MkDocs集成良好。由于它是一个第三方插件,您需要在使用之前安装它。

添加RSS源

将RSS插件安装到您的项目中:

$ pip install mkdocs-rss-plugin

确保配置了 site_namesite_descriptionsite_url 设置,如 基本博客教程中所述。RSS插件利用这些信息构建源,因此请确保您已正确配置它们。

现在,在 mkdocs.yml 中配置插件。提供的选项将RSS条目创建限制为博客文章,这可能正是您想要的。还要注意日期字段的配置,以匹配Material for MkDocs用于创建日期和更新日期的格式。

plugins:
    - ...
    - rss:
        match_path: "blog/posts/.*"
        date_from_meta:
          as_creation: date.created
          as_update: date.updated

查看 http://localhost:8000/feed_rss_created.xml 以查看RSS源的完整XML格式。您可以使用Firefox或Chrome等浏览器来显示原始RSS源,或使用 curl 获取源并使用 xmllint 格式化它。(您可能需要安装这些工具。)

curl -s http://localhost:8000/feed_rss_created.xml | xmllint --format -

您还可以尝试使用RSS阅读器测试您的源。有多种桌面和移动应用程序以及在线服务可供选择。当然,要使用后者,您需要将项目部署到可以访问它们的地方。

如果您没有对博客插件的默认配置进行任何更改,这个最小配置应该能很好地工作。有关根据您的需求调整源的更多信息,请参见 RSS插件文档

社交媒体按钮

社交媒体按钮可以有两个目的:允许读者导航到您的社交媒体个人资料或通过他们自己的帐户分享您发布的内容。

个人资料链接

社交媒体个人资料的链接通常在页面的页脚中提供,Material for MkDocs使这变得简单。您只需提供必要的链接并定义要使用的图标。

添加社交媒体个人资料链接

在您的 mkdocs.yml 中添加一个 extra 部分,并在其中添加一个 social 部分,以包含链接定义的列表。这些定义包括要使用的图标和个人资料的链接。

extra:
  social:
    - icon: fontawesome/brands/mastodon
      name: squidfunk on Mastodon
      link: https://fosstodon.org/@squidfunk

对于 icon,您可以选择与主题捆绑的任何有效图标路径。name 将用作图标的标题属性,包含此信息可以提高可访问性。对于流行的社交媒体系统,链接需要是绝对的,并且需要包含方案,最可能是 https://

您还可以使用其他方案。例如,要创建一个允许人们发送电子邮件的图标,请添加以下内容:

extra:
  social:
  - icon: /fontawesome/regular/envelope
    name: send me an email
    link: mailto:<email-address>

最后,您可以指定站点内的URL,例如指向您的联系页面。可以仅指定页面的路径:

extra:
  social:
  - icon: /material/mailbox
    name: contact us
    link: /contact

分享和点赞按钮

添加允许人们在社交媒体上分享您内容的按钮稍微复杂一些,这就是为什么有公司提供此类组件的原因。

数据保护

使用社交媒体公司提供的集成的“分享”和“点赞”按钮,即使用户不与这些按钮互动,通常也会留下大量数据痕迹。如果您选择在您的网站上集成此功能,请注意数据保护的影响以及您作为提供者的责任,以确保处理仅在用户授予同意后进行。

此分享按钮的实现故意不使用第三方代码。它支持分享至Twitter/X和Facebook,而不会在每次有人查看页面时导致与这些公司的数据流。只有当有人点击分享按钮时,才会与这些公司的服务器进行交互。

添加分享按钮

为了添加分享按钮,您可以添加一个钩子,该钩子为当前页面附加分享按钮。

在您的项目根目录中创建一个 hooks 目录,并在 mkdocs.yml 中进行配置:

hooks:
  - hooks/socialmedia.py

添加文件 hooks/socialmedia.py,并粘贴以下Python代码:

from textwrap import dedent
import urllib.parse
import re

x_intent = "https://x.com/intent/tweet"
fb_sharer = "https://www.facebook.com/sharer/sharer.php"
include = re.compile(r"blog/[1-9].*")

def on_page_markdown(markdown, **kwargs):
    page = kwargs['page']
    config = kwargs['config']
    if not include.match(page.url):
        return markdown

    page_url = config.site_url + page.url
    page_title = urllib.parse.quote(page.title + '\n')

    return markdown + dedent(f"""
    [Share on :simple-x:]({x_intent}?text={page_title}&url={page_url}){{ .md-button }}
    [Share on :simple-facebook:]({fb_sharer}?u={page_url}){{ .md-button }}
    """)

钩子首先检查当前页面是否为博客文章,然后附加分享按钮的Markdown代码。按钮使用图标,因此您还需要配置以下Markdown扩展:

markdown_extensions:
  - attr_list
  - pymdownx.emoji:
      emoji_index: !!python/name:material.extensions.emoji.twemoji
      emoji_generator: !!python/name:material.extensions.emoji.to_svg

添加讨论系统

允许读者对您的帖子进行评论是获取反馈、学习新知识以及让读者有机会讨论内容和主题的好方法。

市面上有很多讨论系统,您在选择适合您博客的系统时需要考虑您的受众。同样,您还需要考虑与现有通信渠道的承诺。如果您是Slack的重度用户,例如,您可能会对该系统有较强的偏好。在添加通信渠道时,请考虑到您需要定期使用它并对讨论进行管理。

Giscus集成

在本教程中,我们将使用 Giscus,因为它是免费的、开源的,并且使用 GitHub Discussions 作为后端。由于许多Material for MkDocs的用户使用GitHub,这似乎是一个显而易见的选择。

要将Giscus添加到您的博客,您需要经过几个步骤:

  1. 如果还没有,请创建一个GitHub仓库
  2. 启用讨论并安装 Giscus应用
  3. 配置嵌入Giscus到您的博客所需的代码
  4. 将代码添加到您的MkDocs项目

您可能希望为本教程创建一个测试仓库,稍后可以删除。以下说明假设您是用户“example”,并且您创建了一个名为“giscus-test”的仓库。该仓库需要是公开的,以便人们能够使用讨论功能。

在下面的说明中,您需要至少替换用户名,但如果您选择了其他名称,例如想直接在现有仓库上工作,也需要替换仓库名称。

启用讨论并安装Giscus应用

一旦仓库设置完成,转到其设置页面,在 General 部分找到 Features。勾选 Discussions 的复选框。您会看到 Discussions 出现在仓库的顶部导航中。如果您使用的是实时仓库,您可能希望在此时向讨论部分添加一些最小内容,然后再返回教程。

接下来,您需要通过单击此句子中的链接安装 Giscus应用,然后选择 Install,并按照说明选择要安装Giscus应用的位置:

  1. 选择您想要使用的仓库的帐户或组织。
  2. 选择仅在所选仓库上安装,并选择您想要使用的仓库。请注意,您可以在这里选择多个仓库。
  3. 最后选择 Install。您可能需要进行身份验证以授予权限。
  4. 您将进入设置中的 Applications 页面,在这里您可以控制Giscus应用并在需要时卸载它。

这就是您为仓库所需的所有准备。接下来,是时候生成一段代码,将Giscus嵌入到您的网站中。生成的代码片段将类似于以下内容:

<script src="https://giscus.app/client.js"
        data-repo="<username>/<repository>"
        data-repo-id="..."
        data-category="Announcements"
        data-category-id="..."
        data-mapping="title"
        data-strict="1"
        data-reactions-enabled="1"
        data-emit-metadata="1"
        data-input-position="top"
        data-theme="preferred_color_scheme"
        data-lang="en"
        data-loading="lazy"
        crossorigin="anonymous"
        async>
</script>

配置嵌入Giscus到您的博客所需的代码

转到 Giscus主页 并配置嵌入代码。有多个设置:

  1. 选择语言
  2. 输入用户名/组织名称和仓库名称
  3. 选择如何将讨论映射到您博客上的页面。由于对于博客文章,标题是URL的基础,因此使用 Discussion title contains page <title> 选项是合理的。
  4. Discussion Category 下选择 Announcements,以限制新讨论的创建仅限于Giscus和具有维护者或管理员权限的人。
  5. Features 下,选择以下内容:
    1. 为主帖子启用反应
    2. 发出讨论元数据
    3. 将评论框放在评论上方
  6. Theme 下,选择 Preferred color scheme,以便Giscus与用户为您的网站选择的颜色方案匹配。

在这些设置到位后,您现在需要将代码集成到您的网站中。存在一个部分 partials/comments.html,用于此目的,默认情况下为空。它由 content.html 部分包含,因此将包含在您网站上的每个页面中。您可以选择是否需要这样做。在本教程中,您将限制Giscus集成仅适用于博客文章,但如果您希望在每个页面上都有Giscus讨论,轻松地省略实现此目的的代码。

添加Giscus集成代码

首先,您需要创建一个 overrides 目录,该目录将包含您想要覆盖的模板和部分。

mkdir -p overrides/partials

您需要在您的 mkdocs.yaml 中声明它:

theme:
  name: material
  custom_dir: overrides

现在添加文件 overrides/partials/comments.html,并粘贴您从Giscus主页获得的代码片段。查看本地结果,您将看到集成在网站的所有页面上都是活跃的。如果您想将其限制为博客文章,您需要在Giscus脚本周围添加一个条件,以测试是否应该包含评论。一个简单的方法是测试元数据标志:

{% if page.meta.comments %}
<script>...</script>
{% endif %}

缺点是您现在需要手动为每个博客文章启用评论 - 除非您想在某些文章上关闭它们。要在所有博客文章上获取评论部分,请使用如下代码:

{% if page.file.src_uri.startswith('blog/posts') %}
<script>...</script>
{% endif %}

您现在应该看到Giscus评论已添加到您的博客文章底部,但未出现在其他页面上。

接下来是什么?

这就是博客教程的结束。我们希望您喜欢这个教程,并成功设置了您喜欢的博客。还有许多其他功能和选项我们无法在这里覆盖。博客插件参考提供了该插件的全面文档。您还可以查看 社交插件教程,以生成在您发布链接到社交媒体系统时显示的社交卡片。