96 lines
2.7 KiB
PHP
96 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Lib\Helpers;
|
|
|
|
use Illuminate\Container\Container;
|
|
use Illuminate\Pagination\LengthAwarePaginator;
|
|
use Illuminate\Pagination\Paginator;
|
|
use Illuminate\Support\Collection;
|
|
|
|
class CollectionHelper
|
|
{
|
|
/**
|
|
* Paginate a collection.
|
|
*/
|
|
public static function paginate(Collection $results, int $pageSize): LengthAwarePaginator
|
|
{
|
|
$page = Paginator::resolveCurrentPage('page');
|
|
|
|
return self::paginateManually($results, $pageSize, $page);
|
|
}
|
|
|
|
/**
|
|
* Paginate a collection.
|
|
*/
|
|
public static function paginateManually(
|
|
Collection $results,
|
|
int $pageSize,
|
|
int $page = 1
|
|
): LengthAwarePaginator {
|
|
$total = $results->count();
|
|
|
|
return self::paginator($results->forPage($page, $pageSize), $total, $pageSize, $page, [
|
|
'path' => Paginator::resolveCurrentPath(),
|
|
'pageName' => 'page',
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Create a new length-aware paginator instance.
|
|
*/
|
|
protected static function paginator(
|
|
Collection $items,
|
|
int $total,
|
|
int $perPage,
|
|
int $currentPage,
|
|
array $options
|
|
): LengthAwarePaginator {
|
|
return Container::getInstance()->makeWith(LengthAwarePaginator::class, [
|
|
'items' => $items,
|
|
'total' => $total,
|
|
'perPage' => $perPage,
|
|
'currentPage' => $currentPage,
|
|
'options' => $options,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get an array of views for each recipe models given.
|
|
*/
|
|
public static function getViewsFromPaginateModels(
|
|
LengthAwarePaginator $models,
|
|
string $path,
|
|
string $key
|
|
): array {
|
|
return $models->through(function ($model) use ($path, $key) {
|
|
return view($path, [$key => $model])->render();
|
|
})->toArray();
|
|
}
|
|
|
|
/**
|
|
* Get an array of views for each item in collection given.
|
|
*/
|
|
public static function getViewsFromCollection(Collection $collection, string $path, string $key): array
|
|
{
|
|
return $collection->map(function ($item) use ($path, $key) {
|
|
return view($path, [$key => $item])->render();
|
|
})->toArray();
|
|
}
|
|
|
|
public static function mapSlidesToFields(array $fields): array
|
|
{
|
|
return collect($fields)
|
|
->filter(fn ($field, $key) => str_starts_with($key, 'slider_image_'))
|
|
->filter(fn ($field) => ! empty($field['value']))
|
|
->sortKeys()
|
|
->map(fn ($field) => [
|
|
'image' => [
|
|
'path' => $field['value'],
|
|
'title' => $field['title'] ?? '',
|
|
'alt' => $field['alt'] ?? '',
|
|
],
|
|
])
|
|
->values()
|
|
->toArray();
|
|
}
|
|
}
|