本文主要是介绍给zblog网站做个统计图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
哪些数据适合做可视化
我们在运营自己的网站的时候,很多时候我们希望能够掌握自己网站的数据,包括网站的访客数量、网站中各分类的文章数量、各个月份的文章数量等。而且很多时候我们不希望我们拿到的是冷冰冰的数据,而是一目了然的数据。这时候数据可视化就非常有用了,如果我们能够通过图表来让自己的网站的数据一目了然,岂不美哉?
数据可视化工具介绍
现在网络上的前端图表库其实并不少,并且很多都是开源的,也就是说,你可以直接拿来用,而不需要付费。其中最有名气的当属由百度主导的echarts项目,现在该项目已经在Apache开源基金会孵化中。echarts是一个非常好用的图表库,不需要什么前置技能,只需要懂一点点JavaScript和json语法即可使用。echarts的图表数据使用json进行渲染。
- 如下代码就是echarts官网给出的一个简单的图表对象实例:
option = {series: [{type: 'pie',data: [{value: 335,name: '直接访问'},{value: 234,name: '联盟广告'},{value: 1548,name: '搜索引擎'}]}]
};
上述代码中的option是对象的名字,对象中包含的series数组就是用于配置该图表的数据,其中的type字段用于确定图表的类型,pie表示类型为饼图,data数据就是饼图的各个块的数据,value表示该块的数值,name是该块的名字,更多关于echarts对象的API可以参考echarts的官方文档:Documentation - Apache ECharts
- 一个完整的实例,可直接写到HTML中用浏览器打开即可看到效果:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script></head><body><div id="root" style="width: 600px;height: 400px;"></div><script>var myChart = echarts.init(document.getElementById('root'))option = {series: [{type: 'pie',data: [{value: 335,name: '直接访问'},{value: 234,name: '联盟广告'},{value: 1548,name: '搜索引擎'}]}]};myChart.setOption(option)</script></body>
</html>
- 完整实例的讲解
要让图表显示出来,那就需要一个容器来放置图表。上述代码中的
<div id="root" style="width: 600px;height: 400px;"></div>
就是用来放置图表的容器,这里需要注意,一定要给容器设置宽高,因为图表都是有一定的宽度和高度的,如果不设置宽高,将会导致图表显示不出来。
脚本中的以下这句
var myChart = echarts.init(document.getElementById('root'))
是根据id获取到div标签,然后用这个标签作为容器来初始化echarts图表。
以下这句是把图表放置到容器中
myChart.setOption(option)
- 完整实例的效果展示
zblog API介绍
zblog是有官方文档的,可以去官方文档中去查看相关的API:接口文档 - API (zblogcn.com)
这里我们只用到一个API即可:
请求格式:https://example.com/zb_system/api.php?mod=category&act=list,把example.com换成你自己的域名即可。
请求之后会返回json格式的数据,类似这样的:
然后我们复制这些文本,打开网站json.cn,解析一下json数据,查看json的结构,以便进行json解析。
可以看到,这个json对象中有一个data对象,data对象中又有一个list数组,这个数组列出了网站的所有分类的ID和分类名称,以及分类下的文章数量等:
那么我们可以想想我们需要哪些数据呢?很显然,我们只需要分类名称和该分类下的文章数量即可构建一个饼图。
而echarts图表的配置项实际上也是一个json对象,所以这就很简单了。
思路如下
我们只需要在我们的网站的页面加载时,请求API获取文章分类数据,然后把返回的json字符串转换成json对象(只有json对象才能解析),然后把解析出来的只赋值给option对象的相应值即可。
把文章统计图表做成zblog模块
-
打开zblog后台页面
zblogphp:https://example.com/zb_system/admin/index.php
-
点击网站设置->API设置->启用API协议
-
点击模块管理,再点击新建模块,然后复制以下代码到zblog“正文”的编辑框里面(把代码中的example.com换成你自己的网站域名),名称、文件名、HTML ID自己随便填,类型选择div,其它不管,提交即可。
<!-- 模块代码 --> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script> <div id="statistics" style="display:flex;flex-direction:row;justify-content:center;width:280px;height:375px"></div> <script type="text/javascript">var chartDom = document.getElementById('statistics');var myChart = echarts.init(chartDom);var option;option = {title: {//图表的标题配置项text: '各分类文章数量',//图表标题left: 'center'//图表左右位置},tooltip: {//提示框trigger: 'item'//item表示在饼块上触发提示框显示},legend: {//图例的配置项// orient: 'vertical',left: 'center',//图例左右位置bottom: '0'//图例上下位置},series: [//“饼”的配置项{// name: '',top:'-20%',//饼图到顶部的距离// left: 'center',type: 'pie',//pie表示饼图stillShowZeroSum: false,//数据值总数为零时是否显示饼图radius: '50%',//饼图半径data: [//饼图的各个块的名字和数值,可以根据需要动态地push。//因为分类数量不是经常变化的,所以也可以像这样一个个地写死{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },{ value: null, name: null },],emphasis: {itemStyle: {//这是设置样式的,相关API可以去查看官方文档shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};function setData() {//发送和处理zblog API的函数const Http = new XMLHttpRequest()//把下面的example.com改成你的网站域名,其它的,包括上面的都不用改//这里全部代码只改这一处即可,这是最简单的方法了,而且效果还挺好的,改好域名直接保存用浏览器访问const url = 'https://example.com/zb_system/api.php?mod=category&act=list'Http.open('GET',url)Http.send()Http.onreadystatechange=function(){if (this.readyState == 4 && this.status==200){var JSONObject = JSON.parse(Http.responseText)for (var i = 0; i < JSONObject.data.list.length; i++) {option.series[0].data[i].value = parseInt(JSONObject.data.list[i].Count)option.series[0].data[i].name = JSONObject.data.list[i].Name}myChart.setOption(option)}}}window.onload = setDatamyChart.on('click',function(params){var cateId = params.dataIndex+2window.location.href = 'https://'+window.location.host+'/category-'+cateId+'.html'// console.log(window.location.host+'?cate='+cateId)})option && myChart.setOption(option);</script>
解决一些问题
- echarts饼图的“饼块”是可以添加点击事件的,一开始我使用动态网页的时候,这些点击事件没有任何问题,可以正常点击,但是当我开启了伪静态之后,就开始出现404了,因为地址重写出错。开始的时候跳转是通过cate=id的参数来跳转的,但是伪静态之后,cate变成了category-id.html,因为zblog的静态管理中心的伪静态规则是这样的,那既然这样,我就直接把点击事件的跳转地址改成category-id.html即可。(这个问题在模块代码中已经解决了)
- 分类页面切换排序出现404,分类页面点击 当前位置:首页 > 分类名称 里的分类名称时404。这个问题其实也是伪静态URL重写出了问题,我们在访问分类页面的时候访问的是带参数cate=id的URL,例如:https://www.example.com/?cate=4,但是当我们切换排序的时候,URL被重写成:https://www.example.com/?order=newlist&sort=0,分类参数丢失导致404。其实也是cate=id参数变成了category-id。这个问题通过上面第一种情况的设置可以解决。
- 从顶部分类访问分类页面,点击侧栏的最近发表出现404。这个问题也是URL重写的问题,很简单:
- 打开zblog后台页面,选择分类管理
- 点击导航管理
- 把各个分类的连接改成诸如:https://www.example.com/category-2.html的格式
- 点击标签404,我本人使用静态规则:{%host%}tags-{%id%}{%page%}.html,出现过404,页出现过id参数乱码,后来经过验证,发现是CDN缓存中的内容版本不是最新的所导致的,把{%host%}tags-{%alias%}{%page%}.html这个规则中的alias别名参数解析到了上面那个规则的id参数的地方导致出错404.
可戳原文链接打开我的个人博客查看效果
原文链接:林之风
这篇关于给zblog网站做个统计图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!