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

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

1,038 次浏览添加评论

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

关于 category 与 directory 函的区别

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

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

对 directory 函数的改进

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

PHP
  1. // 为首页加上 nofollow 避免重复收录
  2. printf('<a href="%1$s" rel="nofollow">%2$s</a> &gt; ', $this->options->siteUrl, _T('Home') );
  3. // 当前当前分类,等同于 category(); 同级
  4. $category = $this->categories[0];
  5. // 获取所有父级分类
  6. $directory = \Widget\Metas\Category\Rows::alloc()->getAllParents( $category['mid'] );
  7. // 将当前分类也加入父级分类数组中
  8. $directory[] = $category;
  9. // 判断是否有分类
  10. if ( $directory ) {
  11. // 建立临时缓存
  12. $result = [];
  13. // 索引分类数据并将 html 标签重组至临时数组中
  14. foreach ( $directory as $category ) {
  15. $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'] );
  16. }
  17. // 为当前分类加上 H2 标签
  18. $result[] = '<h2>' . array_pop( $result ) . '</h2>';
  19. // 输出数据
  20. echo implode( " &gt; ", $result );
  21. } else {
  22. // 排除无分类的特殊情况
  23. echo '<h2>未分类</h2>';
  24. }

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

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