
很多主题第一版都喜欢把内容写死:
这样起步快,但主题一旦要维护,就会很难受。
因为你很快就会碰到这些问题:
所以一个真正能用的主题,迟早要做配置项。
这一篇我们就把这条链路讲完整:
后台怎么做配置,配置怎么保存,前台又怎么把它用起来。
不是所有东西都该做成配置项。
更适合做成主题配置的,通常是这些:
这些东西有一个共同点:
它们属于全局设置,而不是某篇文章自己的数据。
所以它们更适合放进主题配置,而不是塞进文章字段里。
主题或插件的全局配置,通常会走:
$zbp->Config('AppID')->SomeKey = $value;
$zbp->SaveConfig('AppID');
读取时也很直接:
$value = $zbp->Config('AppID')->SomeKey;
这意味着你做主题配置时,核心其实就是三件事:
Config比如你准备先做这三个:
HomeHeroTitleHomeHeroSubtitleDefaultThumb先把名字定清楚,后面会省很多麻烦。
也就是主题的 main.php。
Config保存逻辑通常还是在 main.php 里。
最终常见落点会是:
include.phpheader.phpindex.phpsingle.php主题后台页的保存逻辑,重点不是“表单长什么样”,而是流程要完整。
比较稳的顺序通常是:
CheckIsRefererValid()ConfigSaveConfig()BuildTemplate() 或其他重建一个简化示意大概像这样:
if (count($_POST) > 0) {
CheckIsRefererValid();
$zbp->Config('MyTheme')->HomeHeroTitle = trim(GetVars('HomeHeroTitle', 'POST'));
$zbp->Config('MyTheme')->HomeHeroSubtitle = trim(GetVars('HomeHeroSubtitle', 'POST'));
$zbp->Config('MyTheme')->DefaultThumb = trim(GetVars('DefaultThumb', 'POST'));
$zbp->SaveConfig('MyTheme');
$zbp->BuildTemplate();
$zbp->SetHint('good');
Redirect('./main.php');
}
你会发现真正关键的是:
这才是“配置项能落地”的骨架。
CheckIsRefererValid()很多人写后台保存逻辑时,容易把这一步忘掉。
但它很重要。
因为主题配置页本质上是后台写操作。
只要是写操作,就不应该只是:
`CheckIsRefererValid()`` 的作用,可以理解成:
给后台保存动作补一层基础校验。
你后面写插件设置页时,这个习惯也同样重要。
BuildTemplate(),什么时候不一定要这也是很多人第一次做配置时容易迷糊的地方。
如果一个设置会影响前台渲染结果,比如:
那保存之后往往要考虑重建模板相关结果。
这时常见就会用到:
$zbp->BuildTemplate();
如果改的是模块结构、缓存结果,还可能涉及:
BuildModule()SaveCache()你不用机械地每次都全重建,但至少要建立这个意识:
保存成功,不等于前台立刻按你期待刷新。
有些改动和模板、模块、缓存是有关联的。
这里最容易犯的错是:
更稳的写法一般有两种。
如果逻辑非常简单,模板里直接读也可以:
{php}
$heroTitle = $zbp->Config('MyTheme')->HomeHeroTitle;
{/php}
但这种方式更适合很轻的场景。
include.php 里统一做兜底比如:
function MyTheme_GetDefaultThumb() {
global $zbp;
$thumb = $zbp->Config('MyTheme')->DefaultThumb;
return !empty($thumb) ? $thumb : $zbp->host . 'zb_users/theme/MyTheme/assets/default-cover.jpg';
}
这样前台模板拿到的是一个已经处理过的结果。
只要配置项开始有:
我都更建议你回到 include.php 统一处理。
假设你要做“首页主视觉配置”。
这类需求通常包括:
这时候最自然的拆法就是:
提供四个表单项:
HomeHeroTitleHomeHeroSubtitleHomeHeroButtonTextHomeHeroEnabled写入主题 Config。
在首页模板或相关辅助函数里做:
这样这套配置才算真正闭环。
这一点必须强调。
这些更适合用 Metas。
如果你把文章级数据硬塞进主题配置,后面编辑体验会非常糟糕。
后台能保存,但前台根本没读。
结果一旦配置为空,模板就开始出现空块。
CheckIsRefererValid()这是后台保存流程里很容易漏的一步。
导致你误以为配置没生效。
前台一旦开始多处使用,维护会越来越痛。
这会直接把内容编辑流程弄乱。
不要只看“后台保存成功”。
至少要验证:
这才是真正的“配置项做完了”。
主题配置项的本质,不是做几个输入框,而是把:
这一整条链路做通。
只要你把这套闭环做顺了,后面再加首页配置、默认图、模块开关、SEO 默认值,就都会顺很多。
下一篇我们进入插件开发入门,讲 RegisterPlugin、Add_Filter_Plugin、main.php 这些东西到底怎么配合。
发表评论: