Итераторы
Итератор (от англ. iterator ― перечислитель) — интерфейс, предоставляющий доступ к элементам коллекции (массива или контейнера) и навигацию по ним.
Итератор объектов FastsiteCMS
\Cetera\Iterator\DbObject — абстрактный базовый класс для коллекций объектов в FastsiteCMS.
Итератор реализует интерфейсы \Countable, \Iterator, \ArrayAccess.
Методы \Cetera\Iterator\DbObject
Метод | Описание |
---|---|
count() | Количество объектов в коллекции |
getCountAll() | Количество объектов, исключая ограничение, заданное методом setItemCountPerPage |
getFirstIndex() | Порядковый номер первого элемента коллекции |
getLastIndex() | Порядковый номер последнего элемента коллекции |
getPageCount() | Количество получившихся страниц, если задано ограничение методом setItemCountPerPage |
setOffset( $offset ) | Исключить из коллекции первые $offset объектов |
setItemCountPerPage($itemCountPerPage) | Ограничить количество объектов в коллекции |
setCurrentPageNumber($pageNumber) | Выбрать страницу, если задано ограничение методом setItemCountPerPage |
orderBy($sort, $order = null, $add = true) | сортировать объекты по полю |
groupBy($groupBy, $add = true) | группировать объекты по полю |
where($where, $combination = 'AND') | Дополнительное условие для отбора объектов. |
filterInclude($fieldName, $condition, $combination = 'AND') | Позволяет включить в итератор объекты, используя связь определенную полями "группа материалов" или "ссылка на группу материалов". $fieldName - имя поля, $condition - SQL-условие для отбора в материалов в этом поле. $combination - способ добавления (см. where). Например, в материалах есть поле "colors" - группа материалов из справочника цветов. Нам нужно получить в итераторе только те материалы, в которых присутствуют либо красный, либо желный цвет. Это фильтруется следующим способом. |
filterExclude($fieldName, $condition, $combination = 'AND') | То же самое, что и filterInclude, только материалы, попадающие под условие исключаются из итератора. |
Методы \Cetera\Iterator\DbObject доступны в любом из нижеописанных итераторов.
Итератор материалов
\Cetera\Iterator\Material — предоставляет доступ к коллекции материалов.
Способы получения материалов
\Cetera\Catalog::getMaterials() — возвращает итератор с коллекцией материалов данного раздела
\Cetera\ObjectDefinition::getMaterials() — возвращает итератор с коллекцией материалов данного типа
Пример, получить материалы текущего раздела:
$list = \Cetera\Application::getInstance()->getCatalog()->getMaterials();
Пример, получить материалы опубликованные в 2016 году в хронологическом порядке:
$list = $catalog->getMaterials()->where('DATE_FORMAT(dat,"%Y") = 2016');
Пример, получить неопубликованные материалы:
// с помощью ->unpublished() добавляем в итератор неопубликованные материалы,
// а затем с помощью ->where('type=0') оставляем только неопубликованные материалы
$list = $catalog->getMaterials()->unpublished()->where('type=0');
Пример, получить все материалы типа «Материал» (стандартный тип материалов, имеющий id=1):
$list = \Cetera\ObjectDefinition::findById(1)->getMaterials();
Методы \Cetera\Iterator\Material
Метод | Описание |
---|---|
subFolders() | Включать материалы из подразделов. Включаются материалы только того же типа, что и в начальном разделе |
unpublished() | Включать также неопубликованные материалы |
Итератор разделов
\Cetera\Iterator\Catalog — предоставляет доступ к коллекции разделов.
Итератор разделов возвращают следующие методы:
\Cetera\Catalog::getChildren() — возвращает коллекцию дочерних разделов
\Cetera\Catalog::getPath() — возвращает коллекцию разделов от корня сайта
Пример, вывести все разделы верхнего уровня, исключая скрытые:
$menu = \Cetera\Application::getInstance()-getServer()->getChildren()->where('hidden<>1');
foreach ($menu as $catalog)
{
echo $catalog->name.'<br>';
}
Пример, вывести хлебные крошки к текущему разделу:
foreach (\Cetera\Application::getInstance()-getCatalog()->getPath() as $catalog)
{
if ($catalog->isRoot()) continue;// пропускаем раздел root
echo $catalog->name.' / ';
}
Методы \Cetera\Iterator\Catalog
Метод | Описание |
---|---|
has($catalog) | Имеется ли в коллекции указанный раздел |
Итератор пользователей
\Cetera\Iterator\User — предоставляет доступ к коллекции пользователей.
Итератор разделов возвращают следующие методы:
\Cetera\User::enum() — возвращает коллекцию пользователей FastsiteCMS
Пример, найти пользователей, родившихся 15 августа:
// предполагается, что в поле birth_date хранится дата рождения
$list = \Cetera\User::enum()->where('DATE_FORMAT(birth_date,"%d.%m") = "15.08"');