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的丢失。因为这个元数据配置是存储在系统数据库中的。主题更新之后,最多是元数据中没有默认项了,但是我们已经配置的数据,并不会因更新而丢失哦。
通过这种方式,我们可以在主题还不支持的情况下,配置我们自己的元参数,并控制布局内容的显示。
评论区