浅谈

现在的我已经不再喜欢开发Typecho主题了
别问为什么,因为我真的不会网页设计。

但是,现在我还是给大家浅谈一些主题或插件开发时候,可能会用到的方法。

注意,本文重在讲不常见的

研究出多少就写多少

插件开发

插件配置

configHandle

configHandle 是手动配置插件变量,
该方法存在于Plugin.php里,非必须。
它在类 Widget_Plugins_Edit 中被调用(若存在)

它有三个参数,$pluginName $settings $isPersonal

参数备注
$pluginName插件名字,是string
$settings配置值,是array
$isInit是否为初始化,是Boolean

实例

// 假定typecho通过表单获取的配置如下,假定值
//$settings = array(
//    "name" => "权那他",
//    "age" => 1,
//    "height" => 175,
//    "hash" => ""
//);

public static function configHandle($pluginName, $settings, $isInit)
{
    //我们不希望改变 name
    if (!$isInit) {
        unset($settings['name']);
    }

    // 我们希望,初始化时,配置hash
    if ($isInit) {
        $settings['hash'] = md5("测试");
    }

    // 我们喜欢不许修改height的默认值
    if (!$isInit) {
        unset($settings['height']);
    }

    // 最后,插入到数据库
    // 这里必须有,因为,本方法存在,typecho就把操作交给本方法了
    // 本方法就是中途修改 $settings 的作用
    Helper::configPlugin($pluginName, $settings);
}

personalConfigHandle

personalConfigHandleconfigHandle 是一样的,
但是 personalConfigHandle 是私人配置。

它相比,还多一个参数

参数备注
$isPersonal是是否为私人变量,是Boolean

实例

public static function personalConfigHandle($config, $isInit){
// 和 configHandle 基本一样
// ******
//后面的 Helper::configPlugin($pluginName, $settings); 变为
  Helper::configPlugin("插件名字", $settings,true);
}

关于这个插件配置助手实例
你可以参考 Aidnabo 插件的 https://github.com/kraity/typecho-Aidnabo/blob/master/Plugin.php

主题开发

主题配置

themeConfigHandle

themeConfigHandle 写入位置在functions.php
是用自有函数处理配置信息
方法 themeConfigHandle 在类 Widget_Themes_EditconfigHandle(array $settings, $isInit) 方法被调用。

如果写入了改方法,那么在每次进行主题配置时都会被执行

该方法,有两个必须的参数 $settings$isInit

参数备注
$settings配置值,是array
$isInit是否为初始化,是Boolean

$settings 就是上面 themeConfig 构建表单抓取的配置

实例

// 假定typecho通过表单获取的配置如下,假定值
//$settings = array(
//    "name" => "权那他",
//    "age" => 1,
//    "height" => 175,
//    "hash" => ""
//);

function themeConfigHandle($settings, $isInit)
{
    //我们不希望改变 name
    if (!$isInit) {
        unset($settings['name']);
    }

    // 我们希望,初始化时,配置hash
    if ($isInit) {
        $settings['hash'] = md5("测试");
    }

    // 我们喜欢不许修改height的默认值
    if (!$isInit) {
        unset($settings['height']);
    }

    // 最后,插入到数据库
    // 这里必须有,因为,本方法存在,typecho就把操作交给本方法了
    // 本方法就是中途修改 $settings 的作用
    $db = Typecho_Db::get();
    if ($this->options->__get('theme:' . $this->options->theme)) {
        $update = $db->update('table.options')
            ->rows(array('value' => serialize($settings)))
            ->where('name = ?', 'theme:' . $this->options->theme);
        $db->query($update);
    } else {
        $insert = $db->insert('table.options')
            ->rows(array(
                'name' => 'theme:' . $this->options->theme,
                'value' => serialize($settings),
                'user' => 0
            ));
        $db->query($insert);
    }
}

themeConfigHandle 方法存在后,typecho就把操作交给themeConfigHandle方法了
themeConfigHandle 方法就是中途修改 $settings 的作用

可以利用该方法,对表进行更新
有点主题需要在一些表追加字段,如果每次都是查询是否存在,真的是多余的了
就在该方法中更新表既可以了

themeInit

themeInit 这个方法很万能,
它在typecho 类 Widget_Archive 引入 functions.php 后,判断themeInit是否存在,存在就调用。

传入的参数是 $this
对,就因为传入的是 $this,它就显得万能。

在这个方法里,可以中途改变很多默认的值。甚至改变网站名,这里的改变,不会修改数据库

实例,在首页,显示20条文章

function themeInit($archive) {
    if ($archive->is('index')) {
        $archive->parameter->pageSize = 20; // 自定义条数
    }
}

关于更多,后续补上

关于主题的functions.php使用,就简略以上,后续我在研究看看后补上

研究出多少就写多少

研究出多少就写多少,如果发现更多不常见的方法,就随时更新