sitecore在树形视图中识别模板类型

时间:2016-02-04 10:03:13

标签: sitecore sitecore7

我有一个treelist,它允许编辑器定义一个链接列表,然后在子布局中输出。

根据所选页面在该树形图字段中使用的模板,将确定我需要写出的字段值。

我有一个通用的内容页面模板,其中应该引用自己的sitecore URL,但我有一个伪模板,其中包含字符串URL的字段和与外部站点相关的其他字段参数。

在这种情况下,我不希望sitecore URL我需要其字段值,以便连接到外部站点的链接以及令牌详细信息,并将其呈现给链接列表中的用户。

目前我有以下代码,但我需要包含一个条件,说明当前GUID项的模板是否为“SSO-Link”类型,然后不从linkmanager检索其sitecore URL而是引用一个名为URL的字段以及其他一些领域。

谢谢 - 下面的当前代码

Item[] selectedItems = treelistField.GetItems();

foreach (Item item in selectedItems)
{
    string itemName = item.Name;
    string displayName = item.DisplayName; 
    string url = LinkManager.GetItemUrl(item);
    string linkName = "Undefined";

    if (displayName != null)
    {
        linkName = displayName;
    }
    else if (itemName != null)
    {
        linkName = itemName;
    }

    if (linkName != "Undefined" && url != null)
    {
        htmlOutput.Text += "<a href=\"" + url + "\">";
        htmlOutput.Text += linkName;
        htmlOutput.Text += "</a>";
    }

}

2 个答案:

答案 0 :(得分:2)

据我所知,你需要在循环开始时添加这个简单的条件:

foreach (Item item in selectedItems)
{
    string url = null;
    if (item.TemplateName == "SSO-Link")
    {
        url = item["URL"];
        // other fields
    }
    else
    {
        url = LinkManager.GetItemUrl(item);
    }
    // your code

答案 1 :(得分:0)

我为模板和模板项使用扩展名。然后我调用一个常量类来获取我要比较的模板的ID。

public static class TemplateExtensions
{
    public static bool IsDerived([NotNull] this Template template, [NotNull] ID templateId)
    {
        return template.ID == templateId || template.GetBaseTemplates().Any(baseTemplate => IsDerived(baseTemplate, templateId));
    }

    public static bool IsDerived([NotNull] this TemplateItem template, [NotNull] ID templateId)
    {
        return template.ID == templateId || template.BaseTemplates.Any(baseTemplate => IsDerived(baseTemplate, templateId));
    }
}

常量

public static class Products
{
    public static TemplateID ProductSection = new TemplateID(new ID("{73400360-5935-40B6-88BC-350DC5B9BC90}"));
    public static TemplateID ProductDetail = new TemplateID(new ID("{9CD3D5ED-E579-4611-88E0-6B44C9D56F16}"));
}

使用

if (item.IsDerived(Products.ProductDetail))
{ if code here  }

希望这有帮助。