Typecho模板設置數據備份與恢復

    給Typecho開發主題時,可以添加一個功能

    來源于:

    https://qqdie.com/archives/typecho-templates-backup-and-restore.html

    typecho模板設置數據會在你換模板的時候被清空,這樣的設置其實我還是蠻喜歡的,不會有數據殘留。

    然而WP用戶轉到typecho后跟我抱怨,說模板換成別的然后再切換回來,之前設置好的數據都沒了,希望我在yodu模板上動動手腳解決這個問題。

    然而我是有些遲疑的,東西不是你說做我就要做的,我必須試一下...否則答應太快又搞不出來,豈不是很難受!

    不過既然發了這篇文章,就說明已經搞定了

    Typecho模板設置數據備份與恢復

    代碼

    themeConfig($form)函數里添加

    $db = Typecho_Db::get();
    $sjdq=$db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:Yodu'));
    $ysj = $sjdq['value'];
    if(isset($_POST['type']))
    { 
    if($_POST["type"]=="備份模板數據"){
    if($db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:Yodubf'))){
    $update = $db->update('table.options')->rows(array('value'=>$ysj))->where('name = ?', 'theme:Yodubf');
    $updateRows= $db->query($update);
    echo '<div class="tongzhi">備份已更新,請等待自動刷新!如果等不到請點擊';
    ?>    
    <a href="<?php Helper::options()->adminUrl('options-theme.php'); ?>">這里</a></div>
    <script language="JavaScript">window.setTimeout("location=\'<?php Helper::options()->adminUrl('options-theme.php'); ?>\'", 2500);</script>
    <?php
    }else{
    if($ysj){
         $insert = $db->insert('table.options')->rows(array('name' => 'theme:Yodubf','user' => '0','value' => $ysj));
         $insertId = $db->query($insert);
    echo '<div class="tongzhi">備份完成,請等待自動刷新!如果等不到請點擊';
    ?>    
    <a href="<?php Helper::options()->adminUrl('options-theme.php'); ?>">這里</a></div>
    <script language="JavaScript">window.setTimeout("location=\'<?php Helper::options()->adminUrl('options-theme.php'); ?>\'", 2500);</script>
    <?php
    }
    }
            }
    if($_POST["type"]=="還原模板數據"){
    if($db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:Yodubf'))){
    $sjdub=$db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:Yodubf'));
    $bsj = $sjdub['value'];
    $update = $db->update('table.options')->rows(array('value'=>$bsj))->where('name = ?', 'theme:Yodu');
    $updateRows= $db->query($update);
    echo '<div class="tongzhi">檢測到模板備份數據,恢復完成,請等待自動刷新!如果等不到請點擊';
    ?>    
    <a href="<?php Helper::options()->adminUrl('options-theme.php'); ?>">這里</a></div>
    <script language="JavaScript">window.setTimeout("location=\'<?php Helper::options()->adminUrl('options-theme.php'); ?>\'", 2000);</script>
    <?php
    }else{
    echo '<div class="tongzhi">沒有模板備份數據,恢復不了哦!</div>';
    }
    }
    if($_POST["type"]=="刪除備份數據"){
    if($db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:Yodubf'))){
    $delete = $db->delete('table.options')->where ('name = ?', 'theme:Yodubf');
    $deletedRows = $db->query($delete);
    echo '<div class="tongzhi">刪除成功,請等待自動刷新,如果等不到請點擊';
    ?>    
    <a href="<?php Helper::options()->adminUrl('options-theme.php'); ?>">這里</a></div>
    <script language="JavaScript">window.setTimeout("location=\'<?php Helper::options()->adminUrl('options-theme.php'); ?>\'", 2500);</script>
    <?php
    }else{
    echo '<div class="tongzhi">不用刪了!備份不存在!!!</div>';
    }
    }
        }
    echo '<form class="protected" action="?yodubf" method="post">
    <input type="submit" name="type" class="btn btn-s" value="備份模板數據" />&nbsp;&nbsp;<input type="submit" name="type" class="btn btn-s" value="還原模板數據" />&nbsp;&nbsp;<input type="submit" name="type" class="btn btn-s" value="刪除備份數據" /></form>';
    

    SQL

    然后將里面出現的所有“yodu”改成你的模板目錄的名字,如果拿不準就去數據庫里看看模板的值名字。

    備份

    當用戶點擊備份時,先判斷是否已經存在備份,如果不存在就插入一條新的數據,數據name為yodubf,value為模板原本的數據。此時就存在了一條備份數據。

    如果再次點擊備份按鈕會發生什么呢?會觸發更新數據的語句,就是讀取模板的設置數據,然后將備份的模板數據更新。

    還原

    當用戶點擊還原按鈕時,會判斷是否存在備份,如果不存在就發出提示說不存在數據無法恢復;如果存在,就會進行一個反向的更新操作,將備份的數據更新到模板默認設置數據。

    這個操作完成后會觸發個小問題,比較影響體驗的。就是在點擊還原按鈕時網頁是先刷新后執行php還原語句的,也就是說還原完成后,你看到的模板設置頁面數據并沒有還原,但是實際數據庫里面已經還原好了的,這一點很影響體驗。

    于是乎,我雞賊的弄了個js自動刷新語句,并發出提示文字,這樣一下子就友好多了,注意文章中代碼方面我并未給出css樣式,所以美觀度上需要自行優化。

    刪除

    刪除就簡單了,判斷是否存在備份,不存在就告訴用戶不用刪了,你壓根就沒有備份數據,如果有備份就執行刪除語句,發出提示。

    一些沒用的說明

    1,其實這東西應該可以寫成懶人版的,模板名字什么的用php獲取下,就不用我這樣寫死了,但是當時我處于試一試的心態寫的,所以就能簡單就簡單了,現在又懶得弄了,要不是為了水文,這個我都懶得貼出來。

    2,別看文章中代碼這么亂,條例就不清晰,其實我當時找了張紙寫的邏輯然后才按照順序一步一步的寫的,也測試了很多回。

    3,最開始想寫自動還原模板數據來著,就是檢測到模板啟用就自動還原曾經的備份數據,然而當時想不通如果去判斷模板啟用。

    4,當你想將本文章代碼投入使用時,最好再測試博客進行測試,以免傷害你的數據庫,同時建議測試時打開數據庫管理頁面,觀看數據庫對應表的變化

    網頁下載(防代碼丟失):

    備用網頁

    提取碼:無
    解壓碼:無

    這個主題就使用了這個功能

    Typecho模板設置數據備份與恢復-Npcink
    Typecho模板設置數據備份與恢復-Npcink

    Photograph - 精致的Typecho相冊主題

    Typecho

    Typecho文章保護插件

    2019-5-15 8:46:28

    Typecho

    Coffin - 簡潔的typecho主題

    2019-5-19 16:03:51

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 中文字幕亚洲综合精品一区| 国产成人一区二区动漫精品 | 精品国产免费一区二区三区| 在线精品国产一区二区| 久久无码人妻精品一区二区三区 | 国产AV一区二区三区传媒| 亚洲国产精品一区二区第一页免| 免费无码AV一区二区| 国内自拍视频一区二区三区| 亚洲国产精品第一区二区三区| 鲁丝片一区二区三区免费| 国产乱码一区二区三区| 国产午夜精品免费一区二区三区 | 日韩一区二区三区在线观看 | 亚洲午夜精品一区二区麻豆| 福利一区二区视频| 久久婷婷久久一区二区三区| 成人区人妻精品一区二区不卡网站| 91亚洲一区二区在线观看不卡| 国产情侣一区二区三区| 国产激情一区二区三区小说| 无码国产精品一区二区免费式影视| 中文字幕一区二区三区免费视频| 国产伦精品一区二区三区不卡| 亚洲AV美女一区二区三区| 任你躁国产自任一区二区三区| 日本韩国一区二区三区| 国产日韩视频一区| 国产成人一区二区三区电影网站 | 中文字幕久久久久一区| 日韩精品无码Av一区二区| 精品少妇一区二区三区视频| 色偷偷av一区二区三区| 久久精品无码一区二区三区日韩| 精彩视频一区二区三区| 国产91精品一区| 国产剧情国产精品一区| 国产精品一区12p| 亚洲日本va午夜中文字幕一区| 国产精品视频分类一区| 国产在线观看一区二区三区|