前阵子想着瞎折腾一下博客模板,在emlog资源上找找,觉得模板资源比较少,也想着尝试一下其它的博客系统于是着手迁移到了typecho。整个迁移过程也算是简单,主要是在数据库迁移上花了点时间,其它在新系统上自己简单加了点小功能,自己看起来感觉爽一点,有想迁移到typecho上的朋友倒是可以参考一下。
typecho系统搭建
这块内容直接查看,typecho官网,根据官网的步骤安装就可以了。
数据库迁移
数据的迁移,官网上推荐了一个github上的项目迁移脚本。迁移脚本是用python写的,博主是把线上的emlog数据表导到本地环境,再用python命令(注:这里用python2.6,博主由于python版本问题折腾了一会,python3或者python2.7都执行失败)
迁移到typecho的数据表中,在本地处理好后才把数据表放回线上。这里最好备份一下原有的数据表,避免由于操作失误导致数据丢失。
新功能
文章封面图片。获取bing第日图片地址放入数据库,在没有封面图的文章上显示出来。
- 博主使用的模板地址
- 修改的代码文件 usr/themes/Affinity/index.php
- 代码如下:
// 获取bing每日图片,并写入fields数据表
$cid = 99999;
$bingResponse = json_decode(Helper::curlGet('http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'), true);
$bingEveryDayImg = 'http://s.cn.bing.net'.$bingResponse['images'][0]['url'];
$db = Typecho_Db::get();
$todayTimeStamp = strtotime(date('Y-m-d'));
$selectName = 'bingEveryDayImg_%';
$insertName = 'bingEveryDayImg_'.date('Y-m-d');
$bingSql = $db->select()->from('table.fields')->where('name like ?', $selectName)->where('cid = ?', $cid)->where('int_value = ?', $todayTimeStamp);
//$sql = $db->query($bingSql); var_dump($sql); exit;
$todayImg = $db->fetchRow($bingSql);
if (empty($todayImg)) {
try {
$insert = $db->insert('table.fields')
->rows(array(
'cid' => $cid,
'name' => $insertName,
'type' => 'str',
'str_value' => json_encode($bingResponse),
'int_value' => $todayTimeStamp,
));
//将构建好的sql执行, 如果你的主键id是自增型的还会返回insert id
$db->query($insert);
} catch (Throwable $e) {
var_dump($e->getMessage());exit;
}
}
// 获取fields表中图片数据
$getBingSql = $db->select()->from('table.fields')->where('name like ?', $selectName)->where('cid = ?', $cid)->order('int_value', 'desc')->limit(20);
//$sql = $db->query($getBingSql); var_dump($sql); exit;
$bingImgs = $db->fetchAll($getBingSql);
$max = 9;
if (count($bingImgs) < $max) {
$oneImg = '';
if ($bingImgs >= 1) {
$oneImg = 'http://s.cn.bing.net'.json_decode($bingImgs[0]['str_value'], true)['images'][0]['url'];
}
foreach (range(0, $max) as $v) {
$defaultImgs[] = $oneImg;
}
if ($bingImgs >= 1) {
$bingImgs = array_column($bingImgs, 'str_value');
foreach ($bingImgs as $v) {
$tmpBingImgs[] = 'http://s.cn.bing.net'.json_decode($v, true)['images'][0]['url'];
}
$bingImgs = $tmpBingImgs;
unset($tmpBingImgs);
}
$bingImgs = array_merge($bingImgs, $defaultImgs); //$bingImgs数组就是文章封面图片的地址啦
} else {
$bingImgs = array_column($bingImgs, 'str_value');
foreach ($bingImgs as $v) {
$tmpBingImgs[] = 'http://s.cn.bing.net'.json_decode($v, true)['images'][0]['url'];
}
$bingImgs = $tmpBingImgs; //$bingImgs数组就是文章封面图片的地址啦
unset($tmpBingImgs);
}