示例#1
0
 /**
  * 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'), '/');
     }
 }
示例#2
0
 /**
  * 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);
     }
 }