经过数小时的艰苦分析和猜测,我已经成功地将1000条新闻和其他内容从Sitefinity 5迁移到Wordpress,但仍有一些项目遗留下来。特别是页面。我知道很多内容都是以非常模糊的方式存储的,但必须有人以前这样做过,并能引导我朝着正确的方向前进。
我的研究(以及针对DB的文本搜索)已经找到了页面标题等,但当我搜索内容时,我一无所获。我的直觉告诉我,内容是以二进制形式存储的,有人能证实情况是否如此吗?
Sitefinity文档只有当你是一个在Visual Studio中设置了网站的.net开发人员时才有用(据我所见)。
这可能是我遇到过的最模糊的内容存储方式。在对数据库进行文本搜索后,我终于找到了内容的存储位置,但获取内容并不是一个简单的过程。
页面的主记录显示为sf_page_node,有相关表格:
- sf_object_data(page_id与sf_page_node.content_id相关)
- sf_draft_pages(page_id与sf_page_node.content_id相关)
- sf_page_data(content_id与sf_page_node相关。content_id)
- sf_control_properties(control_id与sf_object_data.id相关)
因此,您可以通过以下查询获得所需信息:
select * from
[sf_page_node]
join sf_object_data on sf_page_node.content_id = sf_object_data.page_id
join sf_control_properties on sf_object_data.id = sf_control_properties.control_id
其他需要考虑的事项:
- parent_id字段与sf_page_node表相关,因此如果您正在编写脚本,请确保也查询它
- 页面可能有一个横幅图像,您会将"place_holder"值设置为"BannerHolder",标题为"image"。该图像可能以Blob的形式存储在sf_media_content中,您应该单独处理。"ImageId"的"nme"值将在"val"列中具有GUID。您可以用这个值作为"content_id"来查询sf_media_content——实际的二进制数据存储在sf_chunks中,它们与"file_id"相关
考虑到迁移内容所需的内容,我修改后的查询如下:
select
original.content_id,
original.url_name_,
original.title_,
parent.id,
parent.url_name_,
parent.title_,
place_holder,
sf_object_data.caption_,
sf_control_properties.nme,
val
from [sf_page_node] original
join sf_object_data on original.content_id = sf_object_data.page_id
join sf_control_properties on sf_object_data.id = sf_control_properties.control_id
join sf_page_node parent on original.parent_id = parent.id
我希望这能帮助到别人!
在这种情况下,您不需要版本项-正如您已经发现的,它以二进制格式存储页面的前一版本。
sf_control_properties和sf_object_data表中提供了当前活动页面的数据。您需要将这些数据与sf_page_data和sf_page_node结合在一起,您将获得全貌。
根据您的需求,对每个页面执行GET请求并解析返回的html响应可能会更容易。