侧边栏壁纸
  • 累计撰写 416 篇文章
  • 累计创建 65 个标签
  • 累计收到 150 条评论

目 录CONTENT

文章目录

Halo 博客,Joe2.0 主题修改,添加是否控制单个页面展示广告的功能

Z同学
2022-10-14 / 2 评论 / 10 点赞 / 1,011 阅读 / 1,113 字
温馨提示:
本文最后更新于 2022-10-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 介绍

前提条件:Joe2.0主题 版本1.0.10版本。

前天给自己的博客挂了个百度广告。本站大部分内容都是我碰见的问题,进行的一些总结。

但是还是有部分内容更多的是从其他网站上转载的,例如关于LeetCode的一些算法题。里面的很多内容,都是LeetCode上的。

如果给这些内容挂广告,感觉是不是会涉及商业转载了呢?(如果有懂这方面风险的大佬。希望能够留言发表一下看法。)

所以,我想将这些页面内容中的广告链接进行屏蔽。

而当前主题中没有提供这个配置项。那么我就尝试通过添加页面元数据参数来进行屏蔽了。

通过这个思路,我们也能学会自己定义元数据,并控制页面内容的展示。

本方案仅适用于Halo搭建的博客站点。

2. 实施

首先,我们通过后台创建文章时,可以看到。现在已经有不少主题默认的元数据参数了:例如:

  • K enable_collect_check V 空的
  • K enable_like V 空的

等等有一大窜,主题默认配置好的变量。

我们需要将这些默认元数据中,添加上我们的 enable_ads 项(这个项可以自己命名的,不一定非得这样命名,但是注意要用字母不能用汉字)。

在后台-外观-主题编辑菜单中。打开 theme.yaml 文件

id: joe2.0
name: Joe2.0
author:
  name: M酷
  website: https://bbchin.com
description: Halo主题 Joe2.0
logo: https://bbchin.com/logo
website: https://bbchin.com
repo: https://github.com/qinhua/halo-theme-joe2.0
cover: https://cdn.jsdelivr.net/gh/qinhua/halo-theme-joe2.0@master/source/img/dp/welcome.jpg
version: 1.0.10
require: ^1.5.0
# 文章页 meta 变量
postMetaField:
  - enable_aside
  - enable_page_meta
  - enable_passage_tips
  - enable_collect_check
  - enable_read_limit
  - use_raw_content
  - enable_comment
  - enable_toc
  - toc_depth
  - img_align
  - img_max_width
  - enable_copy
  - enable_donate
  - enable_share
  - enable_like
  - code_theme
  - enable_fold_long_code
  - enable_katex

# 自定义页 meta 变量
sheetMetaField:
  - enable_aside
  - enable_page_meta
  - enable_collect_check
  - use_raw_content
  - enable_comment
  - img_align
  - img_max_width
  - enable_katex
  # - show_thumbnail

我们在postMetaField 下面,添加 - enable_ads 就可以了。

这个时候,我们再去每个文章页面的元数据修改页面。就可以看到有一个 enable_ads 的选项了。

为了让这个选项可以生效。我们打开post.ftl文件

在第80行的地方添加: meta是全局变量,可以根据key读取相关元数据配置值:

<#assign enable_ads = (metas?? && metas.enable_ads?? && metas.enable_ads?trim!='')?then(metas.enable_ads?trim,'true')>
                 <#if enable_ads == 'true'>
                  <#import "template/ads/ads_post.ftl" as adpost>
                  <@adpost.ads_post type="top" />
                 </#if>

assign 标签代表了从metas中提取key值为enable_ads的值。如果为空默认返回true。

然后我们添加一个if判断,如果是true那么就执行Joe2.0主题原有的广告显示。

上面是在top位置进行的判断,还有一个bottom底部位置的判断需要加上:

   <#if enable_ads == 'true'>
            <@adpost.ads_post type="bottom" />
    </#if>

然后保存即可生效了。

如果你配置的是侧边栏的广告。也想被控制的话。那么在template/common/aside_post.ftl文件中添加上面的判断控制就可以了

<#assign enable_ads = (metas?? && metas.enable_ads?? && metas.enable_ads?trim!='')?then(metas.enable_ads?trim,'true')>
                 <#if enable_ads == 'true'>
                 	<#if settings.enable_clean_mode!=true && settings.enable_aside_ads==true>
      					<#include "../ads/ads_aside.ftl">
    				</#if>
				</#if>

同时,我们也不用担心主题升级之后,会造成我们定义的metas的丢失。因为这个元数据配置是存储在系统数据库中的。主题更新之后,最多是元数据中没有默认项了,但是我们已经配置的数据,并不会因更新而丢失哦。

通过这种方式,我们可以在主题还不支持的情况下,配置我们自己的元参数,并控制布局内容的显示。

10

评论区