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

写一个typecho后台设置页之文本框

厄长的前言

尝试在wordpress默认主题twentyten的基础上修改了一个主题,也就是这个博客《虾比比》现在所用的主题了。在尝试的过程中,对于一些html以及css知识有了更进一步的了解,这种感觉就象新开了一个网游账号,经历了一系列的打怪升级,终于走出了新手村,很有成就感的同时,也更敬畏于网页背后所涉及的知识体系。

等站点初具雏形之后,发现了几个比较严重的问题,一是前期没有好的分类与规划,导致后期一个php文件实现了太多的功能,页面自由度不高;二是命令混乱,随着css语句的逐渐增加,其结构混乱到自己也找不到去哪修改一个显示上的错误;三是主题缺少一个后台设置的页面,站点内容的改动完全靠手动修改或添加主题php文件实现,这样的主题显然是只能用于自用,没法分享给他人的。

挺莫名其妙的就是很喜欢用typecho,最初也是想尝试用typecho写一个自用主题,奈何相关文档实在太少,所以选择了wordpress作为入门,毕竟无论是走过的路,还是沿路的坑,都有无数前辈的足迹。遇到问题,百度搜索下,就能遇到好多同样掉坑的难友。因为wp主题修改过程中发现后台设置是必不可少的,于是想先熟悉一下typecho的后台设置页的编写。

typecho默认主题中的输入框实现

在typecho的主题functions.php文件中,用了这么一段程序来实现一个文本框,如果在文本框中输入一个图片地址,主题会在站点名称之前显示这张图片;

function themeConfig($form) {
    $logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, NULL,_t('我是一个标题'), _t('我是一个简单的说明'));
    $form->addInput($logoUrl);
} 

可以看到Typecho_Widget_Helper_Form_Element_Text这个类支持5个参数:

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

由于typecho为后台设置页面提供了多种表单,这些表单都是对Typecho_Widget_Helper_Form_Element这个类的继承,而上述的这些参数,都是在Typecho_Widget_Helper_Form_Element类中预订义的,不同的表单元素需要不同的参数,对于输入框这个元素,选择项与表单默认值得是不需要提供的,所以这里直接填写为“NULL”就好;

以下是Typecho_Widget_Helper_Form_Element的部分代码:

/*=================
构造函数
@access public
@param string $name 表单输入项名称
@param array $options 选择项
@param mixed $value 表单默认值
@param string $label 表单标题
@param string $description 表单描述
@return void
=================*/
public function __construct($name = NULL, array $options = NULL, $value = NULL, $label = NULL, $description = NULL)
{
    /* 创建html元素,并设置class /
    parent::__construct('ul', array('class' => 'typecho-option', 'id' => 'typecho-option-item-' . $name . '-' . self::$uniqueId));
    $this->name = $name;
    self::$uniqueId ++;

    /* 运行自定义初始函数 /
    $this->init();

    /* 初始化表单标题 /
    if (NULL !== $label) {
        $this->label($label);
    }

    /* 初始化表单项 /
    $this->input = $this->input($name, $options);

    /* 初始化表单值 /
    if (NULL !== $value) {
        $this->value($value);
    }

    /* 初始化表单描述 /
    if (NULL !== $description) {
        $this->description($description);
    }
}

下图Typecho_Widget_Helper_Form_Element的继承者们,他们都继承自Typecho_Widget_Helper_Form_Element这个类,也可以被用于后台设置页面的组建工作中:

typecho_theme_options_text_p1

这些文件所处的文件夹如下,有需要查询的亲,可以下载一个typecho的安装包,解压后自行查找:

varTypechoWidgetHelperFormElement

跑题跑地有点远了,在functions.php文件中包含下面的语句之后(同前文,为查看方便复制于此):

function themeConfig($form) {
    $logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, NULL,_t('我是一个标题'), _t('我是一个简单的说明'));
    $form->addInput($logoUrl);
} 

此时点击主题的设置外观按钮,设置页面呈现的表单应当如下所示;

typecho_theme_options_text_p2

这个输入框的值如何调用呢,在typecho的header.php文件中找到了如下语句,typecho会判断logoUrl的值是否为空,不为空则输出地址为logoUrl值的图片,为空则输出站点名称以及站点的说明,利用“logoUrl()”语句可以提取这个输入框的值,这个函数名怎么来的呢,其实就是前文中5个参数的第一个;

<?php if ($this->options->logoUrl): ?>
    <a id="logo" href="<?php $this->options->siteUrl(); ?>">
        <img src="<?php $this-&gt;options-&gt;logoUrl() ?&gt;" alt="&lt;?php $this->options->title() ?>" />
    </a>
    <?php else: ?>
    <a id="logo" href="<?php $this-&gt;options-&gt;siteUrl(); ?&gt;"&gt;&lt;?php $this->options->title() ?></a>
    <p class="description"><?php $this->options->description() ?></p>
<?php endif; ?>

在输入框中填入虾比比站点logo看一下效果:

https://www.biib.top/wp-content/themes/twentyten/icons/logo.png

在默认主题中,图片显示如下。

typecho_theme_options_text_p3

标签: typecho

移动端可扫我直达哦~

推荐阅读

typecho 2025-04-18

Typecho_Db 类以及各方法基础用例

Typecho_Db 是 Typecho 博客系统的数据库操作核心类,提供了数据库连接、查询构建和执行等功能。Typecho_Db 提供了简洁高效的数据库操作接口,是Typecho插件和主题开发中最常用的类之一。主要功能数据库连接管理...

建站相关 typecho

typecho 2025-04-16

typecho 1.2.1 给标签添加description说明文字

之前写过一篇为typecho标签添加说明字段的方法,对应的是typecho1.1版本,目前typecho的稳定版本是1.2.1, 因为服务器php版本较低,一直没有去尝试新版。这几天用小皮面板搭建了一个本地的php环境,终于是正经尝试...

建站相关 typecho

typecho 2025-04-11

Typecho博客系统中的config.inc.php文件

在 Typecho 博客系统中,config.inc.php 是一个核心配置文件,用于存储数据库连接信息和系统关键设置。它通常位于 Typecho 的安装根目录下,在安装过程中自动生成。Typecho 的安装包解压后并不包含这个文件,...

建站相关 typecho

typecho 2025-04-09

Typecho尝试获取主题的一些基础信息

在Typecho的主题一览里是利用了一个循环来遍历主题,遍历主题的时候可以通过activated参数来确定是否是当前主题,这样就可以利用官方提供的函数来获取主题信息了,缺点很明显,需要多使用一个循环,浪费资源。<?php \Wi...

建站相关 typecho

typecho 2025-04-02

typecho模板解析优先级

类似于wordpress ,Typecho的模板系统也遵循特定的优先级规则,当系统寻找模板文件时会按照以下顺序进行查找:模板文件查找优先级主题自定义模板 (最高优先级)usr/themes/[主题名]/[模板文件]例如:usr/the...

建站相关 typecho

typecho 2025-03-27

typecho如何实时更新被修改后的style.css文件

给新的站点“biib.top”加了个友情链接,顺便修改了一下主题的footer背景。但浏览器缓存了站点的css文件,修改后的效果并不实时生效。直接清除浏览器缓存是个简单粗暴的办法,问题在于这个效果也只是针对博主个人,用户可不会没事瞎清...

建站相关 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