Оператор foreachПоддерживается в <dynamic> Оператор foreach предназначен для получения множества документов из базы,
удовлетворяющих заданным пользователем условиям. Оператор является оператором
цикла, причем при каждой итерации обращение внутри оператора происходит к
текущему элементу выборки. С его помощью, например, можно построить карту сайта
или вывести список последних новостей. Для вывода списка последних новостей
необходимо перебрать все новости, опубликованные Этот оператор удобно использовать, когда необходимо работать с множеством документов. Синтаксис: <foreach name=identifier [path=expr] [where=expr]
[sort=expr] [groupby=expr] [limit=expr]
[type=expr|content]> djemscript </foreach> или <foreach name=identifier data=expr [limit=expr]>
djemscript </foreach> Для доступа к полям документа используется конструкция типа: <foreach[identifier].полe> К любому полю или результату foreach выборки можно применить <foreach[identifier].field.method> Помимо простого доступа к полям документа существует возможность изменять данные в обрабатываемом документе. Для этого используется следующая конструкция: <foreach[identifier].field=expr> Данный оператор изменяет значение поля field обрабатываемого документа на значение expr, где expr – корректное выражение DJEM-скрипта.
Параметр nameПараметр name – задает идентификатор, который будет использоваться для обращения к результатам работы оператора foreach. Обязательный параметр.
Параметр typeПараметр type – тип возвращаемых документов. Если параметр не указан, то
объектами выборки становятся разделы и документы. Можно указать желаемый тип
возвращаемого документа ключевыми словами: Документ это или папка определяется по наличию поддокументов, указанных в свойствах Типа документа. Пример: <foreach name=x path="main.news.$" type=folders>
вернет все подразделы, которые находятся в разделе main.news. Например, можно использовать, если в main.news находятся не только подразделы, но и документы. В данном случае документы нас не интересуют. Если нас интересуют только документы (новости), то можно выбрать документы из раздела news и всех подразделов, пропуская сами разделы: <foreach name=x path="main.news.*" type=documents> Параметр pathПараметр path определяет путь в иерархии документов DJEM. Путь строится из кодовых имен разделов (поле _code – см. п. Поля документа) разделенных точкой. В пути справа налево перечисляются кодовые имена родительских разделов. Код главного раздела (раздела верхнего уровня) всегда main. Например, в системе есть раздел «Новости» (с кодом news), в нем есть раздел «Финансы» (finances), где, в свою очередь, находится раздел «2005 год» (year2005), содержащий новости. Путь для раздела «2005 год» будет следующим: «main.news.finances.year2005». Вместо пути можно использовать число – идентификатор раздела или документа. Если path не указан, то подразумевается путь текущего документа. Аналог записи path="<#_id#>.$" Для обозначения множества документов существует два шаблона подстановки: Шаблон «*» – обозначает все документы вниз по иерархии. Например, <foreach path=«main.news.*»> выберет подразделы и документы из раздела «Новости», включая документы, находящиеся в разделах «Финансы» и «2005 год»; Шаблон «$» – обозначает все непосредственные «дети» раздела. Например, <foreach path=" main.news.$"> выберет все подразделы и документы, содержащиеся в разделе «Новости», но не будет выбирать документы, находящиеся в разделе «Финансы». Пример: Вывод всех новостей из раздела «2005 год».
В случае если документы располагаются по различным путям, но должны выступать в виде одного единого множества документов, возможно указание нескольких путей, отделённых запятой. Пример: Вывод материалов из разделов статьи, новости и заметки с единой сортировкой
по имени. <foreach name="alphabet" path="main.news.$, main.articles.$,
main.notes.$" sort="_name">
<foreach[alphabet]._name> </foreach> Параметр whereПараметр where – это логическое выражение, задающее условие отбора документов. Необязательный параметр. В качестве условия в where можно использовать:
in – означает, что значение поля входит в множество. Пример,
выражение: card in “Visa,MasterCard,Maestro” – примет значение «истина», если в
поле card содержится строка «Visa», «MasterCard» или «Maestro», и «ложь» во
всех остальных случаях. Допустим, в поле <#cards#> содержатся ID
документов, которые необходимо вывести в данной выборке. <foreach name=x path="main.rus.*" where="_id in
'<#cards#>'">
has – означает, что поле выборки представляет собой множество, в котором должно присутствовать значение. Например, выражение – list has «Red» – примет значение «истина», если в значение поля list присутствует слово «Red», выделенное запятыми («White,Red,Green,Blue»). x означает, что существует значение в множестве значений поля, которое входит в множество. Пример, выражение: card x “Visa,MasterCard,Maestro” – примет значение «истина», если в поле card содержится строка «Card,Visa,GoldCard», «MasterCard» и «ложь» если в поле нет строк Visa, MasterCard или Maestro. Пример: Вывод материалов по типу документа. <foreach name=x path="main.rus.*" where="_type = 184"> <foreach[x]._name> </foreach> Пример: Вывод материалов, имеющих как минимум одно совпадающее ключевое слово. <if <#keywords#>>
<foreach name=x path="main.rus.journals.*" where="keywords x '<#keywords#>'" type=documents> <foreach[x]._name> </foreach> </if>
Выражения (см. гл. Выражения); оператор like – выбор полей содержащих подстроку значение. Допускается использование исключающих конструкций: not in, not like. Можно использовать множественные критерии, комбинируя их с помощью логических операторов || (или) и && (и). Примечание: – Если в where требуется написать символ «\», то символ дублируется «\\». – Если в строку, заключенную в кавычки, необходимо включить символ кавычка (») – перед этим символом необходимо поставить знак (\). Например, " Компания \" DJEM Solutions \" представляет:" Пример: 1. Выбрать все документы, помеченные, как «видимые», т.е. содержащие в поле visible значение 1. Например, этот прием можно использовать для отображения только отмеченных новостей на сайте: where="visible=1"
2. Множественные критерии. Требуется выбрать документы, в которых source равен «djem» и время публикации больше времени установленного в поле с именем «fromtime» в документе с идентификатором 22: <foreach where="source='djem' && _publish_time gt
<[22].fromtime>"
Примечание: – gt – логический оператор «больше чем». 3. Пример работы с множествами. Выбор документов, имеющих заданный тип, т.е. поле type содержит “cat”, “dog” или “fish”: <foreach where="type in 'cat,dog,fish'"
4. Поле theme может содержать: news,sport,business. Требуется выбрать все новости спорта (т.е. у которых в поле theme есть news и sport): <foreach where="theme has 'news' && theme has
'sport'"
5. Выбрать все документы, в которых встречается подстрока port: <foreach where="theme like 'port'"> будет верным, если поле
theme содержит "sport" или “port Arthur”.
Параметр sortПараметр sort указывает, как сортировать документы в выборке (сортировка по значению). Необязательный параметр. Представляет собой список имен полей документов разделенных запятой, по которым ведется сортировка. Для сортировки в обратном порядке используется перед именем поля знак «–» (минус). Обычно сортировка ведется по строковому значению поля. При сортировке по строковому значению, значение «10» окажется меньшим, чем «9», так как символ «1» меньше, чем символ «9». Для сортировки по числовому значению перед именем поля поставьте знак «#». Пример: Отсортировать все новости типу (по полю type), а среди документов одного типа (где поле type совпадает) по убыванию даты (date): sort="type,-date"
Отсортировать новости по убыванию числового значения sort="-#count"
Сортировка в случайном порядке возможна при указании значения sort="_random". При использовании dynamic порядок будет изменяться при каждой загрузке документа, без dynamic при публикации документа. Параметр limitПараметр limit – ограничивает количество выбираемых документов. Необязательный параметр, используется: с одним параметром – ограничивается общее количество документов с начала выборки – «не более чем, заданное количество документов»; с двумя параметрами – первый параметр определяет, с какого документа начинать выводить (нумерация от нуля), второй – сколько документов выводить. Удобно использовать для организации постраничного вывода информации. Пример: Использование limit с одним параметром: limit=«5» означает, что выборка захватит первые пять документов. Использование limit с двумя параметрами: limit=«5,2» означает выборку двух документов, начиная с пятого: Если на выборку «2 3 5 18 29 23 33 31» наложить limit=«5,2», то в результате будет возвращено 23 33. Выбрать 10 последних опубликованных документов из раздела news: <foreach name=x path="main.news.*" sort="-_publish_time"
limit=10>
Параметр groupbyПараметр groupby позволяет группировать результаты выборки для избежания
повторяющихся значений <foreach name=x path="*" groupby="_name" sort="_name"> — будут
выбраны все уникальные имена документов
<foreach name=x path="*" where="_link1=1" groupby="*"> — будут выбраны документы, с группировкой по всем полям, участвующим в выборке
Параметр dataПараметр data используется для выборки по разделенным запятыми спискам
значений. Обычно foreach с этим параметром используется для обработки значений
Пример: <foreach name=x data="1,3,5">
<foreach[x]._value> </foreach> Результат: 1
3 5
Дополнительные поляПомимо полей выбранных документов, оператор foreach возвращает дополнительный набор служебных полей. Доступ к ним можно получить следующим образом: <foreach[identifier].полe> Дополнительные поля: _count – счетчик выборки. Каждый новый документ увеличивает счетчик на 1. Начальное значение счетчика равно 1. _total – общее количество документов в выборке. Поле _total доступно и ПОСЛЕ завершения цикла. Пример: Для каждого выбранного документа выводится его номер в выборке и общее количество выбранных документов. В конце выводится общество количество: <foreach name=x path="main.news.*" limit="3">
<foreach[x]._count> - <foreach[x]._total> </foreach> Всего документов: <foreach[x]._total> Результат: 1 – 3
2 – 3 3 – 3 Всего документов: 3
Значения этих полей можно использовать в различных случаях, например: Для вывода нумерованных списков; Для подсчета среднего значения (используется _total); Для различной обработки первого и последнего элемента – _count
первого элемента равняется единице, а для последнего – _count
равняется _total. Таким образом, можно открыть |
![]() |
Поиск по документации![]() |