1

寻找一个快速且易于查询我的整个站点核心数据库(master、web 或 pub)并确定某个项目的模板不再存在的位置。

我正在尝试序列化我的整个树,并且我发现有很多项目的模板已被删除,并且希望获得它们的列表而不会太头疼。

查看这些项目时,它说模板:模板不再存在,这是呈现此的代码

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]"));
        }

谢谢

4

3 回答 3

1

我认为基于已删除模板的项目不再继承自(标准)基本模板。在 quickinfo 你应该看到他们的模板 ID 类似于 {000-0000-0000...}

您可以尝试根据此 ID 查找所有项目。

于 2013-07-17T20:13:36.433 回答
0

想到的两个选项:

  1. 检查断开的链接报告
  2. 您可以在内容编辑器中右键单击左侧“栏杆”并选择“断开的链接”以显示所有链接断开的项目。
于 2013-07-18T01:07:58.940 回答
0

使用流行的 powershell 模块,尝试

Get-ChildItem -Path "master:\sitecore" -Recurse | ForEach-Object {if (!$_.Template){        write-host $_.ItemPath    }}

对我来说,这会返回很多我无法在内容编辑器中打开的项目。

如果它只是几个项目并且您想手动完成所有操作,您可以使用 dbbrowser:

<yoursiteurl>/sitecore/admin/dbbrowser.aspx.

如果您想通过脚本删除这些项目(当有太多时)

$myItemArray = New-Object System.Collections.ArrayList
Get-ChildItem -Path "master:\sitecore\content" -Recurse | ForEach-Object {if (!$_.Template){
$myItemArray.Add($_)
}}
#Show list of Items with invalid template
$myItemArray | Format-Table -Auto -Property Templateid, ItemPath
#Show count of affected items
$myItemArray.Count
$myItemArray #| Remove-Item -recurse

要实际删除这些项目,请删除最后一行中的“#”,风险自负。该脚本需要相当长的时间才能运行,并且您可能需要更改路径以防您在内容之外有损坏的项目。

于 2018-01-10T12:54:18.623 回答