写一个typecho后台设置页之单选框

typecho实现主题设置页的控件继承自同一个类,所以它们支持同样数量的参数,但对于某些空间来说,其中某几个参数是不必要的,但这一节中的单选框元素,就是一个集齐了5个参数的狠角色,在functions.php中,我们利用这个类来实现一个单选框。

参数回顾

Typecho_Widget_Helper_Form_Element_Text这个类支持5个参数,兄弟类Typecho_Widget_Helper_Form_Element_Radio也一样,不同的是,对于Radio元素来说,这5个参数都有用武之地:

  • $name 表单输入项名称
  • $options 选择项
  • $value 表单默认值
  • $label 表单标题
  • $description 表单描述

程序展现与源代码

function themeConfig($form) {
    $searchForm= new Typecho_Widget_Helper_Form_Element_Radio('searchForm', array(
        'white' => '白色',  
        'black' => '黑色'
    ), 'white', _t('导航栏颜色'), _t('用户可以选择是否开启搜索功能'));
    $form->addInput($searchForm);
}

这是一段示例的程序,虽然提供了单选框的默认值,但在实际的测试中,这个默认值并没有起到应有的作用,展现于后台的初始状态如下图,程序设置了默认值为"white",但后台初始化后,白色按钮并没有被选中:

写一个typecho后台设置页之单选框

此时用如下语句意图打印searchForm的值是没有效果的:

<?php if($this->options->searchForm){echo 'My value is '.$this->options->searchForm;} ?>

选中白色并保存设置后,页面会打印出如下结果:

My value is white

在部分主题中看到过这种语法:

<?php if($this->options->searchForm){echo 'My value is '.$this->options->searchForm();} ?>

加上括号后,刚才输出在屏幕上的"My value is white"的语序会变为这样:

whiteMy value is

在不加括号的时候,语句返回一个值给了echo函数,供echo拼接字符串使用,而加了括号以后,语句不再返回值,而是象一个立即执行的函数一样直接在屏幕上输出了内容,所以就有了语序上的变化。

多行模式

单选框可选项目较多时,我们也可以考虑将可选择项目多行排列,比如将程序修改如下:

function themeConfig($form) {
    $searchForm= new Typecho_Widget_Helper_Form_Element_Radio('searchForm', array(
        'red' => '红色',
        'yellow' => '黄色',
        'blue' => '蓝色',
        'white' => '白色',
        'black' => '黑色'
    ), NULL, _t('导航栏颜色'), _t('用户可以选择是否开启搜索功能'));
    $form->addInput($searchForm -> multiMode());
}

修改为上述语句后"设置外观"页面的展现如下图:

写一个typecho后台设置页之单选框

垃圾回收机制

有一个需要留意的问题是,如果不想在代码中保留上述选项,并且在functions.php中明确删除了上面示例中的代码,searchForm的值还是能够被提取到,所以仅删除掉代码是不够的,我们需要在"设置外观"页面下重新点击保存设置,此时没有被引用的值才会被清除,所以修改代码之后,记得要及时保存一下设置。

如何让默认值生效

最初以为是自己设置的问题,在另一个typecho博客上尝试后,发现默认值同样是无法生效的,也就是设置完funcions.php之后,并不会触发数据的更新,但安装一个新的主题后,确实是有默认设置的,区别就在于,新安装主题后有一个启用的步骤,于是将主题换成另一个,然后重新启用回来,发现默认值正确得到了显示。

标签: typecho

移动端可扫我直达哦~

推荐阅读

thumbnail 2025-06-08

typecho前台ajax登录与错误处理

尝试了在主题前台做一个登录框,登陆的功能是实现了,有一个小小的不便,就是如果输错了密码,因为页面又跳回了首页,所以弹出式登录框又被隐藏了,登录成功与否不够明显,二次登录的场合操作也较繁琐,所以想实现前台以ajax的方式登录。实现aja...

建站相关 typecho

thumbnail 2025-06-08

聊聊html里的head部分

HTML文档的<head>部分是一个容器,用于包含文档的元数据(metadata)和链接到外部资源的信息,这些内容不会直接显示在网页上,但对网页的功能和表现至关重要。主要元素和功能1. 基础元素<title>:...

建站相关 typecho

thumbnail 2025-06-04

typecho前端实现站点语言的切换

前端修改的数据能及时反馈到后端,那当然需要一个前后端都可以无障碍读取的东西,所以最初是想要用localstorage,但发现php无法直接读取其值,所以就换成了cookie。前端通过js来设置参数值:document.cookie='...

建站相关 typecho

thumbnail 2025-06-02

typecho 主题中的模板与模块的概念

模板是 typecho 主题中一个重要的概念,我们说过typecho的极简主题可以只存在 index.php 这一个文件,但需要展现分类页的时候,typecho事实上会先去寻找名为 category.php 的分类页模板,文章页当然也...

建站相关 typecho

thumbnail 2025-06-02

typecho的几种常见的文章列表调用

处理好了header与面包屑,接下来就按照自己的需求自由发挥了,先放一个分类列表,再挑出一个喜欢的标签,自定义一个该标签下内容展示模块。Typecho 提供了多种文章循环方式,以下是常用的几种方法:标准文章循环<?php whi...

建站相关 typecho

thumbnail 2025-06-02

在typecho里实现面包屑导航

什么是面包屑导航面包屑导航是一种网站导航方式,通常在网站顶部显示,大多会放在站点header的下方,用于显示用户当前位置。 面包屑导航由导航元素构成,每个元素代表一个网站导航项,各个元素通常包含对应链接,供用户跳转。面包屑导航示例首页...

建站相关 typecho

thumbnail 2025-05-29

关于typecho中的路由知识

路由(Routing)是博客系统中将URL地址映射到具体处理逻辑的机制,它决定了当用户访问某个网址时,系统应该执行什么操作、显示什么内容。typecho站点一般都会开启伪静态,伪静态通过URL重写将"漂亮"的URL映射到实际的文件路径...

建站相关 typecho

thumbnail 2025-05-29

Typecho 模板中的翻译函数 _t 与 _e

在 Typecho 模板开发中,_t 和 _e 是用于国际化处理的函数,核心区别在于输出方式:"_t" 函数‌‌功能‌:获取翻译后的字符串但不直接输出,需结合 echo 使用。‌示例‌:<?php echo _t('欢迎语');...

建站相关 typecho

thumbnail 2025-05-26

typecho文章自定义字段的删除与修改

涉及数据库的操作,务必请提前做好备份!提前做好备份!!做好备份!!!小鸟数据的当前主题的缩略图字段命名为augPostThumb,这几天在尝试完善一下原有主题,下载了原站的数据库导入了测试站用于测试页面效果,测试主题的缩略图相关字段拟...

建站相关 typecho

thumbnail 2025-05-26

typecho的文章自定义字段的知识笔记

在typecho中,除了可以自定义设置项之外,我们也可以给文章自定义一些额外的字段,比如给文章编辑界面添加一个缩略图选项,或者增加一个keywords输入框,用来修改编辑当前内容页的关键词信息。// 主题设置 function th...

建站相关 typecho