我有一个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>";
}
}
答案 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 }
希望这有帮助。