1

经过数小时的痛苦分析和猜测,我已成功将 1,000 条新闻和其他内容从 Sitefinity 5 迁移到 Wordpress,但仍有一些项目剩余。特别是页面。我知道很多内容都以非常晦涩的方式存储,但必须有人以前这样做过并且可以引导我朝着正确的方向前进。

我的研究(以及针对数据库的文本搜索)已经找到了页面标题等,但是当我搜索内容时,我什么也没得到。我的直觉告诉我内容是以二进制形式存储的,任何人都可以确认是否是这种情况?

Sitefinity 文档仅在您是在 Visual Studio 中设置站点的 .net 开发人员(据我所见)时才有用。

4

2 回答 2

12

这可能是我遇到过的最模糊的存储内容的方式。在对数据库执行文本搜索后,我终于找到了内容的存储位置,但这并不是一个简单的过程。

Pages的主记录好像是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”,标题为“图像”。图像可能以 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

我希望这可以帮助别人!

于 2017-02-14T19:43:39.307 回答
1

在这种情况下,您不需要版本项 - 正如您已经发现的那样,它以二进制格式存储页面的先前版本。

当前活动页面的数据在 sf_control_properties 和 sf_object_data 表中可用。您需要将这些与 sf_page_data 和 sf_page_node 一起加入,您将获得完整的图片。

根据您的要求,对每个页面执行 GET 请求并解析返回的 html 响应可能会更容易。

于 2017-02-15T00:14:35.297 回答