1. 首页
  2. >
  3. 前端技术
  4. >
  5. Typecho

在 Typecho 主题中集成面包屑导航

添加评论

早期能找到 Typecho 面包屑文章都使用 category();+title(); 组合来实现,但它只显示单个分类,无法满足多层级面包屑导航效果。好在在开发版中的 Typecho 已新增 directory(); 函数,可输出多级面包屑导航。

关于 category 与 directory 函的区别

category(); 源码中可以看出,它只检索出所有已选定分类并输出内容:
旧版面包屑

directory(); 则检索出已选定分类,只取第一条分类,将分类的父级逐级输出,对多级分类的输出更友好。
新版面包屑

对 directory 函数的改进

其实 Typecho 内置的 directory(); 函数已经足够满足基本的面包屑导航功能了。但多级分类有可能导致搜索引擎错将父级分类对文章进行关联,导致重复及错乱收录。针对本站主题的优化,我在当前选定的分类链接上注明 H2 标签,以便以告诉搜索引擎当前分类权重。

// 为首页加上 nofollow 避免重复收录
printf('<a href="%1$s" rel="nofollow">%2$s</a> &gt; ', $this->options->siteUrl, _T('Home') );
// 当前当前分类,等同于 category(); 同级
$category = $this->categories[0];
// 获取所有父级分类
$directory = Widget\Metas\Category\Rows::alloc()->getAllParents( $category['mid'] );
// 将当前分类也加入父级分类数组中
$directory[] = $category;
// 判断是否有分类
if ( $directory ) {
    // 建立临时缓存
    $result = [];
    // 索引分类数据并将 html 标签重组至临时数组中
    foreach ( $directory as $category ) {
        $result[] = sprintf('<a href="%1$s" title="' . _T('View all articles in %3$s') . '">%2$s</a>', $category['permalink'], $category['name'], $category['description'] ?: $category['name'] );
    }
    // 为当前分类加上 H2 标签
    $result[] = '<h2>' . array_pop( $result ) . '</h2>';
    // 输出数据
    echo implode( " &gt; ", $result );
} else {
    // 排除无分类的特殊情况
    echo '<h2>未分类</h2>';
}

最终改进后的输出结构:
最终结构

在 Typecho 主题中集成面包屑导航
https://www.uevan.com/breadcrumbs-in-typecho
本文作者
maplesky
许可协议
CC BY-NC 4.0
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!
  1. 暂无评论
标签云
无标签
浏览记录
暂无记录