诺兰网 - 只为资源而生-分享永无止境 - 专注优质源码/电脑软件/活动资讯/技术教程分享

诺兰网投稿 1

网站文章目录怎么增加 ? (免插件实现文章目录功能适应)

编辑:诺兰网 分类:emlog教程 首发 阅读量:44 次
扫码手机访问
0
摘要:emlog添加主题目录的教程好像不是很多,而且我找到的仅有的几个都是前台JS实现的,总感觉这样不如后台实现来的好。既然Typecho找不到现成的,只好“曲线救国”,由于实现文章目录的原理是通用的,所以就去WP里找了,那可是...

emlog添加主题目录的教程好像不是很多,而且我找到的仅有的几个都是前台JS实现的,总感觉这样不如后台实现来的好。既然Typecho找不到现成的,只好“曲线救国”,由于实现文章目录的原理是通用的,所以就去WP里找了,那可是大把大把的。

没多想,第一个就到WP果酱那里扒了他的插件代码,因为我曾经也是水煮鱼大大的粉啊,他的几个作品我用的可以说是炉火纯青了。自己写是不可能的,Ctrl+C+V 大法那么无敌

代码内容

不过毕竟是WP下的东西,要移植到Typecho还是要改一改的,下面直接放出修改后的代码吧,使用方法继续往下看。

function createCatalog($obj) { //为文章标题添加锚点
 global $catalog;
 global $catalog_count;
 $catalog = array();
 $catalog_count = 0;
 $obj = preg_replace_callback('/<h([1-6])(.*?)>(.*?)<\/h\1>/i', function($obj) {
 global $catalog;
 global $catalog_count;
 $catalog_count ++;
 $catalog[] = array('text' => trim(strip_tags($obj[3])), 'depth' => $obj[1], 'count' => $catalog_count);
 return '<h'.$obj[1].$obj[2].'><a name="cl-'.$catalog_count.'"></a>'.$obj[3].'</h'.$obj[1].'>';
 }, $obj);
 return $obj;
}

function getCatalog() { //输出文章目录容器
 global $catalog;
 $index = '';
 if ($catalog) {
 $index = '<ul>'."\n";
 $prev_depth = '';
 $to_depth = 0;
 foreach($catalog as $catalog_item) {
 $catalog_depth = $catalog_item['depth'];
 if ($prev_depth) {
 if ($catalog_depth == $prev_depth) {
 $index .= '</li>'."\n";
 } elseif ($catalog_depth > $prev_depth) {
 $to_depth++;
 $index .= '<ul>'."\n";
 } else {
 $to_depth2 = ($to_depth > ($prev_depth - $catalog_depth)) ? ($prev_depth - $catalog_depth) : $to_depth;
 if ($to_depth2) {
 for ($i=0; $i<$to_depth2; $i++) {
 $index .= '</li>'."\n".'</ul>'."\n";
 $to_depth--;
 }
 }
 $index .= '</li>';
 }
 }
 $index .= '<li><a href="#cl-'.$catalog_item['count'].'">'.$catalog_item['text'].'</a>';
 $prev_depth = $catalog_item['depth'];
 }
 for ($i=0; $i<=$to_depth; $i++) {
 $index .= '</li>'."\n".'</ul>'."\n";
 }
 $index = '<div id="toc-container">'."\n".'<div id="toc">'."\n".'<strong>文章目录</strong>'."\n".$index.'</div>'."\n".'</div>'."\n";
 }
 echo $index;
}

使用方法

  1. 把上面的代码放到主题文件functions.php最后一行之前
  2. 继续在functions.php内搜索关键词function themeInit

如果有themeInit这个函数,则在themeInit这个函数内添加下面的代码

if ($archive->is('single')) {
 $archive->content = createCatalog($archive->content);
}

如果没有themeInit这个函数,则在functions.php最后一行之前添加下面的代码

function themeInit($archive) {
 if ($archive->is('single')) {
 $archive->content = createCatalog($archive->content);
 }
}
  1. 最后在需要输出文章目录的位置调用<?php getCatalog(); ?>即可

这是通用的方法,具体到每个人使用时,可以根据自己的需求修改,不再赘述。

阅读时间:

字数统计:本文共有 2166 个字

本文标题:《网站文章目录怎么增加 ? (免插件实现文章目录功能适应)》发布于2022-11-3 18:55:41

版权声明:文章由《诺兰网》发布、原创转载请保留出处!

本文链接:https://www.nuolanyl.com/post-2363.html

上一篇
淘宝店铺0.01元撸1Q币秒到活动
下一篇
联通用户领券0.02充2元话费活动

免责声明:

本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:68407578@qq.com

同类推荐

最新文章

评论列表
签到

小姐姐视频

热门文章

随机推荐

标签云

emlog教程 网站文章目录怎么增加 ? (免插件实现文章目录功能适应)
emlog添加主题目录的教程好像不是很多,而且我找到的仅有的几个都是前台JS实现的,总感觉这样不如后台实现来的好。既然Typecho找不到现成的,只好&ldqu...
扫描二维码阅读原文
诺兰网 January, 01
生成社交图 ×