typecho 模板设置数据会在你换模板的时候被清空,这让喜欢折腾主题的我感到十分的苦恼。有没有办法让之前设置好的数据保存到数据库里呢,这样下次切换模板的时候就不需要重新再设置了。抱着这个疑问在网上寻找实现的办法,最终在大佬 泽泽社 的博客找到了办法,这边记录下。
在主题文件里找到 functions.php
,在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
都改成自己模板目录的名字,如果拿不准就去数据库里看看模板的值名字。