sitecore查询或工具,用于查找损坏的项目/模板(不再存在)
正在寻找一个快速且易于查询我的整个sitecore数据库(主数据库、web数据库或pub数据库),并确定某个项目的模板不再存在的位置 我正试图序列化我的整个树,我发现有很多项目的模板已经被删除,并希望得到一个列表,他们没有太多的头痛 当查看这些项目时,会显示template:template不再存在,下面是呈现该项目的代码sitecore查询或工具,用于查找损坏的项目/模板(不再存在),sitecore,sitecore6,Sitecore,Sitecore6,正在寻找一个快速且易于查询我的整个sitecore数据库(主数据库、web数据库或pub数据库),并确定某个项目的模板不再存在的位置 我正试图序列化我的整个树,我发现有很多项目的模板已经被删除,并希望得到一个列表,他们没有太多的头痛 当查看这些项目时,会显示template:template不再存在,下面是呈现该项目的代码 private static void RenderQuickInfoTemplate(HtmlTextWriter output, Sitecore.Data.Items.
private static void RenderQuickInfoTemplate(HtmlTextWriter output, Sitecore.Data.Items.Item item)
{
Sitecore.Data.Items.Item item2;
Sitecore.Diagnostics.Assert.ArgumentNotNull(output, "output");
Sitecore.Diagnostics.Assert.ArgumentNotNull(item, "item");
output.Write("<tr><td>");
output.Write(Translate.Text("Template:"));
output.Write("</td><td>");
using (new SecurityDisabler())
{
item2 = item.Database.GetItem(item.TemplateID);
}
bool flag = (item2 != null) && (CommandManager.QueryState("shell:edittemplate", item) == CommandState.Enabled);
if (flag)
{
output.Write("<a href=\"#\" onclick=\"javascript:scForm.postRequest('','','','shell:edittemplate');return false\">");
}
if (item2 != null)
{
output.Write(item2.Paths.Path);
}
else
{
output.Write(Translate.Text("[template no longer exists]"));
}
private static void RenderQuickInfoTemplate(HtmlTextWriter输出,Sitecore.Data.Items.Item)
{
Sitecore.Data.Items.item2;
Sitecore.Diagnostics.Assert.ArgumentNotNull(输出,“输出”);
Sitecore.Diagnostics.Assert.ArgumentNotNull(项,“项”);
输出。写入(“”);
output.Write(Translate.Text(“模板”);
输出。写入(“”);
使用(新的SecurityDisabler())
{
item2=item.Database.GetItem(item.TemplateID);
}
bool标志=(item2!=null)&&(CommandManager.QueryState(“shell:edittemplate”,item)=CommandState.Enabled);
国际单项体育联合会(旗)
{
输出。写入(“”);
}
if(item2!=null)
{
output.Write(item2.Path.Path);
}
其他的
{
output.Write(Translate.Text(“[模板不再存在]”);
}
谢谢我认为基于已删除模板的项目不再从(标准)基础模板继承。在quickinfo中,您应该看到它们的模板ID类似于{000-0000-0000…}
您可以尝试根据此id查找所有项目。我认为基于已删除模板的项目不再从(标准)基础模板继承。在quickinfo中,您应该看到它们的模板id类似于{000-0000-0000…}
您可以尝试根据此id查找所有项目。想到的两个选项:
我想到两个选择:
使用流行的powershell模块,请尝试
Get-ChildItem -Path "master:\sitecore" -Recurse | ForEach-Object {if (!$_.Template){ write-host $_.ItemPath }}
对我来说,它返回了很多我无法在内容编辑器中打开的项目
如果只是几个项目,而您想手动执行所有操作,则可以使用dbbrowser:
<yoursiteurl>/sitecore/admin/dbbrowser.aspx.
若要实际删除项目,请删除最后一行中的“#”,风险由您自己承担。该脚本需要相当长的时间才能运行,并且您可能需要更改路径,以防您在内容之外损坏了项目。使用流行的powershell模块,请重试
Get-ChildItem -Path "master:\sitecore" -Recurse | ForEach-Object {if (!$_.Template){ write-host $_.ItemPath }}
对我来说,它返回了很多我无法在内容编辑器中打开的项目
如果只是几个项目,而您想手动执行所有操作,则可以使用dbbrowser:
<yoursiteurl>/sitecore/admin/dbbrowser.aspx.
若要实际删除项目,请删除最后一行中的“#”,风险由您自己承担。脚本需要相当长的时间才能运行,并且您可能需要更改路径,以防您在内容之外有断开的项目。另外,如果您发现断开的链接报告不起作用,请确保在adminis中重建链接索引更新控制台。虽然这适用于实际链接,但不确定它是否适用于模板问题,因为我在发布附加说明之前尝试了这种方法。如果发现“断开链接”报告不起作用,请确保在管理控制台中重建链接索引。虽然这适用于实际链接,但不确定它是否适用于模板在发布之前,我尝试了这种方法,但问题是模板id是一个有效的guid。这让我认为该值存储为一个没有任何引用完整性的字符串。这种假设是错误的(至少在sitecore 7.5中是这样):模板ID与项目一起存储,因此在删除模板时不必重置。OP和me存在模板ID与模板不对应的问题。基于链接数据库删除模板时,它应该得到更新。问题是模板ID是有效的guid。这让我觉得该值被存储为没有任何引用完整性的字符串。这种假设是错误的(至少在sitecore 7.5中是这样):模板ID与项目一起存储,因此删除模板时不必重置。OP和me存在模板ID与模板不对应的问题。在基于链接数据库删除模板时,应更新模板ID。