【问题标题】:Where in the Sitefinity database is content stored?Sitefinity 数据库中的内容存储在哪里?
【发布时间】:2017-02-14 12:46:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: sitefinity sitefinity-5


    【解决方案1】:

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

    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
    

    我希望这对某人有帮助!

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 感谢 Veselin,sf_control_properties 表与其他表的关系如何?另外,“在每个页面上执行 GET 请求”是什么意思我不能依赖抓取实时站点,因为许多页面不再链接到,但是它们仍然需要迁移以用于历史目的,这就是我在数据库工作的原因。
      • 没关系,在数据库上进行一些进一步的文本搜索让我找到了答案,他们加入了 sf_object_data.id = sf_control_properties.control_id。感谢您的意见,我会更新我的答案
      • 很好,你自己找到了。至于 GET - 您可以生成包含站点中所有页面的站点地图文件,然后请求它们。
      猜你喜欢
      • 2022-12-16
      • 1970-01-01
      • 2019-12-22
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多