0

次の小さなスクリプトがあります

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
    using (new Sitecore.SecurityModel.SecurityDisabler())
    {
            foreach (Sitecore.Data.Items.Item child in item.Children)
            {
                foreach (ItemLink link in child.Links.GetAllLinks())
                {
                    Item itm = link.GetTargetItem();
                    if (itm != null) {
                        Response.Write(link.TargetPath + " (" + itm.Paths.IsMediaItem + ", " + itm.ID + ")" + "<br/>");
                    } else
                    {
                        Response.Write("<span style='color:red;font-weight:bold;'>NULL ITEM ("+ link.TargetPath + ")</span><br/>");
                    }
                }           

                if (item.Paths.ContentPath.Split("/".ToCharArray()).Length <= 10)
                    RecurseLinks(child, reset);
            }
    }

これは、指定された開始パスからすべてのアイテム (および子) をループし、アイテムで定義されているすべてのリンクを取得します。

リンクの一部は現在、リンク先のアイテム (メディアまたはコンテンツ アイテム) の ID ではなく、絶対パスで定義されているため、更新する必要があります。

上記のスクリプトでこれを達成するにはどうすればよいですか?

4

1 に答える 1

0

「リンクデータベースの再構築」アクションが機能するはずです。空の ID は、リンクが壊れている (リンクの更新時にターゲット アイテムがデータベースに見つからない) ことが原因である可能性があります。そのため、コントロール パネルまたはコード (「参考文献」を参照) を使用してリンクを再構築すると、LinkDatabaseHelperうまくいくはずです。

于 2012-09-21T21:45:04.753 に答える