下载鸥 > 网站下载 > 开发教程 > 帝国CMS

帝国cms怎样在发布文章后自动生成目录

1427 2021-04-23 17:58:20

收藏

简述

通过JS获取并循环正文中的h2标签,并循环到导航区域实现帝国cms自动导航的功能。
帝国cms怎样在发布文章后自动生成目录
注:
本文提供的方案只有视觉效果,无法被百度抓取,如需百度可抓取,可移步帝国cms自动生成文章新闻目录插件下载

文章如果带有目录,可以让用户在浏览文章时对文章结构一目了然,对于用户体验提升比较大。但帝国cms站点默认是没有文章自动生成目录的功能的,我们可以自己开发。

帝国cms怎样在发布文章后自动生成目录
本文基于js+jQuery实现文章目录自动生成的功能,经实际测试没有问题。如果将来发现代码无法生效,请将demo里的jQuery链接到本地可访问的jQuery再进行复测。

本文转自莫愁blog 原文链接https://www.mochoublog.com/study/255.html,原文博主可能亦是转载,或是转载后进行了升级,目前真实出处无法进行判断。如果本文是您的原创,请联系本站在线客服,我们将在第一时间更新出处。

以下是转载的原文,有少量错误修正。
 

一个好的博客文章除了文章的质量要好以外,文章结构也能让读者阅读的更加舒服与方便,我看有些博客的博文的前面都带有章节的目录索引,点击索引之后会跳转到相应的章节阅读,并且还可以回到目录顶端,这种结构如果是在写博文的时候人工设置那是非常麻烦的,无疑是增加了工作量。如果能自动生成章节索引岂不是节省了一大堆工作量。下面我就分享下实现方法。
 

方案一:支持一级目录

实现原理:通过<h3>标签实现自动目录

HTML代码:
<!DOCTYPE >   
<head>   
<title>目录索引生成代码</title>   
<script type="text/javascript" src="https://www.mochoublog.com/skin/more/js/jquery.min.js"></script>  
</head>   
<body>   
<div id='newstext'>  
<h2>章节1</h2>  
<p>这里是章节1的内容</p>  
<h2>章节2</h2>  
<p>这里是章节2的内容</p>  
<h2>章节3</h2>  
<p>这里是章节3的内容</p>  
<h2>章节4</h2>  
<p>小小代码,不值一提,如果您觉得对您还有一点用,就点个赞支持一下吧。</p>  
</div>  
</body>   
</html>  

JavaScript代码:
<script language="javascript" type="text/javascript">
function GenerateContentList(){
    var jquery_h2_list = $('#newstext h2');//如果你的章节标题不是h2,只需要将这里的h2换掉即可
    if(jquery_h2_list.length>0){
        content = '<div id="navCategory">';
        content += '<p class="h2">阅读目录</p>';
        content += '<ul>';
        for(var i =0;i<jquery_h2_list.length;i++){
            var go_to_top = '<a href="#navCategory" rel="external nofollow" rel="external nofollow" class="backtotop">回到顶部</a><a name="_label' + i + '" class="backtotop"></a>';
            var li_content = '<li><a href="#_label' + i + '" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >' + $(jquery_h2_list[i]).text() + '</a></li>';
            $(jquery_h2_list[i]). append(go_to_top);
            content += li_content;
        }
        content += '</ul>';
        content += '</div>';
        if($('#newstext').length != 0 ){
            $($('#newstext')[0]).prepend(content);
        }
    } 
}
GenerateContentList();
</script>

 

方案二:支持二级分类

通过<h2><h3>实现

HTML代码部分:
<!DOCTYPE >   
<head>   
<title>目录索引生成代码</title>   
<script type="text/javascript" src="https://www.mochoublog.com/skin/more/js/jquery.min.js"></script>  
</head>   
<body>   
<div id='cnblogs_post_body'>  
    <h2>第一部分</h2>  
        <h3>章节1</h3>  
            <p>这里是章节1的内容</p>  
        <h3>章节2</h3>  
            <p>这里是章节2的内容</p>  
        <h3>章节3</h3>  
            <p>这里是章节3的内容</p>  
        <h3>章节4</h3>  
            <p>小小代码,不值一提,如果您觉得对您还有一点用,就点个赞支持一下吧。</p>  
    <h2>第二部分</h2>  
        <h3>章节1</h3>  
            <p>这里是章节1的内容</p>  
        <h3>章节2</h3>  
            <p>这里是章节2的内容</p>  
        <h3>章节3</h3>  
            <p>这里是章节3的内容</p>  
        <h3>章节4</h3>  
            <p>小小代码,不值一提,如果您觉得对您还有一点用,就点个赞支持一下吧。</p>  
</div>  
</body>   
</html>  

JavaScript:
<script language="javascript" type="text/javascript">  
function GenerateContentList()  
{  
 var mainContent = $('#cnblogs_post_body');  
 var h2_list = $('#cnblogs_post_body h2');//如果你的章节标题不是h2,只需要将这里的h2换掉即可  
   
 if(mainContent.length < 1)  
 return;  
    
 if(h2_list.length>0)  
 {  
 var content = '<a name="_labelTop"></a>';  
 content += '<div id="navCategory">';  
 content += '<p style="font-size:18px"><b>目录</b></p>';  
 content += '<ul>';  
 for(var i=0; i<h2_list.length; i++)  
 {  
  var go_to_top = '<div style="text-align: right"><a href="#_labelTop" rel="external nofollow" rel="external nofollow" >回到顶部</a><a name="_label' + i + '"></a></div>';  
  $(h2_list[i]).before(go_to_top);  
     
  var h3_list = $(h2_list[i]).nextAll("h3");  
  var li3_content = '';  
  for(var j=0; j<h3_list.length; j++)  
  {  
  var tmp = $(h3_list[j]).prevAll('h2').first();  
  if(!tmp.is(h2_list[i]))  
   break;  
  var li3_anchor = '<a name="_label' + i + '_' + j + '"></a>';  
  $(h3_list[j]).before(li3_anchor);  
  li3_content += '<li><a href="#_label' + i + '_' + j + '" rel="external nofollow" >' + $(h3_list[j]).text() + '</a></li>';  
  }  
     
  var li2_content = '';  
  if(li3_content.length > 0)  
  li2_content = '<li><a href="#_label' + i + '" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';  
  else  
  li2_content = '<li><a href="#_label' + i + '" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >' + $(h2_list[i]).text() + '</a></li>';  
  content += li2_content;  
 }  
 content += '</ul>';  
 content += '</div><p> </p>';  
 content += '<p style="font-size:18px"><b>正文</b></p>';  
 if($('#cnblogs_post_body').length != 0 )  
 {  
  $($('#cnblogs_post_body')[0]).prepend(content);  
 }  
 }   
}  
GenerateContentList();  
</script>  

方案三:支持三级目录

通过<h2><h3><h4>实现

HTML:
<!DOCTYPE >   
<head>   
<title>目录索引生成代码</title>   
<script type="text/javascript" src="https://www.mochoublog.com/skin/more/js/jquery.min.js"></script>  
</head>   
<body>   
    <div id='cnblogs_post_body'>  
        <h2>第一部分</h2>  
        <h3>章节1</h3>  
            <h4>第一小节</h4>  
            <p>这里是第一小节的内容</p>  
            <h4>第二小节</h4>  
            <p>这里是第二小节的内容</p>  
        <h3>章节2</h3>  
            <p>这里是章节2的内容</p>  
        <h3>章节3</h3>  
            <p>这里是章节3的内容</p>  
        <h3>章节4</h3>  
            <p>小小代码,不值一提,如果您觉得对您还有一点用,就点个赞支持一下吧。</p>  
    <h2>第二部分</h2>  
        <h3>章节1</h3>  
            <p>这里是章节1的内容</p>  
        <h3>章节2</h3>  
            <p>这里是章节2的内容</p>  
        <h3>章节3</h3>  
            <p>这里是章节3的内容</p>  
        <h3>章节4</h3>  
            <p>小小代码,不值一提,如果您觉得对您还有一点用,就点个赞支持一下吧。</p>  
    </div>  
</body>   
</html> 

JavaScript:
<script language="javascript" type="text/javascript">  
 //生成目录索引列表  
 function GenerateContentList() {  
  var jquery_h1_list = $('#cnblogs_post_body h2');  
  if (jquery_h1_list.length == 0) { return; }  
  if ($('#cnblogs_post_body').length == 0) { return; }  
   
  var content = '<a name="_labelTop"></a>';  
  content += '<div id="navCategory">';  
  content += '<p style="font-size:18px"><b>目录</b></p>';  
  // 一级目录 start  
  content += '<ul class="first_class_ul">';  
   
  for (var i = 0; i < jquery_h1_list.length; i++) {  
  var go_to_top = '<div style="text-align: right"><a name="_label' + i + '"></a></div>';  
  $(jquery_h1_list[i]).before(go_to_top);  
   
  // 一级目录的一条  
  var li_content = '<li><a href="#_label' + i + '" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >' + $(jquery_h1_list[i]).text() + '</a></li>';  
   
  var nextH1Index = i + 1;  
  if (nextH1Index == jquery_h1_list.length) { nextH1Index = 0; }  
  var jquery_h2_list = $(jquery_h1_list[i]).nextUntil(jquery_h1_list[nextH1Index], "h3");  
  // 二级目录 start  
  if (jquery_h2_list.length > 0) {  
   //li_content +='<ul style="list-style-type:none; text-align: left; margin:2px 2px;">';  
   li_content += '<ul class="second_class_ul">';  
  }  
  for (var j = 0; j < jquery_h2_list.length; j++) {  
   var go_to_top2 = '<div style="text-align: right"><a name="_lab2_' + i + '_' + j + '"></a></div>';  
   $(jquery_h2_list[j]).before(go_to_top2);  
   // 二级目录的一条  
   li_content += '<li><a href="#_lab2_' + i + '_' + j + '" rel="external nofollow" >' + $(jquery_h2_list[j]).text() + '</a></li>';  
   
   var nextH2Index = j + 1;  
   var next;  
   if (nextH2Index == jquery_h2_list.length) {  
   if (i + 1 == jquery_h1_list.length) {  
    next = jquery_h1_list[0];  
   }  
   else {  
    next = jquery_h1_list[i + 1];  
   }  
   }  
   else {  
   next = jquery_h2_list[nextH2Index];  
   }  
   var jquery_h3_list = $(jquery_h2_list[j]).nextUntil(next, "h4");  
   // 三级目录 start  
   if (jquery_h3_list.length > 0) {  
   li_content += '<ul class="third_class_ul">';  
   }  
   
   for (var k = 0; k < jquery_h3_list.length; k++) {  
   var go_to_third_Content = '<div style="text-align: right"><a name="_label3_' + i + '_' + j + '_' + k + '"></a></div>';  
   $(jquery_h3_list[k]).before(go_to_third_Content);  
   // 三级目录的一条  
   li_content += '<li><a href="#_label3_' + i + '_' + j + '_' + k + '" rel="external nofollow" >' + $(jquery_h3_list[k]).text() + '</a></li>';  
   }  
   
   if (jquery_h3_list.length > 0) {  
   li_content += '</ul>';  
   }  
   li_content += '</li>';  
   // 三级目录 end  
  }  
  if (jquery_h2_list.length > 0) {  
   li_content += '</ul>';  
  }  
  li_content += '</li>';  
  // 二级目录 end  
   
  content += li_content;  
  }  
  // 一级目录 end  
  content += '</ul>';  
  content += '</div>';  
   
  $($('#cnblogs_post_body')[0]).prepend(content);  
 }  
   
 GenerateContentList();  
 </script>  
 

原文注

文章中建议使用的是<h2><h3><h4>...,根据SEO的说法,页面中大量出现H1标签会对权重有影响。
 

下载鸥附注

本文是通过js+jQuery的形式实现目录的自动生成,但此类生成形式基本属于用户体验,本质上对seo并无多大的帮助。功能上线后经过百度抓取测试,生成的目录未能被百度抓取到。

本文转自莫愁blog 原文链接https://www.mochoublog.com/study/255.html
 

可被蜘蛛识别抓取的目录

如需提升对蜘蛛的友好度需使用php方式生成,可查阅本文:帝国cms自动生成文章目录插件

本文地址:https://xzo.com.cn/develop/empire/840.html

有帮助,很赞!

信息来源:莫愁blog
导出教程 下载word版教程
发表评论 共有条评论
  • 隐藏的大佬 2021-05-10 16:35:16评论 #沙发#

    本来看到是js实现的,纠结对seo没效果,纠结半天都要上手做了,幸亏最后看到了php版本,hahahah~

  • 隐藏的大佬 2021-05-10 17:06:18评论 #板凳#

    支持支持,很妙

关于帝国CMS


帝国cms是一款功能极为强大的cms程序,性能强悍、安全性高,可轻松支持10万数据,高级开发人员可制作出能容纳千万数据量的网站,是国内最出色的开源cms程序之一,推荐企业用户使用

当前最新版本为7.5,8.0版本即将上线,新版本的核心优化点在于多终端的适配。

推荐帝国CMS开发教程
宝塔面板帝国cms搬家报错No input file specified
宝塔面板帝国cms搬家报错No input file specified

今天有客户向鸥哥求助说宝塔面板帝国cms搬家报错No input file specified,这...

23 1971
帝国CMS图片集怎样做分页生成?
帝国CMS图片集怎样做分页生成?

帝国cms图片集做轮播展示非常好用,但无法支持分页。分页作为网站跳出、广告...

1 431
帝国cms怎样展示会员总数与最新注册的会员名称?
帝国cms怎样展示会员总数与最新注册的会员名称?

如果网站会员数量较多,展示会员总数与最新注册会员名可以有效提升用户留存。...

3 359
帝国cms制作信息反馈表的方法
帝国cms制作信息反馈表的方法

帝国cms自带的信息反馈功能,不仅可以实现留言功能,还可以实现像在线报名、反...

1 478
帝国cms某个栏目使用完全自定义的分页功能
帝国cms某个栏目使用完全自定义的分页功能

帝国CMS列表页的分页函数是用系统设置中的分页函数,修改都是在系统设置里进...

0 677
帝国cms网站加载速度很慢怎么办?
帝国cms网站加载速度很慢怎么办?

很少有帝国cms反馈网站加载速度很慢的问题,如果你的帝国cms站点加载速度很慢...

1 555
帝国cms灵动标签日期用英文显示的方法
帝国cms灵动标签日期用英文显示的方法

我们知道,帝国cms的日期可以根据需要调用问多种格式,如x年x月x日、年-月-日、...

0 310
帝国cms怎样关闭评论验证码?
帝国cms怎样关闭评论验证码?

帝国cms网站评论验证码是一个很重要的功能,有验证码才能挡住大量的灌水信息...

0 321
推荐插件
帝国cms百度AI图像清晰度增强api接口对接插件
帝国cms百度AI图像清晰度增强api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像清晰度增强的功能。经...

0 433
帝国cms智能自动审核按星期几审核指定栏目带推送插件
帝国cms智能自动审核按星期几审核指定栏目带推送插件

采集站的必备资源是自动审核,要做到日收录也离不开定时发布。而本插件的自动...

0 1140
帝国cms访问统计ip地址链接与封禁插件下载
帝国cms访问统计ip地址链接与封禁插件下载

下载鸥开发了这款帝国cms封禁ip插件,自动记录访问情况,让我们可以更快的识别...

0 878
帝国cms在线考试系统模板插件
帝国cms在线考试系统模板插件

一直没看到好用的帝国cms在线考试插件,所以自己开发了一款。在线考试插件用...

0 1171
帝国CMS内网用户静态站点文章访客统计插件
帝国CMS内网用户静态站点文章访客统计插件

本插件适用于内网用户,可查看单篇文章访问者ip地址。如果添加访问者ip组,可查...

0 459
帝国cms百度AI图像去雾api接口对接插件
帝国cms百度AI图像去雾api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像去雾的功能。经过实际...

0 374
帝国cms百度AI图像无损放大api接口对接插件
帝国cms百度AI图像无损放大api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像无损放大的功能。经过...

0 344
帝国cms百度文字识别ocr接口对接插件
帝国cms百度文字识别ocr接口对接插件

许多网站会做一些小功能小插件给客户使用以增强用户黏性,比如图片转文字,这种...

0 371
客服QQ:341553759
扫码咨询 常见问题 >
官方交流群:90432500
点击加入