Typecho主题数据备份与恢复 非插件

插件开发及发布

版主: woniou

Typecho主题数据备份与恢复 非插件

帖子玫音阁 » 2018年 10月 2日 05:20

原文

https://krait.cn/major/1747.html

详情访问
https://krait.cn/major/1747.html

由于 typecho 模板设置数据会在换模板的时候被清空,想那些每次配置数据的人自己都觉得很烦。所以自己写了一个非插件的处理方法,可以适合任何 typecho 的主题,超级兼容。

## 使用方法
需要找到自己主题下的```functions.php``` 在```themeConfig($form) ```函数里添加如下的JavaScript
**你应该知道怎么添加吧,注意格式哦**

再次之前还要引入

代码: 全选
<script type="text/javascript" src="./js/jquery.js"></script>

然后在引入,主要一定要严格按照顺序来。

代码: 全选
function backData() {
    var newLocal= localStorage.backupData;
    if (newLocal!= "" && newLocal!= undefined) {
        var jsonData = JSON.parse(newLocal);
        var data = jsonData;
        for(var i in data){
            switch (data[i].type) {
                case "text":
                    $('#'+document.getElementsByName(data[i].name)[0].id).val(data[i].value);
                    break;
                case "textarea":
                    $('#'+document.getElementsByName(data[i].name)[0].id).val(data[i].val);
                    break;
                case "checkbox":
                    switch (data[i].checked) {
                        case 'true':
                            document.getElementById(data[i].id).checked = true;
                            break;
                        case 'false':
                            document.getElementById(data[i].id).checked = false;
                            break;
                    }
                    break;

                case "radio":
                    switch (data[i].checked) {
                        case 'true':
                            $('#'+data[i].id).prop("checked","checked");
                            break;
                        case 'false':
                            $('#'+data[i].id).removeAttr("checked");
                    }
                    break;
            }
        }
    }
}
function backupData() {
    var json = [];
    var inputs = $("input");
    var textareas = $("textarea");
    for (i = 0, len = inputs.length; i < len; i++) {
        var j = {};
        var input = inputs[i];
        j.name = input.name;
        j.type = input.type;
        j.id = input.id;
        switch (input.type){
            case "text":
                j.value = input.value;
                break;

            case "radio":
                j.checked = ''+input.checked+'';
                break;

            case "checkbox":
                j.checked = ''+input.checked+'';
                break;
            default:
        }
        json.push(j);
    }
    for (i = 0, len = textareas.length; i < len; i++) {
        var j = {};
        var textarea = textareas[i];
        j.name = textarea.name;
        j.type = 'textarea';
        j.id = textarea.id;
        j.val = $('#'+textarea.id).val();

        json.push(j);
    }
    var dataUp = JSON.stringify(json);
    localStorage.backupData = dataUp;
}
jQuery(function(){
    $(".typecho-option-submit").append("<li><button type=\"button\" class=\"btn primary\" onclick=\"backupData()\">备份</button></li><li><button type=\"button\" class=\"btn primary\" onclick=\"backData()\">恢复</button></li>");
});



但是有些主题有很长啦啦的配置,每次修改后还要滑到底保存,这样用```position: fixed``` 强行固定在右侧,既方便有美观。

代码: 全选
<style>
        .typecho-option-submit{
            position: fixed !important;
            bottom: 10px !important;
            right: 30px !important;
        }
        .typecho-option-submit li{
            display: inline;
            margin-right: 5px;
        }
    </style>


## 最后

如果你觉得很实用,就留个评论点个赞呗!
不过既然发了这篇文章,就说明已经搞定了。
头像
玫音阁
 
帖子: 55
注册: 2015年 12月 27日 10:26

Re: Typecho主题数据备份与恢复 非插件

帖子ClayMore » 2018年 10月 2日 16:01

确实不错~
头像
ClayMore
 
帖子: 1834
注册: 2007年 11月 29日 02:55

Re: Typecho主题数据备份与恢复 非插件

帖子hxuf » 2018年 10月 2日 19:05

我弄好主题后就把默认的主题删掉了。省的点错了出问题。
hxuf
 
帖子: 11
注册: 2018年 8月 21日 22:04

Re: Typecho主题数据备份与恢复 非插件

帖子玫音阁 » 2018年 10月 2日 21:38

hxuf 写道:我弄好主题后就把默认的主题删掉了。省的点错了出问题。

其实没这个必要, 你可以用一个变量把
代码: 全选
localStorage.backupData
中的替换
代码: 全选
backupData
,这样就可以多重使用.
头像
玫音阁
 
帖子: 55
注册: 2015年 12月 27日 10:26

Re: Typecho主题数据备份与恢复 非插件

帖子低调哥 » 2018年 10月 13日 17:35

hxuf 写道:我弄好主题后就把默认的主题删掉了。省的点错了出问题。

具体怎么添加 还是没搞明白 新手啊
低调哥
 
帖子: 6
注册: 2018年 10月 13日 17:32

Re: Typecho主题数据备份与恢复 非插件

帖子低调哥 » 2018年 10月 13日 17:36

玫音阁 写道:
hxuf 写道:我弄好主题后就把默认的主题删掉了。省的点错了出问题。

其实没这个必要, 你可以用一个变量把
代码: 全选
localStorage.backupData
中的替换
代码: 全选
backupData
,这样就可以多重使用.


楼主的教程还是 不太明白 纯新手 试了好几遍都出错。。。
低调哥
 
帖子: 6
注册: 2018年 10月 13日 17:32

Re: Typecho主题数据备份与恢复 非插件

帖子低调哥 » 2018年 10月 13日 17:43

不知道哪里的错误
Parse error: syntax error, unexpected 'var' (T_VAR) in E:\phpStudy\PHPTutorial\WWW\typecho\usr\themes\ddgink\functions.php on line 134
低调哥
 
帖子: 6
注册: 2018年 10月 13日 17:32


回到 插件及扩展

在线用户

正在浏览此版面的用户:没有注册用户 和 7 位游客