/** * Constructor * * @param \Skosh\Console\Application */ public function __construct(Application $app) { $this->time = new DateTime(); $this->title = $app->getSetting('title'); if ($app->getSetting('url')) { $this->url = rtrim($app->getSetting('url'), '/'); } }
/** * Generate pagination * * @param Content $content * @return void */ private function paginate(Content $content) { $maxPerPage = $this->app->getSetting('max_per_page', 15); $posts = $this->getPosts($content); $slices = []; $slice = []; $totalItems = 0; foreach ($posts as $k => $v) { if (count($slice) === $maxPerPage) { $slices[] = $slice; $slice = []; } $slice[$k] = $v; $totalItems++; } $slices[] = $slice; // Base URL $pageRoot = '/' . dirname($content->target); // Pagination data $pagination = ['total_posts' => count($posts), 'total_pages' => count($slices), 'next' => null, 'prev' => null]; $pageNumber = 0; foreach ($slices as $slice) { $pageNumber++; // Set page target filename $target = $pageNumber > 1 ? "{$pageRoot}/page/{$pageNumber}" : $content->target; // Previous page is index if ($pageNumber === 2) { $pagination['prev'] = $this->getUrl($pageRoot); } else { if ($pageNumber > 1) { $pagination['prev'] = $this->getUrl("{$pageRoot}/page/" . ($pageNumber - 1)); } else { $pagination['prev'] = null; } } // Set next page if ($pageNumber + 1 <= $pagination['total_pages']) { $pagination['next'] = $this->getUrl("{$pageRoot}/page/" . ($pageNumber + 1)); } else { $pagination['next'] = null; } // Set current page $pagination['page'] = $pageNumber; // Set page URL $content->url = $pageNumber > 1 ? $this->getUrl(dirname($target)) : $content->url; // Render content $html = $this->twig->render($content->id, ['page' => $content, 'posts' => $slice, 'pagination' => $pagination, 'parent' => $this->getParent($content->parentId)]); // Fire event Event::fire('paginate.before', [$this, &$target, &$html]); // Save Content $this->savePage($target, $html); } }