媒介
在2018年的时刻写过《typecho模板设置数据备份与恢复》的文章,个中内里的代码将模板名字写死了,须要模板作者修改个中的模板名字才用于其他模板,如许很不轻易,近期盘算给本身的新模板到场这个功用,于是就改成通用型的了
起首猎取模板目次文件夹称号
经由视察我发明typecho数据库内里的模板名字实在就是模板文件夹的名字,并不是模板声明的名字,所以我们须要猎取到模板文件夹名字,不过我没找到适宜的要领,所以经由过程截取字符串的体式格局截取到模板名字,代码以下:
$str1 = explode('/themes/', Helper::options()->themeUrl);//截取/themes/背面的字符串$str2 = explode('/', $str1[1]);//截取/前面的字符串$name=$str2[0];//获得模板文件夹名字然后将功用代码中写死的名字改成猎取到的名字
就是将《typecho模板设置数据备份与恢复》代码中的yodu换成$name。
末了将整理好的代码放入functions中
具体操作就是,翻开模板的functions.php文件(没有的能够自行竖立一个能够参考 typecho 的默许模板),然后在 themeConfig($form) 函数里增加以下整理好的代码:
$str1 = explode('/themes/', Helper::options()->themeUrl);$str2 = explode('/', $str1[1]);$name=$str2[0];$db = Typecho_Db::get();$sjdq=$db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:'.$name));$ysj = $sjdq['value'];if(isset($_POST['type'])){ if($_POST["type"]=="备份模板设置数据"){if($db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:'.$name.'bf'))){$update = $db->update('table.options')->rows(array('value'=>$ysj))->where('name = ?', 'theme:'.$name.'bf');$updateRows= $db->query($update);echo '<div class="tongzhi col-mb-12 home">备份已更新,请守候自动革新!假如等不到请点击';?> <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:'.$name.'bf','user' => '0','value' => $ysj)); $insertId = $db->query($insert);echo '<div class="tongzhi col-mb-12 home">备份完成,请守候自动革新!假如等不到请点击';?> <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:'.$name.'bf'))){$sjdub=$db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:'.$name.'bf'));$bsj = $sjdub['value'];$update = $db->update('table.options')->rows(array('value'=>$bsj))->where('name = ?', 'theme:'.$name);$updateRows= $db->query($update);echo '<div class="tongzhi col-mb-12 home">检测到模板备份数据,恢复完成,请守候自动革新!假如等不到请点击';?> <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 col-mb-12 home">没有模板备份数据,恢复不了哦!</div>';}}if($_POST["type"]=="删除备份数据"){if($db->fetchRow($db->select()->from ('table.options')->where ('name = ?', 'theme:'.$name.'bf'))){$delete = $db->delete('table.options')->where ('name = ?', 'theme:'.$name.'bf');$deletedRows = $db->query($delete);echo '<div class="tongzhi col-mb-12 home">删除胜利,请守候自动革新,假如等不到请点击';?> <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 col-mb-12 home">不必删了!备份不存在!!!</div>';}} }echo '<form class="protected home col-mb-12" action="?'.$name.'bf" 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>';完成
如许就轻易到场模板了,只需改改款式啥的就能够了,趁便说下应当只兼容SQL环境,其他数据库环境没试过...

评论列表