2015-09-24 2 views
0

Давайте, говорит, если Sitecore Пункт item имеет поле Created by с типом Link Types:DroptreeSitecore: Эффективный способ отображения названия пункта, который сохраняется в поле с типами Тип ссылки: Droptree

Я хочу напечатать название пункта, который сохраняется в поле Created by. Следующая строка <sc:Text Field="Created by" runat="server"/> напечатает ItemId. Каков эффективный способ отображения имени этого элемента.

Я знаю, что я могу получить элемент из базы данных, а затем распечатать его имя как:

<asp:Label runat="server" ID="lblItemName"></asp:Label> 

В CodeBehind:

if (!Page.IsPostBack) 
      { 
       Item currentItem = Sitecore.Context.Item; 

       Item relatedItem = Sitecore.Context.Database.GetItem(currentItem["Created by"]); 

       lblItemName.Text = relatedItem.Name; 
      } 

ответ

0

Я не думаю, что это возможно, чтобы сделать имя элемента с <sc:Text />, как это a Поле визуализации.

Так что вы должны сделать, как вы делали:

var currentItem = Sitecore.Context.Item; 

// Alternative way to get the linked item 
var createdByField = (ReferenceField) currentItem.Fields["Created by"]; 
var createdByItem = createdByField.TargetItem; 
var createdByItemName = createdByItem.Name; 

lblItemName.Text = createdByItemName; 

Если вы хотите вынести поле от связанного элемента (createdByItem) вместо текущего элемента контекста, вы можете сделать это следующим образом :

<sc:Text runat="server" Field="Headline" ID="scRelatedItem" /> 

и Int код позади вы установите пункт свойство элемента, который вы хотите прочитать Заголовок поле от:

scRelatedItem.Item = createdByItem; 

Действовать таким образом будет также сделать поле для редактирования редакторами через страницу Редактор (так называемый опыт редактор Sitecore 8).

1

Вы должны были бы передать значение элемента в к вашему тегу <sc:Text/> или он будет использовать контекстный элемент.

<sc:Text Field="Created by" Item="<%# RelatedItem %>" runat="server"/> 

Установите значение RelatedItem в коде позади и вызвать DataBind(); в конце вашего метода Page_Load()