Как проверить, является ли поле во встроенной схеме пустым в Dreamweaver Template Building Block - PullRequest
4 голосов
/ 14 марта 2012

Я использую SDL Tridion 2011 SP1.Я создаю Dreamweaver TBB для компонента.В моем компоненте некоторые поля пусты.Но в моем компоненте TBB я хочу проверить, является ли поле пустым, и я не должен отображать его.Если поле не пустое, тогда я должен отобразить и отобразить значение. Я сталкиваюсь с проблемой при проверке содержимого подполя во встроенном поле.

В моем компоненте есть одно многозначное поле встроенной схемы с именем "EMBFIELD».Схема EMBFIELD имеет текстовое поле с именем «текст».Я хочу проверить, является ли текстовое поле пустым или нет.Если оно не пустое, я должен выполнить итерацию по полю, чтобы отобразить значения.

Мне нужно отобразить поле только с помощью RenderComponentField.Когда я пытался отрисовать, это показывает какую-то ошибку, что поле не существует.

Я думал, что это можно сделать с помощью блока If.

 <!-- TemplateBeginIf cond="Component.Fields.EMBFIELD" --> 
     <!-- TemplateBeginRepeat name="Component.Fields.EMBFIELD" -->
           <!-- TemplateBeginIf cond="Component.Fields.EMBFIELD.text" --> 
                 <div>@@RenderComponentField("Component.Fields.EMBFIELD.text",TemplateRepeatIndex)@@</div>
            <!-- TemplateEndIf -->      
     <!-- TemplateEndRepeat -->
 <!-- TemplateEndIf -->

Но выдает ошибку типа

Внутренняя ошибка: Компонент компонента контекста не имеет поля Component.Fields.conditionalText.text

Ответы [ 3 ]

6 голосов
/ 14 марта 2012

Вы должны иметь возможность использовать условные области Dreamweaver для проверки значения перед тем, как пытаться его отобразить.

Например:

<!-- TemplateBeginIf cond="Component.Fields.Field" -->
    @@Component.Fields.Field@@
<!-- TemplateEndIf -->
2 голосов
/ 14 марта 2012

Вы можете использовать функцию StringLength(object parameter), она вернет 0, если поле пустое или длина строки параметра не может быть определена. В общем, все должно выглядеть так:

<!-- TemplateBeginIf cond="StringLength(Component.Fields.Field) > 0" -->
 <b>Value is not empty<b>
 <p>@@Component.Fields.Field@@</p>
<!-- TemplateEndIf -->

Возможно, это ответ на ваш обновленный вопрос:

<!-- TemplateBeginIf cond="Component.Fields.EMBFIELD.text" --> 
     <!-- TemplateBeginRepeat name="Component.Fields.EMBFIELD" -->
            @@RenderComponentField("EMBFIELD[${TemplateRepeatIndex}].text", 0)@@       
     <!-- TemplateEndRepeat -->
 <!-- TemplateEndIf -->
0 голосов
/ 28 января 2016

У нас возникла та же проблема с той же ошибкой при доступе к полю встроенной схемы, и после того, как тонны взад и вперед с помощью компоновщика и отладки поняли, что ошибка в том, что НЕ ставится пробел между последним двойным qoute и -> в утверждении TemplateBeginIf.: Ошибки от посредника DWT:

<!-- TemplateBeginIf cond="EMBEDFIELD.internalLink || EMBEDFIELD.externalLink || EMBEDFIELD.label"-->

Нижеследующее не выдает ошибку:

<!-- TemplateBeginIf cond="EMBEDFIELD.internalLink || EMBEDFIELD.externalLink || EMBEDFIELD.label"<PUT_A_SPACE_HERE>-->

Это может быть любой TemplateBeginIf, окружающий оператор RenderComponentField, имеющий ошибку.Надеюсь, это кому-нибудь поможет

...