Sndow CMS 1.3.1:把默认主题和模板开发体验再打磨一遍

今晚主要没有做“大功能堆叠”,而是围绕默认主题、模板开发体验和前台细节做了一轮打磨。很多优化看起来不大,但对真正写主题、维护模板、使用前台页面来说,体验会更顺一些。

这次优化的重点,是让默认主题更像一个可以长期使用和二次开发的基础主题。

默认主题列表结构优化

之前默认主题的首页、归档页、分类页、搜索页里,文章列表代码重复比较多。后续如果要调整列表样式,就需要在多个模板里同步修改,维护成本比较高。

这次把文章循环部分抽成了统一的列表局部模板:

sd_theme_file('templates/post-list', [
    'show_category_badge' => true,
    'empty_text' => sd_lang('暂无内容'),
]);

需要注意的是,这次只合并了“循环开始后的文章列表部分”。页面标题、归档说明、面包屑这些仍然保留在各自模板中。这样既减少重复代码,又不会把不同页面强行合成一个大模板,结构更清楚。

没有特色图时不再留空白块

默认主题列表里,如果文章没有设置特色图,以前左侧仍然会保留一个图片区域,看起来像一个空白占位块。

现在逻辑改成了:

  • 有特色图:显示左侧图片,右侧显示内容
  • 没有特色图:不输出图片区域,内容自动占满整行

这对没有统一设置封面图的内容站更友好,列表不会显得残缺。

分类置顶图标只在分类页显示

分类置顶的含义,本质上是“在某个分类列表里优先展示”。之前在首页列表里,如果文章设置了分类置顶,也可能显示“分类置顶”图标,语义上不太准确。

现在 is_cat_sticky() 已经收紧判断,只在分类归档页返回 true。首页仍然只展示全局置顶,分类页才展示分类置顶。

头部补充站内搜索

默认主题头部新增了站内搜索入口。桌面端会和导航并排显示,移动端会自动适配到菜单区域里。

搜索功能使用系统现有搜索逻辑,提交到:

?s=关键词

不额外增加复杂依赖,也不影响原有搜索页模板。

TDK 输出更简洁

主题头部原来输出 SEO 三要素时通常要这样写:

<?php $tdk = sd_get_tdk(); ?>
<title><?php echo htmlspecialchars($tdk['title'] ?? '', ENT_QUOTES); ?></title>
<meta name="description" content="<?php echo htmlspecialchars($tdk['description'] ?? '', ENT_QUOTES); ?>">
<meta name="keywords" content="<?php echo htmlspecialchars($tdk['keywords'] ?? '', ENT_QUOTES); ?>">

这次新增了更简洁的写法:

<title><?php echo sd_tdk_field('title'); ?></title>
<meta name="description" content="<?php echo sd_tdk_field('description'); ?>">
<meta name="keywords" content="<?php echo sd_tdk_field('keywords'); ?>">

sd_tdk_field() 会自动读取当前页面 TDK 并完成转义。旧的 sd_get_tdk() 仍然兼容,不影响已有主题。

文档同步更新

这次也同步更新了主题开发文档和通用函数文档,补充了:

  • sd_tdk_field() 用法
  • sd_theme_file($file, $vars) 可传变量
  • 旧版 sd_get_tdk() 写法仍然兼容

文档同步很重要。功能写进系统里只是第一步,能让主题作者看懂、敢用、少踩坑,才算真正完成。

小结

Sndow CMS 1.3.1 更像是一次“体验修补版”。它没有刻意追求功能数量,而是把默认主题里一些不顺手、不准确、难维护的地方逐个整理了一遍。

这类优化可能不会第一眼很惊艳,但它们会在后续主题开发、模板维护和真实建站使用中慢慢体现价值。