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

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

1471 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列表页怎样置顶?
帝国cms列表页怎样置顶?

在很多时候,我们有信息置顶的需求。但大家在后台信息设置好置顶后可能会发现...

11 833
帝国CMS开发的网站怎样修改网站标题关键词和描述?
帝国CMS开发的网站怎样修改网站标题关键词和描述?

在网站运营的过程中,由于业务的变更或是优化的需要,可能需要修改网站的标题,关...

1 457
帝国cms文章编辑怎样默认勾选加水印、远程保存图片?
帝国cms文章编辑怎样默认勾选加水印、远程保存图片?

帝国cms是带有远程保存图片、图片加水印功能的,但都是默认未勾选的状态,我们...

1 374
帝国cms制作信息反馈表的方法
帝国cms制作信息反馈表的方法

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

1 499
帝国cms误删了已收录的文章要怎么恢复数据?
帝国cms误删了已收录的文章要怎么恢复数据?

客户站点由于员工操作失误,直接删除了20篇文章。如果有定期备份,那恢复数据即...

0 406
帝国cms留言板怎样做在线留言的功能?
帝国cms留言板怎样做在线留言的功能?

在线留言是我们常用的功能,通过开发一个简单的留言板,我们可以有效与潜在用户...

1 341
帝国cms多站点跨库调用
帝国cms多站点跨库调用

一台服务器如果存在多个站点,则这些站点的数据可以互相调用。通过互相调用,我...

0 380
帝国cms怎样给广告增加排序?
帝国cms怎样给广告增加排序?

帝国cms广告系统功能比较强大,但本身并没有排序的功能。如果想要替换广告的...

3 397
推荐插件
帝国CMS内网用户静态站点文章访客统计插件
帝国CMS内网用户静态站点文章访客统计插件

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

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

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

0 897
帝国cms百度AI黑白图像上色api接口对接插件
帝国cms百度AI黑白图像上色api接口对接插件

百度开放了系列AI功能api如图像上色、图像去雾、图像修复、无损放大、清晰...

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

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

0 380
帝国cms纳米数据接口(足球比赛中最新数据)
帝国cms纳米数据接口(足球比赛中最新数据)

帝国cms 对接纳米数据(www.nami.com)接口,本接口主要接收、整理足球比赛实时数...

0 191
帝国cms网站会员登录与退出历史记录日志插件
帝国cms网站会员登录与退出历史记录日志插件

帝国cms默认只有上次登录时间与ip,没有一个记录清单,所以今天,我们分享这个帝...

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

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

0 354
帝国cms批量添加后台用户插件
帝国cms批量添加后台用户插件

使用帝国cms的企业用户、新闻资讯类站点的用户很多,此类站点很多时候需要有...

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