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

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

1351 2021-04-23 17:58:20

收藏

简述

通过JS获取并循环正文中的h2标签,并循环到导航区域实现帝国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开发教程
帝国cm后台权限检测判断代码大全
帝国cm后台权限检测判断代码大全

帝国cm后台权限检测判断代码大全,包括信息管理、栏目管理、模板管理、用户面...

13 599
帝国CMS二次开发给tags增加封面图片
帝国CMS二次开发给tags增加封面图片

帝国CMStag作为聚合页,应用十分广泛。但作为聚合页,配图往往是必不可少的。帝...

14 863
网上下载的帝国CMS免费模板,怎样防止后门与挂马?
网上下载的帝国CMS免费模板,怎样防止后门与挂马?

帝国CMS是一款相当安全的开源cms程序,如果使用规范的模板,一般是不会被挂马的...

7 962
怎样实现帝国CMS验证码无刷新显示?
怎样实现帝国CMS验证码无刷新显示?

这个蜘蛛爬虫、恶意广告横行的年代,任何涉及到信息反馈的页面不加入验证码就...

1 367
帝国cms网站加载速度很慢怎么办?
帝国cms网站加载速度很慢怎么办?

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

1 502
帝国CMS怎样配置勾选会员注册协议才能注册
帝国CMS怎样配置勾选会员注册协议才能注册

帝国CMS默认注册是没有会员注册协议的。但如果从严谨的角度出发,不勾选&ldqu...

0 274
帝国cms网站怎样用宝塔自动备份?
帝国cms网站怎样用宝塔自动备份?

帝国cms开发的网站数据要经常备份,防范不小心误删除了数据或文件以及服务器...

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

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

3 342
随机帝国CMS开发教程
帝国cms无法加载360站长平台的js推送代码怎么办?
帝国cms无法加载360站长平台的js推送代码怎么办?

如果直接在帝国cms模板中插入360推送代码,会发现在插入360推送代码后,无法正...

7 504
帝国CMS怎样开发用户访问页面后自动生成html?
帝国CMS怎样开发用户访问页面后自动生成html?

帝国cms程序虽然已经效率很高,但如果数据量较大,如超过20万,那么不管模板如何...

0 283
帝国cms静态页中如何获取php设置的cookie值?
帝国cms静态页中如何获取php设置的cookie值?

帝国cms的前台页面,是生成的静态文件,如果想要直接获取cookie,或是直接生成页...

3 480
帝国cms7.2版本怎样支持https?
帝国cms7.2版本怎样支持https?

帝国cms7.2默认是不支持https的,开启https时,7.2及以下版本会出现后台空白的...

1 388
怎样实现帝国CMS验证码无刷新显示?
怎样实现帝国CMS验证码无刷新显示?

这个蜘蛛爬虫、恶意广告横行的年代,任何涉及到信息反馈的页面不加入验证码就...

1 367
帝国cms会员中心怎样调用我提交的反馈历史记录?
帝国cms会员中心怎样调用我提交的反馈历史记录?

帝国cms信息反馈表非常好用,通过合理开发信息反馈功能,我么可以实现用户留言...

1 233
帝国cms会员中心查看评论过的文章怎么开发?
帝国cms会员中心查看评论过的文章怎么开发?

许多帝国cms站点开放了会员评论的功能,而评论过的文章可以查看则相当于当年...

1 274
帝国cms灵动标签调用友情链接的多种形式
帝国cms灵动标签调用友情链接的多种形式

帝国cms怎样用灵动标签调用友情链接?又要怎样区分链接有没有图片、友情链接...

1 375
客服QQ:341553759
点击咨询 常见问题 >
官方交流群:90432500
点击加入