Шаблоны бритвы с SiteEdit UI 2012 onTridion 2011
Это касается шаблонов Razor с SDL Tridion 2011 SP1.
Чтобы включить SiteEdit UI 2012, мы вводим теги в CT.
Я хотел бы спросить, можно ли сделать tcdl:ComponentField
тег для поля, находящегося во вложенном встроенном поле компонента.
Здесь у нас есть Компонент с "footer_links" в качестве Многозначного Встроенного Поля, и снова каждый элемент "footer_links" имеет Многозначное Встроенное Поле "sub_nav" и хотим прочитать sub_nav.image, чтобы сделать его редактируемым.
Но когда я делаю следующее, включаю встроенное редактирование для содержимого, которое TBB выбрасывает после ошибки
Ошибка: ссылка на объект не установлена для экземпляра объекта. в Tridion.SiteEdit.Templating.EnableInlineEditingUI.FindItemFieldXPath(String[] parts, Int32 currentIndex, поля ItemFields)
У кого-нибудь есть идеи? Можем ли мы реализовать это? Если да, то что не так со следующим кодом?
Также можем ли мы прочитать Поля внутри ComponentLink для того же? Помощь будет оценена.
@for (int i=0; i<Fields.footer_links.Count; i++) {
/* "outer_image" is compLink and it workds fine */
@if(Fields.footer_links[i].outer_image != null) {
<tcdl:ComponentField name="Fields.footer_links[@i].outer_image">
<img src="@Fields.footer_links[i].outer_image.ID"/>
</tcdl:ComponentField>
}
/* "sub_nav" is Mutlivalued Embedded field and "image" is field inside it */
@for (int j=0; j<Fields.footer_links[i].sub_nav.Count; j++) {
<li>
@if(Fields.footer_links[i].sub_nav[j].image != null) {
<tcdl:ComponentField name="Fields.footer_links[@i].sub_nav[@j].image">
<img src="@Fields.footer_links[i].sub_nav[j].image.ID" />
</tcdl:ComponentField>
}
}
}
3 ответа
Не могли бы вы попробовать так
@foreach(dynamic com in Fields.footer_links) {
/* "outer_image" is compLink and it workds fine */
@if(com.outer_image != null) {
<tcdl:ComponentField name="com.Fields.outer_image">
<img src="@com.Fields.outer_image.ID"/>
</tcdl:ComponentField>
}
/* "sub_nav" is Mutlivalued Embedded field and "image" is field inside it */
@foreach (dynamic subCom in com.sub_nav) {
<li>
@if(subCom.image != null) {
<tcdl:ComponentField name="subCom.Fields.image">
<img src="@subCom.Fields.image.ID" />
</tcdl:ComponentField>
}
}
}
Потому что, кажется, строка @i ниже не преобразует значение, как в типе Int
<tcdl:ComponentField name="Fields.footer_links[@i].outer_image">
Я полагаю, у вас есть проблемы с генерацией тега tcdl?
Чтобы решить эту проблему, вы можете создать вспомогательный метод, который сгенерирует для вас тег:
public static MvcHtmlString SiteEditComponentField(this HtmlHelper helper, string id)
В этом методе расширения вы можете легко вернуть отформатированную строку с тегом и атрибутами.
Это долгое время, поэтому не уверен, что вы используете, но вы, конечно, можете использовать встроенную функцию бритвенного посредника для того же, что и DWT
String RenderComponentField(string fieldExpression, int fieldIndex)
String RenderComponentField(string fieldExpression, int fieldIndex, bool renderTcdlTagOnError)
String RenderComponentField(string fieldExpression, int fieldIndex, string value)
String RenderComponentField(string fieldExpression, int fieldIndex, string value, bool renderTcdlTagOnError)
String RenderComponentField(string fieldExpression, int fieldIndex, bool htmlEncodeResult, bool resolveHtmlAsRTFContent)
String RenderComponentField(string fieldExpression, int fieldIndex, bool htmlEncodeResult, bool resolveHtmlAsRTFContent, renderTcdlTagOnError)
Спасибо..