首页>建站相关>写一个typecho后台设置页之单选框

写一个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_theme_options_radio_p1

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

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

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

My value is white

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

<?php if($this-&gt;options-&gt;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-&gt;addInput($searchForm -> multiMode());
}

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

typecho_theme_options_radio_p2

垃圾回收机制

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

如何让默认值生效

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

标签: typecho

移动端可扫我直达哦~

推荐阅读

typecho 2024-04-20

typecho根据标签的slug name信息判断是否输出免责声明

博主是从事机械行业的,工作过程中接触了很多二手老旧的设备,因为是二手设备,不缺胳膊少腿能正常运行已是难得,完善的说明书与售后服务想都不要想了。所以找设备的说明书成了一项附加的工作,总得让设备正常运行起来,偶尔设备有个小病小痛的,也不能...

建站相关 typecho

typecho 2023-11-02

Typecho开发文档-Widget设计文档

什么是WidgetWidget是组成Typecho的最基本元素,除了已经抽象出来的类库外,其它几乎所有的功能都会通过Widget来完成.在实践中我们发现,在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的,它会使系统灵活性...

建站相关 typecho

typecho 2023-10-25

Typecho默认路由表一览

路由器(Route)路由器(Route)是Typecho系统中的一个重要组件,类似mod_rewrite的机制,来实现独立的URL和指定的controller/action/params的映射规则.它通过识别诸如http://loca...

建站相关 typecho

typecho 2023-10-21

Typecho自动更新指定文章内容的尝试

曾经在老的博客(wordpress)里尝试并且成功运行过的一个方案,定时去请求某个比如“每天60秒读懂世界”这样的api,获取到数据,然后根据数据更新某一篇博文的内容。因为有“轻微”的强迫症,所以习惯把不用的东西直接“rm -rf”删...

建站相关 typecho

typecho 2023-10-21

Typecho数据库常用API

表的创建和删除在Typecho插件开发过程中,往往需要创建自己的表。上文提到Typecho_Db类中的query函数,可用于执行所有sql语句,因此我们使用query()来进行表的创建、修改或者删除。$db= Typecho_Db::...

建站相关 typecho

typecho 2023-10-18

让typecho博客支持显示数学公式

MathJax是一个开源的基于Ajax的数学公式显示的解决方案,结合多种先进的Web技术,支持主流的浏览器。MathJax根据页面中定义的LaTex数据,生成对应的数学公式。具体可见:mathjax项目代码(GitHub)因为是利用j...

建站相关 typecho

typecho 2023-10-15

为Typecho编辑器增加HTML标签支持

这几天为Typecho编辑器基本不支持块级元素而困扰,在github上翻编辑器插件的时候意外看到有位望友说可以去修改Hyperdown.php文件以增加对HTML标签的支持。该文件位于:build/var/HyperDown.php需...

建站相关 typecho

typecho 2023-10-12

typecho为什么更换主题后部分图片无法正确显示

其实严格的说,这可能是博主自己主题的问题,但人类的悲欢偶尔相通么,没准也可能在其他的主题中遇到类似的。博主之前边写博客边修改拼凑了一个比较简陋的主题,使用一段时间后,觉得主页过于单调了,于是在23年的国庆前后对主题整体做了一个比较大的...

建站相关 typecho