前阵子想着瞎折腾一下博客模板,在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);
}