明志唯新

博客移植到 Orchard CMS 上的经验

发表于

我的这个个人博客多年以来一直在使用 Dasblog 系统,当初 Dasblog 系统的 xml 数据存储是最吸引我的,当然还有其他很多不错的特性。

但是我们知道 Dasblog 使用的 asp.net webform 实现的,所以对于有 html 洁癖的我来说,一直在忍受 ViewState 给自己带来的不爽,也曾考虑过使用 BlogEngine.NET ,But you know,他依然会让我不爽!

ASP.NET MVC 是一个不错的 .NET web app 框架,重新还给我们纯洁的 HTML 和开发体验,个人非常喜欢,一度让从 ASP.NET MVC 2 开始就几乎不再编写 web form 的 web 应用了。而在 ASP.NET MVC 领域中一个不错的 CMS 系统,映入我的眼帘: Orchard

Orchard 是一个免费和开源的社区交流项目,致力于在 ASP.NET 平台开发应用程序和可重用性组件。使用的开源协议是 OSI 认证的 New BSD license。关于这个项目的中文介绍内容,在这里我推荐大家看看 周金根同学的相关博客文章 。相信你也会像我一样喜欢 Orchard 的。

关于 Orchard 的安装等大家可以从周金根同学的相关博客文章 中了解的很详细了,这里我不再累赘复述了。今天给大家分享一下我将博客从 Dasblog 向Orchard迁移的主要过程吧。

  1. 在 Orchard 安装时,最好使用 default,而别选择 blog,否则你导入博客后的的几个相关功能很可能无法正常显示结果,比如:Blog Archives widget。
  2. 从 Dasblog 中导出 BLOGML 数据来, 这里我用的是 DasBlog <-> BlogML 工具,非常小巧实用。使用该工具将导出的 XML 文件保存备用,(假设导出的文件名是 blog.xml)。
  3. 登录进 Orchard 的后台,从模块中查找并安装 BlogML 模块。安装后会找到如图的功能界面

import_blog

注意选好要导入到的博客,因为 Orchard 可以创建多个 Blog。在该界面中选择好上一步刚刚导出的 blog.xml 文件,然后配置好你的 SlugPattern 和 Default Blog Slug 参数,点击 Upload file and Import 按钮,等待片刻导入便已经成功。 4. 也许你会认为到上一步就已经成功了,但你错了,Orchard 的组件功能大都不错,但难免有让我们不够满意的地方,Orchard 还需要继续努力啊。那么,我们还要做什么呢?嗯,我们还需要调整一下导入后的数据:切换到你的数据库管理器 (SSMS) 中找到 Orchard 数据库中的 Common_CommonPartRecord 表,将其中你的博客文章的 PublishedUTC 字段改为跟 CreatedUTC 相等的值——如何做到?嗯,注意这个表内有个 Container_id,我们怎么知道我们我们博客的 Container_id 呢?答案是,从Orchard_Blogs_BlogPartRecord 中找——如果你只有一个博客,那么这个表中唯一一行数据的Id就是你想要的 Container_id了。那么作为一个开发人员我们应该可以编写出这一步的 T-Sql 语句了吧,呵呵,很简单的 Upload 语句,自己编写吧:) 5. 也许你以为……,对,到这里还是没最终完成,原因是 Blog Archives widget 的数据显示只有一行,系统认为所有博客都是今天的。怎么办?

我这里写了一段 T-Sql,执行一下即可:

delete from Orchard_Blogs_BlogPartArchiveRecord
insert into Orchard_Blogs_BlogPartArchiveRecord([Year],[Month],PostCount,BlogPart_id)
select [Year],[Month],COUNT(Id) as PostCount,8 as blogpart_id from (
SELECT [Id]
        ,year([CreatedUtc]) as [Year]
        ,month([CreatedUtc]) as [Month]
    FROM [Common_CommonPartRecord]
where [Container_id]=8
) as tb
group by [Year],[Month]
order by [Year],[Month]`

OK,到这一步总算完成了。但依然要提醒你一下:上面的第 4 步和第 5 步绝对不要倒过来做,否则你会发现当你发布新博客后,Orchard_Blogs_BlogPartArchiveRecord 又恢复成一条了,也就是说 Blog Archives widget 的数据显示又只有一行了。切记!