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

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

1643 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添加/修改信息后,怎样自动刷新栏目和首页?

很多网友在新增信息之后发现首页看不到栏目也看不到,于是开始点刷新刷新内容...

3 891
帝国CMS文章配图怎样设置自动添加水印?
帝国CMS文章配图怎样设置自动添加水印?

现在采集网站非常多,不止采集内容,还采集图片,还不标注出处,非常可恶。那么,帝国...

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

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

1 367
帝国cms无法加载360站长平台的js推送代码怎么办?
帝国cms无法加载360站长平台的js推送代码怎么办?

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

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

文章如果带有目录,可以让用户在浏览文章时对文章结构一目了然,对于用户体验提...

9 1642
帝国cms怎样判断文章有没有缩略图?
帝国cms怎样判断文章有没有缩略图?

在帝国cms二次开发过程中,我们有时会需要判断一条信息有没有缩略图(标题图)。...

0 427
帝国cms多站点跨库调用
帝国cms多站点跨库调用

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

0 454
帝国cms点击切换视频播放源功能操作流程
帝国cms点击切换视频播放源功能操作流程

帝国cms的视频播放功能比较强大,支持的视频源格式也比较多。但除了使用帝国c...

1 549
推荐插件
帝国cms自动给正文关键词添加tag内链
帝国cms自动给正文关键词添加tag内链

帝国cms有自带的给关键词添加内链功能,但需要手动添加关键词,容易出现疏漏和...

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

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

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

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

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

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

0 675
帝国cms自动生成文章新闻目录插件下载
帝国cms自动生成文章新闻目录插件下载

用户体验是我们的需求,百度蜘蛛的认可更是我们的需求。毕竟,没有收录排名,何来...

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

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

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

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

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

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

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