hexo博客中增加知识图谱页


1. 增加页面

新建知识图谱页面

hexo new page "graph"

执行完成之后在source 下面会增加 graph 文件夹以及文件夹中增加一个 index.md 文件

2. 配置菜单

主题下面的_config.yml 文件中配置图谱页面菜单,在 menu下添加:


# 配置菜单导航的名称、路径和图标icon.
menu:
  Index:
    url: /
    icon: fas fa-home
  Graph:
    url: /graph #增加的图谱菜单
    icon: fa fa-graduation-cap

3. 配置中文菜单名称

在 languages 路径下的 zh-CN.yml 文件添加配置:


graph: 知识图谱

4. 创建图片关系数据

在source 下的 _data 路径下新建 graphs.json 文件里面存放的是图谱展示的数据

[
  { "id": "root", "isroot": true, "topic": "知识图谱" ,"isLink": false},
  { "id": "Language", "parentid": "root", "isLink": false, "topic": "Language",  "direction": "right", "expanded": true},
  { "id": "Bigdata", "parentid": "root", "topic": "大数据", "direction": "right" , "isLink": false, "expanded": true},
  { "id": "Bigdata1", "parentid": "Bigdata", "topic": "计算引擎", "isLink": false, "expanded": true},
  { "id": "Bigdata2", "parentid": "Bigdata", "isLink": false, "topic": "数据存储", "expanded": true},
  { "id": "Bigdata3", "parentid": "Bigdata", "topic": "消息队列", "isLink": false , "expanded": true},
  { "id": "Bigdata4", "parentid": "Bigdata", "topic": "其他框架", "isLink": false , "expanded": true},
  { "id": "other", "parentid": "root", "topic": "其他", "direction": "right" , "isLink": false, "expanded": true}
]

节点简单说明:
isLink:是否是连接
expanded:是否展开子节点

5. 增加模板引擎

在主题路径下的 layout 下增加 graph.ejs,这里就是真正使用数据生成图谱的位置。

需要引入脑图的 css 和 js 文件
kmsjsmap.css
kmsjsmap.js

<main class="content">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=8">
    <link rel="stylesheet" type="text/css" href="https://images.hnbian.cn/kmsjsmap.css">
    <style>
        #jsmind_container {
            height: 900px;
            background: #ffffff00;
        }
    </style>
    <script src="https://images.hnbian.cn/jquery.min.mind.js"></script>
    <script src="https://images.hnbian.cn/kmsjsmap.js" type="text/javascript"></script>
    <div id="jsmind_container"></div>
    <!--引入图JSON数据-->
    <% var graphs = site.data.graphs; %>

    <p id="graphsValue" hidden>[
        <% for (var i = 0, len = graphs.length; i < len; i++) { %>
            <% var graph = graphs[i]; %>
            <% if (i == graphs.length -1) { %>
            {
            "id": "<%- graph.id %>",
            "parentid": "<%- graph.parentid %>",
            "direction":"<%- graph.direction %>",
            "topic": "<%- graph.topic %>",
            "expanded":"<%- graph.expanded %>",
            "isLink": <%- graph.isLink %> ,
            "link":"<%- graph.link %>"
            }
            <% } else  if (i == 0){%>
                {
                "id": "<%- graph.id %>",
                "isroot": true,
                "parentid": "<%- graph.parentid %>",
                "direction":"<%- graph.direction %>",
                "topic": "<%- graph.topic %>",
                "expanded":"<%- graph.expanded %>",
                "isLink": <%- graph.isLink %> ,
                "link":"<%- graph.link %>"
                },
            <% }else { %>
                {
                "id": "<%- graph.id %>",
                "parentid": "<%- graph.parentid %>",
                "direction":"<%- graph.direction %>",
                "topic": "<%- graph.topic %>",
                "expanded":"<%- graph.expanded %>",
                "isLink": <%- graph.isLink %> ,
                "link":"<%- graph.link %>"
                },
            <% } %>
        <% } %>
        ]
    </p>

    <script type="text/javascript">
        var jsondata = jQuery.parseJSON( $("#graphsValue").text());

        kmsjsmap.init({
            container: "jsmind_container",
            data: jsondata,
            editable: false,
            onRelation: function (item) {
                //console.log('当前选择中的是', item)

                kmsjsmap.setLinkStatus({
                    id: item.id,
                    isLink: item.data.isLink === true ? true : false
                })
                if (true == item.data.isLink) {
                    window.open(item.data.link);
                }
            }
        });
    </script>

</main>

过程大概是这个样子的,如果中间遇到什么问题欢迎与我联系。


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
Flink系列 10. 介绍 Flink window function 的使用 Flink系列 10. 介绍 Flink window function 的使用
1. 窗口函数(window function)介绍定义完窗口分配器(WindowAssigner)之后,我们就需要指定要在每个窗口上执行的计算。这是Window Fucntion的职责,一旦系统确定窗口已准备好进行处理,就可以处理每个窗口
2020-08-05
下一篇 
Flink系列 9. 介绍 Flink 窗口触发器、移除器和延迟数据等 Flink系列 9. 介绍 Flink 窗口触发器、移除器和延迟数据等
1. 触发器1.1 触发器介绍 当数据到达某种情况,符合了某种条件去关闭窗口,这种到达条件就是触发。 设置到达某种条件并触发窗口执行就是触发器。 触发器的作用就是控制什么时候进行数据的聚合计算 flink 中的窗口计算依赖于触发器。 每种窗
2020-07-25
  目录