模板开发实战:首页、列表页、文章页、搜索页怎么拆?别全堆进一个文件

模板开发实战:首页、列表页、文章页、搜索页怎么拆?别全堆进一个文件 配图

很多人开始做 Z-BlogPHP 主题以后,最先卡住的不是不会写 HTML,而是不会拆模板。

最典型的几种乱法是:

  • 首页、分类页、搜索页全堆进一个文件
  • header.php 里塞了一堆页面专属逻辑
  • 文章详情和独立页面共用一套结构,最后谁都不合适
  • 明明是逻辑问题,却在模板里反复复制判断

这篇我们就专门解决一件事:

Z-BlogPHP 模板到底该怎么拆,才能既跑得通,又好维护。

一、先记住:模板拆分不是为了好看,是为了职责清楚

很多人理解“拆模板”,会下意识想到前端组件化。

但在 Z-BlogPHP 里,更重要的不是炫技,而是三个目标:

  1. 公共部分只写一次
  2. 不同页面类型各有自己的位置
  3. 页面结构和展示逻辑尽量不要混成一锅

所以模板拆分最核心的问题不是:

  • 能不能拆得很细

而是:

  • 哪一层是公共的
  • 哪一层是页面专属的
  • 哪些判断该留在模板,哪些该回逻辑层

二、最常见的几个模板文件,各自负责什么

在 Z-BlogPHP 主题里,最常用的一批模板文件通常是:

  • header.php
  • footer.php
  • index.php
  • single.php
  • page.php
  • search.php
  • comments.php
  • 404.php

你可以先把它们理解成下面这张职责图。

header.php

更像全站公共头部。

适合放:

  • <head> 里的 title、meta、CSS
  • 公共导航
  • 站点头部结构

footer.php

更像全站公共尾部。

适合放:

  • 页脚结构
  • 结尾脚本
  • 公共尾部信息

index.php

更像列表页总入口。

通常承接:

  • 首页
  • 分类页
  • 标签页
  • 作者页
  • 日期页

single.php

更像文章详情页。

通常承接:

  • 文章标题
  • 元信息
  • 正文
  • 标签
  • 评论区

page.php

如果你单独做它,通常给独立页面用。

search.php

专门处理搜索结果。

comments.php

专门处理评论列表和评论表单。

三、首页和列表页,为什么通常从 index.php 起步

很多主题的 index.php 不只是首页。

它经常还负责:

  • 分类列表
  • 标签列表
  • 作者列表
  • 日期归档

所以 index.php 常常是“列表型页面”的总入口。

这类页面的共性通常有:

  • 都要展示文章列表
  • 都要有分页
  • 都会有卡片或摘要结构

因此你拆的时候,可以先做一层共同结构,再按页面类型做小分支。

例如:

{template:header}

<main class="archive-main">
  {if $type=='index'}
    <h1>最新文章</h1>
  {elseif $type=='category'}
    <h1>{$category.Name}</h1>
  {elseif $type=='tag'}
    <h1>{$tag.Name}</h1>
  {else}
    <h1>文章列表</h1>
  {/if}

  {foreach $articles as $article}
    <article class="post-card">
      <h2><a href="{$article.Url}">{$article.Title}</a></h2>
      <p>{$article.Intro}</p>
    </article>
  {/foreach}
</main>

{template:footer}

这个写法的关键不在于样式,而在于:

  • 结构是共用的
  • 页面类型差异只留在必要分支里

四、文章页为什么应该尽量独立给 single.php

详情页和列表页的目标完全不一样。

列表页更强调:

  • 扫读
  • 跳转
  • 比较

详情页更强调:

  • 阅读
  • 结构完整
  • 评论和延伸信息

所以文章页最好别混进 index.php

一个最小的 single.php 大致可以这样起步:

{template:header}

<article class="post-single">
  <header class="post-header">
    <h1>{$article.Title}</h1>
    <div class="post-meta">
      <span>{$article.Author.Name}</span>
      <span>{$article.Time('Y-m-d')}</span>
    </div>
  </header>

  <div class="post-content">
    {$article.Content}
  </div>

  {template:comments}
</article>

{template:footer}

这就是一个清晰的详情页骨架:

  • 头部信息
  • 正文区域
  • 评论区域

后面再慢慢补:

  • 相关推荐
  • 目录
  • 作者卡片
  • 广告位
  • 下载区

五、搜索页最好单独拆,不要完全依赖列表页回落

有些主题没有单独的 search.php,搜索结果会直接用 index.php

能跑,但不够清楚。

因为搜索页通常至少有两件事和普通列表页不一样:

  1. 标题应该说明当前是搜索结果
  2. 空结果时要有专属提示

所以只要你打算认真做内容站,搜索页最好独立出来。

例如:

{template:header}

<main class="search-main">
  <h1>搜索结果</h1>

  {if count($articles)>0}
    {foreach $articles as $article}
      <article class="post-card">
        <h2><a href="{$article.Url}">{$article.Title}</a></h2>
      </article>
    {/foreach}
  {else}
    <p>没有找到相关内容,请尝试更换关键词。</p>
  {/if}
</main>

{template:footer}

这样后面你做搜索体验优化时,落点就非常明确。

六、公共区域怎么拆,才不会越拆越乱

模板拆分不是越碎越好。

很多人一开始就拆十几个片段,最后自己都找不到页面结构。

更稳的顺序是:

第一层,先拆全站公共部分

通常就是:

  • header.php
  • footer.php

第二层,再拆高频复用区

比如:

  • comments.php
  • sidebar.php
  • navbar.php

第三层,最后才拆页面内部片段

比如:

  • 列表卡片片段
  • 文章头部片段
  • 相关推荐片段

除非你的主题已经比较成熟,否则不要一开始拆得过细。

七、模板里哪些逻辑可以留,哪些应该回 include.php

这是模板开发最常见的边界问题。

可以留在模板里的

  • 页面类型分支
  • 显示与否判断
  • 遍历列表
  • 结构顺序控制
  • 少量显示相关条件

比如:

  • 首页显示大标题,分类页显示分类名
  • 有图就显示图,没有图就显示占位

这类判断留模板里通常没问题。

更适合回 include.php

  • 复用的缩略图逻辑
  • 复用的摘要截断逻辑
  • 复用的时间格式逻辑
  • 需要读配置再计算的派生值
  • 多个模板都会用到的业务判断

一句话:

模板保留“怎么显示”,逻辑层负责“显示什么结果更合适”。

八、一个更实战的拆法思路

如果你现在要做一个内容站主题,建议按下面顺序拆:

第一步

先把:

  • header.php
  • footer.php
  • index.php
  • single.php

跑通。

第二步

把搜索页单独拆成:

  • search.php

第三步

把评论区单独拆成:

  • comments.php

第四步

如果分类页、标签页和首页差异越来越大,再考虑:

  • category.php
  • tag.php

或者在 index.php 里做更清楚的分支。

九、模板开发里最常见的 6 个坑

1. 把所有页面都压进 index.php

短期省事,后面最难维护。

2. 在 header.php 写页面专属结构

header.php 更适合全站共用内容,不适合塞一堆详情页专属区块。

3. 把复用逻辑复制到多个模板

一旦缩略图、摘要、时间格式需要统一调整,就会很痛。

4. 搜索页没有独立处理空结果

对内容站来说,体验和 SEO 都不够好。

5. 评论区逻辑和详情页混写过重

后面调评论交互、审核提示、回复结构时会非常累。

6. 页面结构刚有点复杂,就开始无限拆片段

拆得过早、过碎,也会让主题越来越难看懂。

十、模板开发完成后,至少这样验证

写完模板以后,建议不要只看首页。

至少要逐个验证:

  • 首页
  • 分类页
  • 标签页
  • 文章详情页
  • 搜索页
  • 没有搜索结果时的状态
  • 评论区是否正常显示
  • 头部资源和尾部脚本是否正确加载

只要你开始把验证范围从“首页能开”扩大到“各页面类型都跑一遍”,模板问题会少很多。

结语

Z-BlogPHP 模板开发最重要的,不是把页面写出来,而是把页面类型和职责拆清楚。

你只要先把下面这套思路立住:

  • 公共头尾单独拆
  • 列表页从 index.php
  • 详情页从 single.php
  • 搜索页最好单独拆
  • 评论区尽量独立
  • 复用逻辑别在模板里到处复制

后面模板越写越多,结构也不容易失控。

下一篇我们继续讲主题配置项,怎么从后台设置,一路走到前台输出。

发表评论

发表评论