|
Оператор foreachОператор foreach предназначен для получения множества документов из базы, удовлетворяющих заданным пользователем условиям. Оператор является оператором цикла, причем при каждой итерации обращение внутри оператора происходит к текущему элементу выборки. С его помощью, например, можно построить карту сайта или вывести список последних новостей. Для вывода списка последних новостей необходимо перебрать все новости, опубликованные за какой-либо промежуток времени или просто какое-то количество последних новостей. При этом для каждой новости нужно вывести дату ее публикации, заголовок и текст анонса (см. пример в конце настоящего раздела). Этот оператор удобно использовать, когда необходимо работать с множеством документов. Синтаксис:
<foreach name=identifier path=expr [where=expr] [sort=expr] [limit=expr] [type=documents|folders|content]> djemscript </foreach> или
Для доступа к полям документа используется конструкция типа: <foreach[identifier].полe> К любому полю или результату foreach выборки можно применить какой-либо метод (см. п. Методы): <foreach[identifier].field.method> Помимо простого доступа к полям документа существует возможность изменять данные в обрабатываемом документе. Для этого используется следующая конструкция: <foreach[identifier].field=expr> Данный оператор изменяет значение поля field обрабатываемого документа на значение expr, где expr – корректное выражение DJEM-скрипта.
Параметр nameПараметр name – задает идентификатор, который будет использоваться для обращения к результатам работы оператора foreach. Обязательный параметр.
Параметр typeПараметр type – тип возвращаемых документов. Если параметр не указан, то объектами выборки становятся разделы и документы. Можно указать желаемый тип возвращаемого документа ключевыми словами: documents folders content Тип content используется для последовательного перебора полей документа, определенных в контент-шаблоне. Тип content может быть использован для автоматического построения web-формы на сайте, исходя из структуры документа. При использовании оператора foreach с типом content можно обращаться к следующим служебным полям: _type – числовой код, описывающий тип поля.(1 – текстовое поле, 2 – поле со списком множественного выбора, 3 – поле с выпадающим списком, 4 –переключатель («галочка»), 5 – поле с файлом); _code – имя поля; _description – описание поля; _count – порядковый номер поля; _total – общее количество полей в документе.
Пример: <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 – обязательный параметр (кроме случаев использования data). Для обозначения множества документов существует два шаблона подстановки: Шаблон «*» – обозначает все документы вниз по иерархии. Например, <foreach path="main.news.*"> выберет подразделы и документы из раздела «Новости», включая документы, находящиеся в разделах «Финансы» и «2005 год»; Шаблон «$» – обозначает все непосредственные «дети» раздела. Например, <foreach path=" main.news.$"> выберет все подразделы и документы, содержащиеся в разделе «Новости», но не будет выбирать документы, находящиеся в разделе «Финансы». Пример: Вывод всех новостей из раздела «2005 год».
<foreach name="last_news" path="main.news.finances.year2005.$"> <foreach[last_news].date>: <foreach[last_news].title> <p><foreach[last_news].anons></p> </foreach>
В случае если документы располагаются по различным путям, но должны выступать в виде одного единого множества документов, возможно указание нескольких путей, отделённых запятой. Пример: Вывод материалов из разделов статьи, новости и заметки с единой сортировкой по имени. <foreach name="alphabet" path="main.news.$, main.articles.$, main.notes.$" sort="_name"> <foreach[alphabet]._name><br /> </foreach> Параметр whereПараметр where – это логическое выражение, задающее условие отбора документов. Необязательный параметр. В качестве условия в where можно использовать:
in – означает, что значение поля входит в множество. Пример, выражение: card in “Visa,MasterCard,Maestro” – примет значение «истина», если в поле card содержится строка «Visa», «MasterCard» или «Maestro», и «ложь» во всех остальных случаях. has – означает, что поле выборки представляет собой множество, в котором должно присутствовать значение. Например, выражение – list has «Red» – примет значение «истина», если в значение поля list присутствует слово «Red», выделенное запятыми («White,Red,Green,Blue»). x - означает, что существует значение в множестве значений поля, которое входит в множество. Пример, выражение: card x “Visa,MasterCard,Maestro” – примет значение «истина», если в поле card содержится строка «Card,Visa,GoldCard», «MasterCard» и «ложь» если в поле нет строк "Visa", "MasterCard" или "Maestro". Пример: Вывод материалов, имеющих как минимум одно совпадающее ключевое слово. <if <#keywords#>>
Выражения (см. гл. Выражения); оператор like – выбор полей содержащих подстроку значение. Допускается использование исключающих конструкций: not in, not like. Можно использовать множественные критерии, комбинируя их с помощью логических операторов || (или) и && (и). Примечание: – Если в where требуется написать символ «\», то символ дублируется «\\». – Если в строку, заключенную в кавычки, необходимо включить символ кавычка (") – перед этим символом необходимо поставить знак (\). Например, " Компания \" DJEM Solutions \" представляет:" Пример: 1. Выбрать все документы, помеченные, как «видимые», т.е. содержащие в поле visible значение 1. Например, этот прием можно использовать для отображения только отмеченных новостей на сайте: where="visible=1" 2. Множественные критерии. Требуется выбрать документы, в которых source равен "djem" и время публикации больше времени установленного в поле с именем «fromtime» в документе с идентификатором 22: where="source='djem' and _publish_time gt <[22].fromtime>" Примечание: – gt – логический оператор «больше чем». 3. Пример работы с множествами. Выбор документов, имеющих заданный тип, т.е. поле type содержит “cat”, “dog” или “fish”: where="type in 'cat,dog,fish'" 4. Поле theme может содержать: news,sport,business. Требуется выбрать все новости спорта (т.е. у которых в поле theme есть news и sport): where="theme has 'news' && theme has 'sport'" 5. Выбрать все документы, в которых встречается подстрока port: where="theme like 'port'" будет верным, если поле theme содержит "sport" или “port Arthur”.
|