Cистема управления сайтом

Переборка полей документа оператором foreach

Поддерживается в <dynamic>

<foreach type=content>

Оператор foreach с типом content используется для последовательного перебора полей документа, определенных в контент-шаблоне. Тип content может быть использован для автоматического построения web-формы на сайте, исходя из структуры документа. 

При использовании оператора foreach с типом content можно обращаться к следующим служебным полям:

_type – числовой код, описывающий тип поля:

1 — Текстовое поле
2 — Список значений (множественный выбор)
3 — Выпадающий список
4 — Переключатель галочка
5 — Поле заливки файлов
6 — Элемент ввода времени
7 — Расширенный редактор текста
8 — Кнопка действия
9 — Выбор из дерева вариантов
12 — Рамка
13 — Описание
16 — Ссылки на документы

_code – имя поля;

_description – описание поля;

_tab — закладка, в которой находится поле 

_sort  — Значение координаты поля по оси Y

_count – порядковый номер поля;

_total – общее количество полей в документе.

 

В <foreach type=content>  параметр where не работает. Для выборки используйте оператор <if>

Параметр sort="_sort" сортирует поля по их расположению в закладке (по высоте)

Пример

Построим форму по КШ документа с ID 437

 

<foreach name=s path="437" type=content sort="_sort" >
 
<if <foreach[s]._tab> == 'Данные'> {{ Выбираем поля из нужной закладки КШ }}
    
<if <foreach[s]._type> == '4'> {{Если это галочка}}
      
<div><input type="checkbox" name="<foreach[s]._code>" value="on"><foreach[s]._description></div>
    
</if>
    
<if <foreach[s]._type> == '13'> {{Вывод описания}}
      
<h3><foreach[s]._description></h3>
     
</if>
    
<if <foreach[s]._type> == '1'> {{Если это текстовое поле}}
      
<div><input type="text" name="<foreach[s]._code>"> <foreach[s]._description></div>
    
</if>
</if>
 
</foreach>

Пример

Вывод таблицы характиристик товара

<table class="shop">
<foreach name=s path="<#_type->_ctpl_id#>" type=content sort="_sort">
{{Выводим поля только из закладки Характиристики }}
<if <foreach[s]._tab> == "Характеристики"> 

 
{{Если это текстовое поле}}
 
<if <foreach[s]._type> == '1'> 
  
<if <#<foreach[s]._code>#>> {{если поле не пустое}}
    
<tr>
      
<td><foreach[s]._description> :</td>
      
<td><#<foreach[s]._code>#></td>
    
</tr>
   
</if>
 
</if>

  
{{Если это галочка}}
 
<if <foreach[s]._type> == '4'> 
   
<if <#<foreach[s]._code>#> == 'on'>
     
<tr><td><foreach[s]._description></td><td>Есть</td></tr>
    
</if>
 
</if>

{{Если это селект}}
<if <foreach[s]._type> == '3'> 
  
<if <#<foreach[s]._code>#>> {{если поле не пустое}}
    
<tr>
        
<td><foreach[s]._description></td>
         
<td><[<#<foreach[s]._code>#>]._name></td>
     
</tr>
   
</if>
</if>

{{Вывод описания заголовком}}
  
<if <foreach[s]._type> == '13'> 
   
<tr><td colspan=2><h3><foreach[s]._description></h3></td></tr>
  
</if>
</if>
</foreach>
</table>

На первый взгляд, может показаться, что код немного сложен, но тут все очень просто.

Допустим у нас есть поле price. Прямой доступ к полю осуществляется так

<#price#>

В случае вывода поля через <foreach> вместо кода поля price мы пишем <foreach[s]._code>. Получается

<#<foreach[s]._code>#>

Особого внимания заслуживает path. Текущему документу не присвоен Контен-шаблон напрямую, он берется из настроект Типа документа. Так как же получить ID Контент-шаблона  из настроек Типа документа?

<#_type#> выведет ID Типа документа.
Можно получить КШ, который задан в данном Типе документа так:
<#_type->_ctpl_id#>
или так:
<[<#_type#>]._ctpl_id>

 

Примечание

В некоторых случаях для корректной работы необходимо установить для контент-шаблона, по которому ведется перебор полей: ДШ  — собственный дизайн-шаблон и КШ — собственный контент-шаблон

Поиск по документации

© 2005 — 2024 DJEM Solutions, все права защищены. | Дизайн — Студия Fractalla