<p class="paginateContainer marginTop">
    <a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => 1])) ?>">«</a>
    <a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => max(1, $currentPage - 1)])) ?>">‹</a>
    <?php
    $maxPages = 7;
    if ($pages <= $maxPages) {
        $start = 1;
        $end = $pages;
    } else {
        $maxAdditionalPages = $maxPages - 1;
        $maxAdditionalPagesHalf = ceil($maxAdditionalPages / 2);
        $start = $currentPage - $maxAdditionalPagesHalf > 1 ?
            ($currentPage - $maxAdditionalPagesHalf < $pages - $maxAdditionalPages ?
                $currentPage - $maxAdditionalPagesHalf :
                $pages - $maxAdditionalPages) :
            1;
        $end = $start + $maxAdditionalPages < $pages ?
            $start + $maxAdditionalPages :
            $pages;
    }
    ?>
    <?php for ($i = $start; $i <= $end; $i++): ?>
        <?php if ($currentPage == $i): ?>
            <span class="selected"><?= $i ?></span>
        <?php else: ?>
            <a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => $i])) ?>"><?= $i ?></a>
        <?php endif; ?>
    <?php endfor; ?>
    <a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => min($pages, $currentPage + 1)])) ?>">›</a>
    <a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => $pages])) ?>">»</a>
</p>