Kentico 10 - 通过数据库更改 Web 部件内容
Kentico 10 - Web Part content change via database
我试图在 Kentico 的数据库模型中了解如何使用数据库脚本更改 Web 部件内容。
所以,基本上我有一个基于 Kentico 的网站,其中有几篇文章,以及其内容中的内部超链接。但问题是那些超链接的格式实际上是无效的。我一直在寻找一种方法来构建脚本并进行批量更新,以替换一些字符并将这些超链接更新为有效格式。
知道如何构建查询以获取所有已发布页面中使用的所有 Web 部件的内容。
谢谢
通常 "content" 不 在 Web 部件中设置。 Web 部件被配置为从页面类型中检索内容。对于像 Editable Text、Static Text、Static HTML 等特定 Web 部件有一个例外。
Web 部件的配置存储在 cms_pagetemplate
table 中的模板级别。该页面模板上所有 Web 部件的配置都存储在 PageTemplateWebParts
字段中。因此,您必须解析 XML 并获取正确的 Web 部件,然后对该字段执行更新。您也许可以执行正则表达式来查找该内容并替换它。
通过 SQL 执行此操作并不理想,仅仅因为版本历史,以后可能会导致很多问题。我建议找出您可以进行哪些 API 调用来执行这些更新并为其编写一个小程序。
这取决于您的 Web 部件以及内容的呈现方式。 Web 部件呈现其内容的方式有多种:
- web part layout 用于标记
- ASCX file for the web part 用于标记
- Web 部件使用使用转换来呈现标记的转发器 - 标记是在代码隐藏中生成的
最后一个可能很难更改,具体取决于 Web 部件以及您是否有权访问后面的所有代码,但您可以在解决方案中的代码中或在管理区域本身中更改其他代码。
在 SQL 中执行此操作可能需要结合使用 T-SQL XML 支持和正则表达式才能找到您要查找的内容。您实际上需要查看 CMS_WebPart
和 CMS_WebPartLayout
table 才能找到您要查找的内容。
但是,在阅读您的查询时,我不是 100% 确定您在谈论 Web 部件(如果您是,我深表歉意),因为您在谈论链接文章内容本身。如果这些是使用 Editable text web 部件设置的,那么您需要查看 CMS_Document
table 中的 DocumentContent
字段以查找要替换的链接。但是您随后需要了解如何正确设置这些链接的格式,以便以后无需重复此过程。
注:
- 在 SQL 中执行此操作时需要非常小心,以确保不会创建无效的 XML。当你那样做时,事情就变糟了。
- 这不会刷新您的缓存,因此您之后需要手动清除缓存。
- 如果您使用的是开箱即用的 Web 部件,您应该真正制作它们的副本并在您要修改时使用副本,这样,您不太可能拥有未来升级的痛苦。
我试图在 Kentico 的数据库模型中了解如何使用数据库脚本更改 Web 部件内容。
所以,基本上我有一个基于 Kentico 的网站,其中有几篇文章,以及其内容中的内部超链接。但问题是那些超链接的格式实际上是无效的。我一直在寻找一种方法来构建脚本并进行批量更新,以替换一些字符并将这些超链接更新为有效格式。
知道如何构建查询以获取所有已发布页面中使用的所有 Web 部件的内容。
谢谢
通常 "content" 不 在 Web 部件中设置。 Web 部件被配置为从页面类型中检索内容。对于像 Editable Text、Static Text、Static HTML 等特定 Web 部件有一个例外。
Web 部件的配置存储在 cms_pagetemplate
table 中的模板级别。该页面模板上所有 Web 部件的配置都存储在 PageTemplateWebParts
字段中。因此,您必须解析 XML 并获取正确的 Web 部件,然后对该字段执行更新。您也许可以执行正则表达式来查找该内容并替换它。
通过 SQL 执行此操作并不理想,仅仅因为版本历史,以后可能会导致很多问题。我建议找出您可以进行哪些 API 调用来执行这些更新并为其编写一个小程序。
这取决于您的 Web 部件以及内容的呈现方式。 Web 部件呈现其内容的方式有多种:
- web part layout 用于标记
- ASCX file for the web part 用于标记
- Web 部件使用使用转换来呈现标记的转发器 - 标记是在代码隐藏中生成的
最后一个可能很难更改,具体取决于 Web 部件以及您是否有权访问后面的所有代码,但您可以在解决方案中的代码中或在管理区域本身中更改其他代码。
在 SQL 中执行此操作可能需要结合使用 T-SQL XML 支持和正则表达式才能找到您要查找的内容。您实际上需要查看 CMS_WebPart
和 CMS_WebPartLayout
table 才能找到您要查找的内容。
但是,在阅读您的查询时,我不是 100% 确定您在谈论 Web 部件(如果您是,我深表歉意),因为您在谈论链接文章内容本身。如果这些是使用 Editable text web 部件设置的,那么您需要查看 CMS_Document
table 中的 DocumentContent
字段以查找要替换的链接。但是您随后需要了解如何正确设置这些链接的格式,以便以后无需重复此过程。
注:
- 在 SQL 中执行此操作时需要非常小心,以确保不会创建无效的 XML。当你那样做时,事情就变糟了。
- 这不会刷新您的缓存,因此您之后需要手动清除缓存。
- 如果您使用的是开箱即用的 Web 部件,您应该真正制作它们的副本并在您要修改时使用副本,这样,您不太可能拥有未来升级的痛苦。