Класс ElementCollection
Класс дает вам гибкий инструмент для работы с кэшированными списками элементов.
Класс ElementCollection и класс Collection из фреймворка laravel имеют одни методы, но логика, которую они выполняют в них, различна.
Внимание! Мнение о том, что класс ElementCollection и класс Collection из фреймворка laravel одинаковы, неверно.
Объект класса ElementCollection обрабатывает массивы id элементов без получения полных данных элементов. Объект создает объекты ElementItem только в методах получения списков элементов (например: take, page, random, first и т. Д.).
Логическая схема
Логическая схема инициализации нового объекта ProductCollection и получения первых 2-х активных продуктов, отсортированных по новизне.
Расширение
Вы можете добавить динамические методы и свойства в класс коллекции с помощью расширяющих конструкторов. Это функция по умолчанию для OctoberCMS.
пример
ElementCollection::extend(function($obCollection) {
$obCollection->addDynamicMethod('my_method', function($arElementIDList) use ($obCollection) {
return $obCollection->diff($arElementIDList);
});
});
Список методов
make ([$arElementIDList = []])
- arElementIDList - массив с ID элементов
Статический метод. Используется для создания нового объекта класса ElementCollection.
$obList = ElementCollection::make([1, 2, 10, 15]);
all()
Метод возвращает массив объектов ElementItem со всеми элементами коллекции.
applySorting($arElementIDList)
- $arElementIDList - список ID элементов для пересечения
Метод применяет функцию array_intersect() к массиву ID элементов $arElementIDList и коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
$arElementIDList = [10, 2,14,18];
//result: [10, 2]
$obList->applySorting($arElementIDList);
clear()
Метод очищает коллекцию.
copy()
Метод клонирует объект коллекции и возвращает новый объект коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
$obNewList = $obList->copy();
count()
Метод возвращает количество элементов в коллекции.
debug()
Метод позволяет установить break point при использовании xDebug в случае вызова методов сбора в шаблонах Twig.
$obList = ElementCollection::make([1, 2, 10, 15]);
$obList->skip(2)->debug()->take(2);
diff($arElementIDList)
- $arElementIDList - список ID элементов
Метод применяет функцию array_diff() к коллекции и массиву ID элементов $arElementIDList.
$obList = ElementCollection::make([1, 2, 10, 15]);
$arElementIDList = [2,14,18];
//result: [1,10,15]
$obList->diff($arElementIDList);
exclude($iElementID))
- $iElementID - ID элемента
Метод исключает элемент с ID = $ iElementID из коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
//result: [1,10,15]
$obList->exclude(2);
find($iElementID)
- $iElementID - ID элемента
Метод возвращает объект ElementItem с ID = $ iElementID.
$obList = ElementCollection::make([1, 2, 10, 15]);
//получим: объект класса ElementItem с ID = 10
return $obList->find(10);
first()
Метод возвращает первый объект ElementItem в коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
///получим: объект класса ElementItem с ID = 1
return $obList->first();
getIDList()
Метод возвращает массив ID элементов.
$obList = ElementCollection::make([1, 2, 10, 15]);
///result: [1, 2, 10, 15]
return $obList->getIDList();
getNearestNext($iElementID, $iCount = 1, $bCyclic = false)
Метод возвращает новую коллекцию со следующими ближайшими элементами.
$obList = ElementCollection::make([1, 2, 10, 15]);
//Коллекция содержит элементы: 10
$obNewList = $obList->getNearestNext(2);
//Коллекция содержит элементы: 2,10,15
$obNewList = $obList->getNearestNext(1, 3);
//Коллекция содержит элементы: 10,15
$obNewList = $obList->getNearestNext(2, 3);
//Коллекция содержит элементы: 10,15,1
$obNewList = $obList->getNearestNext(2, 3, true);
getNearestPrev($iElementID, $iCount = 1, $bCyclic = false)
Метод возвращает новую коллекцию с предыдущими ближайшими элементами.
$obList = ElementCollection::make([1, 2, 10, 15]);
//Коллекция содержит элементы: 1
$obNewList = $obList->getNearestPrev(2);
//Коллекция содержит элементы: 10,2,1
$obNewList = $obList->getNearestPrevt(15, 3);
//Коллекция содержит элементы: 2,1
$obNewList = $obList->getNearestPrev(10, 3);
//Коллекция содержит элементы: 2,1,15
$obNewList = $obList->getNearestPrev(10, 3, true);
has($iElementID)
- iElementID - ID элемента
Метод возвращает true, если коллекция содержит элемент с ID = $iElementID.
$obList = ElementCollection::make([1, 2, 10, 15]);
if($obList->has(10)) {
//сделать что-то
}
implode($sFieldName, $sDelimiter = ', ')
Метод возвращает массив значений для данного имени поля и применяет функцию implode к массиву.
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->implode('name', '-');
intersect($arElementIDList)
- $arElementIDList - список ID элементов для пересечения.
Метод применяет функцию array_intersect () к коллекции и массиву ID элементов $ arElementIDList.
$obList = ElementCollection::make([1, 2, 10, 15]);
$arElementIDList = [10, 2,14,18];
//result: [2,10]
$obList->intersect($arElementIDList);
isEmpty()
Метод возвращает истину, если список элементов пуст (isEmpty).
$obList = ElementCollection::make([1, 2, 10, 15]);
if($obList->isEmpty()) {
return false;
}
isNotEmpty()
Метод возвращает истину, если список элементов не пуст (isNotEmpty).
$obList = ElementCollection::make([1, 2, 10, 15]);
if($obList->isNotEmpty()()) {
//сделать что-то
}
last()
Метод возвращает последний объект ElementItem в коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
//result: объект класса ElementItem с ID = 15
return $obList->last();
merge($arElementIDList)
- $arElementIDList - список ID элементов для объединения.
Метод применяет функцию array_merge() к коллекции и массиву идентификаторов элементов $arElementIDList.
$obList = ElementCollection::make([1, 2, 10, 15]);
$arElementIDList = [2,14,18];
//result: [1,2,10,15,14,18]
$obList->merge($arElementIDList);
page($iPage, $iElementOnPage = 10)
- $iPage - номер текущей страницы.
- $iElementOnPage - количество элементов на странице.
Метод возвращает массив объектов ElementItem для страницы с номером = $ iPage.
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->page(2, 10);
pluck($sFieldName)
Метод возвращает массив значений для заданного имени поля.
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->pluck('name');
pop()
Метод возвращает первый объект ElementItem в коллекции и исключает его из коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->pop();
push($iElementID)
Метод добавляет элемент в конец коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
$obList->push(4);
random($iCount)
- $iCount - количество сгенерированных элементов.
Метод возвращает массив случайных объектов ElementItem.
$obList = ElementCollection::make([1, 2, 10, 15]);
$obList->random(2);
save($sKey)/saved($sKey)
- $sKey - ключ состояния коллекции для сохранения.
Метод сохраняет состояние коллекции, чтобы его можно было получить позже.
$obList = ElementCollection::make([1, 2, 10, 15]);
$obList->save('my_key');
...
$obSavedList = ElementCollection::make()->saved('my_key');
//result: $obSavedList == клон $obList
set($arElementIDList)
- arElementIDList - массив ID элементов.
Метод позволяет задать список ID элементов в коллекции.
$obList = ElementCollection::make()->set([1,2]);
skip($iCount)
- $iCount - количество элементов, которые нужно пропустить.
Метод используется в сочетании с методом take(), чтобы указать количество элементов, которые необходимо пропустить.
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->skip(2)->take(1);
take($iCount = 0)
- $iCount - количество элементов, которые нужно получить.
Метод возвращает массив объектов ElementItem. Количество элементов = $iCount, начиная с позиции, указанной в методе skip(). Если вы отправите $iCount = 0, вы получите все элементы, начиная с позиции, указанной в методе skip().
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->skip(2)->take(1);
shift()
Метод возвращает первый объект ElementItem в коллекции и исключает его из коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
return $obList->shift();
unshift($iElementID)
Метод добавляет элемент в начало коллекции.
$obList = ElementCollection::make([1, 2, 10, 15]);
$obList->unshift(4);