typecho模板设置数据会在你换模板的时刻被清空,如许的设置实在我照样蛮喜好的,不会有数据残留。
然则WP用户转到typecho后跟我埋怨,说模板换成别的然后再切换返来,之前设置好的数据都没了,愿望我在yodu模板上动动四肢处理这个问题。
然则我是有些游移的,东西不是你说做我就要做的,我必需试一下...不然准许太快又搞不出来,岂不是很难熬痛苦!
不过既然发了这篇文章,就申明已搞定了
代码
在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="备份模板数据" /> <input type="submit" name="type" class="btn btn-s" value="复原模板数据" /> <input type="submit" name="type" class="btn btn-s" value="删除备份数据" /></form>';然后将内里涌现的一切“yodu”改成你的模板目次的名字,假如拿不准就去数据库里看看模板的值名字。
备份
当用户点击备份时,先推断是不是已存在备份,假如不存在就插进去一条新的数据,数据name为yodubf,value为模板底本的数据。此时就存在了一条备份数据。
假如再次点击备份按钮会发作什么呢?会触发更新数据的语句,就是读取模板的设置数据,然后将备份的模板数据更新。
复原
当用户点击复原按钮时,会推断是不是存在备份,假如不存在就发出提醒说不存在数据没法恢复;假如存在,就会举行一个反向的更新操纵,将备份的数据更新到模板默认设置数据。
这个操纵完成后会触发个小问题,比较影响体验的。就是在点击复原按钮时网页是先革新后实行php复原语句的,也就是说复原完成后,你看到的模板设置页面数据并没有复原,然则现实数据库内里已复原好了的,这一点很影响体验。
于是乎,我鸡贼的弄了个js自动革新语句,并发出提醒笔墨,如许一会儿就友爱多了,注重文章中代码方面我并未给出css款式,所以雅观度上须要自行优化。
删除
删除就简朴了,推断是不是存在备份,不存在就通知用户不必删了,你压根就没有备份数据,假如有备份就实行删除语句,发出提醒。
一些没用的申明
1,实在这东西应当能够写成懒人版的,模板名字什么的用php获取下,就不必我如许写死了,然则当时我处于试一试的心态写的,所以就可以简朴就简朴了,如今又懒得弄了,要不是为了水文,这个我都懒得贴出来。
2,别看文章中代码这么乱,条例就不清楚,实在我当时找了张纸写的逻辑然后才根据次序一步一步的写的,也测试了很多回。
3,最入手下手想写自动复原模板数据来着,就是检测到模板启用就自动复原曾的备份数据,然则当时想不通假如去推断模板启用。
4,当你想将本文章代码投入使用时,最好再测试博客举行测试,以避免危险你的数据库,同时发起测试时翻开数据库治理页面,寓目数据库对应表的变化

评论列表