- A+
所属分类: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 title="目录树" class="gottree glyphicon glyphicon-list"></div>' .
'<div id="toc-container">' . "\n" .
$index .
'</div>' . "\n";
}
echo $index;
}
function themeInit($archive) {
if ($archive->is('single')) {
$archive->content = createCatalog($archive->content);
}
}
/* 文章目录结束 */
将以上代码写入function.php
文件,然后在需要输出目录的地方加上以下代码。
<?php getCatalog();?>
CSS自己写,记得加上如下JS代码。
$('.gottree').click(function() {
if ($("#toc-container").css("display") == "none") {
$("#toc-container").show();
} else {
$("#toc-container").hide();
}
return false; // 返回false可以避免在原链接后加上#
});
独角兽驿站
公众号