Widget 在Ektron中,如何找到包含特定配置的特定小部件的所有页面?

Widget 在Ektron中,如何找到包含特定配置的特定小部件的所有页面?,widget,ektron,Widget,Ektron,我正在使用Ektron 8.6安装,内容量惊人(即数万页),并试图确定哪些页面包含了某个小部件,而该小部件的配置有误。不幸的是,我对Ektron的实际操作经验很少,我正在努力找出如何找到这些页面 很多页面都有这个小部件。到目前为止,在手动检查了几百个页面之后,我发现了两个有问题的页面。我必须找到剩下的几页,如果有的话,很可能有 我能得到什么 我有这个安装的本地副本,可以连接到它的数据库,通过SQLServerManagementStudio 2008运行查询,我可以进入CMS工作区 到目前为止我

我正在使用Ektron 8.6安装,内容量惊人(即数万页),并试图确定哪些页面包含了某个小部件,而该小部件的配置有误。不幸的是,我对Ektron的实际操作经验很少,我正在努力找出如何找到这些页面

很多页面都有这个小部件。到目前为止,在手动检查了几百个页面之后,我发现了两个有问题的页面。我必须找到剩下的几页,如果有的话,很可能有

我能得到什么 我有这个安装的本地副本,可以连接到它的数据库,通过SQLServerManagementStudio 2008运行查询,我可以进入CMS工作区

到目前为止我所知道的 小部件本身被命名为分类小部件。它具有三级菜单的显示类型。配置错误的小部件勾选了一个名为“包含摘要”的复选框

从Internet Archive Wayback机器中,我可以看到这些违规页面仅在2013年10月和12月进入错误配置状态

我知道页面的完整URL。(毕竟,我是通过点击网站上的链接找到它们的。)

我在数据库中查找了以下内容:

  • 从我们的content表中,我找到了存储两个有问题页面的主要内容的行。我知道他们的内容ID
  • 从我们的page\u to\u对象表中:我找到了与这些内容ID对应的页面ID
  • 因为我已经知道了页面的别名,所以我在urlausmapping表中识别了它们的行
  • 有一个widget_types表,其中一行的标题是FOO_分类法(其中FOO是组织的名称),另一行的标题是TaxonomySummary。这些可能相关,也可能无关
。。。但从这里我被困住了

我认为我需要做什么(但我可能做错了) 我认为最有效的方法是通过数据库,通过查询找到:

  • 分类小部件的任何实例
  • 他们的配置是这样那样的
  • 加入任何包含这些小部件的页面
  • 已加入这些页面的URL别名
但是,虽然我可以编写一个SQL查询,将URL别名连接到它的page_to_对象映射到实际的content对象,但我不知道如何将这些内容链接到我正在寻找的小部件的实例

我对不涉及数据库的方法持开放态度

总而言之。 我需要所有有分类小部件的页面,并且它勾选了“包含摘要”复选框


如何查找这些页面?

这些信息对于v9.1是有效的,但我无法想象pagebuilder页面的存储方式会有很大的改变

每个页面生成器页面都存储在数据库的
content
表中。此查询似乎会调出所有pagebuilder页面:

从content\u type=1和content\u subtype=1的内容中选择*
content\u html
是一个描述页面的xml文档。此xml将具有页面上每个小部件的所有设置。这里是xml结构的简化版本。这里还有很多内容,但您需要检查小部件的设置:


... 
58
_widget.ascx的名称
ArrayOfDataStore xmlns:xsd=”http://www.w3.org/2001/XMLSchema“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“dataStorePropertyContentBlockId/PropertyValue xsi:type=“xsd:long”612/ValueTypeNameSystem.Int64/TypeNameAssemblyAndTypeSystem.Int64,mscorlib,版本=4.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089/AssemblyAndType/dataStore/ArrayOfDataStore
dz1
612
内容
1033
xml的
部分来自小部件的一部分(如果您这样做的话),通常位于编辑视图的
保存
事件处理程序中,其中的代码类似于:

if(主机!=null)
{
var commonApi=new Ektron.Cms.commonApi();
var objectData=新的objectData
{
ObjectId=ContentBlockId,
ObjectLanguage=commonApi.UserLanguage,
ObjectType=EkEnumeration.CMSObjectTypes.Content
};
Host.PBWidgetInfo.Associations.Clear();
Host.PBWidgetInfo.Associations.Add(objectData);
Host.SaveWidgetDataMembers();
}
听起来您想检查任何小部件的
节点,其中
的值等于小部件的ascx文件名的名称。
节点的值是一个xml转义文档。如果对上面示例中的设置值进行解码,将得到以下结果:


ContentBlockId
612
System.Int64
System.Int64,mscorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089
因此,让我们假设您的小部件是
Taxonomy.ascx
。通过使用以下查询,您可以找到包含此小部件的每个页面:

从内容中选择*
其中content_type=1,content_subtype=1
以及类似于N“%Taxonomy.ascx%”的内容
从那里,您可以检查设置并采取适当的操作。我希望这有帮助

更新: 如果结果数量太大,无法手动查看,则可以向where子句添加额外的条件。如果您正在查找一个名为
ContentBlockId
的属性,其值为612,类似这样的内容将使您更接近所需的结果集。然而,请记住,这个