Класс 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);