IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Hexo博客获取指定数量的友情链接,脱离友链朋友圈的约束

    JayHrn发表于 2023-12-19 09:35:28
    love 0

    最近比较忙,所以都是更新学习的一些东西或者就是直接没有更新博客,这两天看了一下博客,发现博客好多功能都受到了约束,必须先实现什么其他功能才能实现当前这个功能,刚好看到随机三个友情链接目前是通过友链朋友圈实现的,每次都需要抓取。看了下目前随机友链的功能,想起来hexo内置了过滤器可以实现。

    实现

    这个实现是在butterfly主题基础上进行实现,其他主题参照即可。

    新建themes/butterfly/scripts/helpers/random.js文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    hexo.extend.filter.register('after_render:html', function (data) {
    const flinks = []
    hexo.locals.get('data').link.map(function (list) {
    list.link_list.map(function (flink) {
    flinks.push(flink)
    })
    })
    data += `<script>
    let flinks=${JSON.stringify(flinks)} // 自己进行选择,可要可不要,本主题写了其他函数需要使用
    function getRandomFlink(num) {
    let randomLinks = [];
    while (randomLinks.length < num && flinks.length > 0) {
    let index = Math.floor(Math.random() * flinks.length);
    randomLinks.push(flinks.splice(index, 1)[0]);
    }
    return randomLinks;
    }
    </script>`
    return data
    })

    上面就是实现了将所有友链对象放入flinks数组中,我们只需要在使用的地方调用getRandomFlink(num)函数即可,num根据自己需要填写参数即可。

    如果你还想根据flinks对象书写其他函数实现其他功能,可以直接再script标签中实现,这样子就可以不需要再创建一个过滤器了

    如果你是和张洪Heo一样实现了页脚随机三个友链的功能,可以就可以不需要再通过友链朋友圈获取链接啦,换成如下就可以。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function addFriendLinksInFooter() {
    let randomFriendLinks=getRandomFlink(3)
    let htmlText = '';
    for (let i = 0; i < randomFriendLinks.length; ++i) {
    let item = randomFriendLinks[i]
    htmlText += `<a class='footer-item' href='${item.link}' target="_blank" rel="noopener nofollow">${item.name}</a>`;
    }
    htmlText += `<a class='footer-item' href='/link'>更多</a>`
    document.getElementById("friend-links-in-footer").innerHTML = htmlText;
    }

    修复版本

    经过刘洪亮的测试,发现这个方式获取会导致每次随机之后友情链接的数量会越来越少,最后页脚刷新获取不到友情链接了。

    发现问题:原来是每次在获取友链的时候,链接在被拆分导致越来越少了,所以需要每次需要定义一个变量获取全部的友链,如下是改进版本,其实也就是在函数里面定义一个变量存储下就可以了。

    更新themes/butterfly/scripts/helpers/random.js文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    hexo.extend.filter.register('after_render:html', function (data) {
    const flinks = []
    hexo.locals.get('data').link.map(function (list) {
    list.link_list.map(function (flink) {
    flinks.push(flink)
    })
    })
    data += `<script>
    function getRandomFlink(num) {
    let AllFinlks=${JSON.stringify(flinks)}
    let randomLinks = [];
    while (randomLinks.length < num && AllFinlks.length > 0) {
    let index = Math.floor(Math.random() * AllFinlks.length);
    randomLinks.push(AllFinlks.splice(index, 1)[0]);
    }
    return randomLinks;
    }
    </script>`
    return data
    })


沪ICP备19023445号-2号
友情链接