Z-Blog 主题设置页:main.php 与 Filter_Plugin_Admin_ThemeMng_SubMenu

· zblog · 阅读 12
摘要

主题想给用户留几个开关,不必写插件,主题本身就能带设置页。核心是两个文件一加一个钩子。第一步:在 include.php 挂菜单function theme_setting_menu(){ global $zbp; $zbp

主题想给用户留几个开关,不必写插件,主题本身就能带设置页。核心是两个文件一加一个钩子。

第一步:在 include.php 挂菜单

function theme_setting_menu(){
    global $zbp;
    $zbp->LoadLanguage('theme/你的主题');
    $zbp->Add_Filter_Plugin('Filter_Plugin_Admin_ThemeMng_SubMenu', 'theme_setting_page');
}
function theme_setting_page(){
    echo '<li><a href="?act=theme&id=你的主题">主题设置</a></li>';
}

第二步:建 main.php 输出表单

<?php
require '../../../zb_system/function/c_system_base.php';
require '../../../zb_system/function/c_system_admin.php';
$zbp->Load();
if (!$zbp->CheckRights('ThemeMng')) { $zbp->ShowError(6); die(); }

if (isset($_POST['save'])) {
    CheckIsRefererValid();
    $zbp->Config('你的主题')->Set('show_banner', (int)$_POST['show_banner']);
    $zbp->SaveConfig('你的主题');
    $zbp->SetHint('保存成功');
    Redirect($_SERVER['HTTP_REFERER']);
}
?>

关键点

  • CheckRights('ThemeMng') 不能省,否则任何登录用户都能改主题配置
  • CheckIsRefererValid() 防 CSRF,不加的话表单谁都能伪造提交
  • SaveConfig('主题ID') 的 ID 必须和目录名一致,写错不报错但值存不进

读取配置

模板里直接用 {$zbp->Config('你的主题')->show_banner},建议先在 include.php 里取出赋给模板变量,避免模板里反复调用。