| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | 
							- <?php
 
- namespace Grav\Plugin;
 
- use Composer\Autoload\ClassLoader;
 
- use Grav\Common\Page\Collection;
 
- use Grav\Common\Page\Interfaces\PageInterface;
 
- use Grav\Common\Plugin;
 
- use Grav\Plugin\Pagination\PaginationHelper;
 
- use Grav\Plugin\Pagination\PaginationPage;
 
- use RocketTheme\Toolbox\Event\Event;
 
- use Twig\TwigFunction;
 
- class PaginationPlugin extends Plugin
 
- {
 
-     /**
 
-      * @var PaginationHelper
 
-      */
 
-     protected $pagination;
 
-     /**
 
-      * @return array
 
-      */
 
-     public static function getSubscribedEvents()
 
-     {
 
-         return [
 
-             'onPluginsInitialized' => [
 
-                 ['autoload', 100001],
 
-                 ['onPluginsInitialized', 0]
 
-             ]
 
-         ];
 
-     }
 
-     /**
 
-      * [onPluginsInitialized:100000] Composer autoload.
 
-      *
 
-      * @return ClassLoader
 
-      */
 
-     public function autoload()
 
-     {
 
-         return require __DIR__ . '/vendor/autoload.php';
 
-     }
 
-     /**
 
-      * Initialize configuration
 
-      */
 
-     public function onPluginsInitialized()
 
-     {
 
-         if ($this->isAdmin()) {
 
-             $this->active = false;
 
-             return;
 
-         }
 
-         class_alias(PaginationHelper::class, 'Grav\\Plugin\\PaginationHelper');
 
-         class_alias(PaginationPage::class, 'Grav\\Plugin\\PaginationPage');
 
-         $this->enable([
 
-             'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0],
 
-             'onPageInitialized' => ['onPageInitialized', 0],
 
-             'onTwigExtensions' => ['onTwigExtensions', 0]
 
-         ]);
 
-     }
 
-     /**
 
-      * Add current directory to twig lookup paths.
 
-      */
 
-     public function onTwigTemplatePaths()
 
-     {
 
-         $this->grav['twig']->twig_paths[] = __DIR__ . '/templates';
 
-     }
 
-     /**
 
-      * Add Twig Extensions
 
-      */
 
-     public function onTwigExtensions()
 
-     {
 
-          // Add Twig functions
 
-         $this->grav['twig']->twig()->addFunction(
 
-             new TwigFunction('paginate', [$this, 'paginateTwigFunction'])
 
-         );
 
-     }
 
-     /**
 
-      * Enable pagination if page has params.pagination = true.
 
-      */
 
-     public function onPageInitialized()
 
-     {
 
-         /** @var PageInterface $page */
 
-         $page = $this->grav['page'];
 
-         if ($page && ($page->value('header.content.pagination') || $page->value('header.pagination'))) {
 
-             $this->enable([
 
-                 'onCollectionProcessed' => ['onCollectionProcessed', 0],
 
-                 'onTwigSiteVariables' => ['onTwigSiteVariables', 0]
 
-             ]);
 
-             $template = $this->grav['uri']->param('tmpl');
 
-             if ($template) {
 
-                 $page->template($template);
 
-             }
 
-         }
 
-     }
 
-     /**
 
-      * Create pagination object for the page.
 
-      *
 
-      * @param Event $event
 
-      */
 
-     public function onCollectionProcessed(Event $event)
 
-     {
 
-         /** @var Collection $collection */
 
-         $collection = $event['collection'];
 
-         $params = $collection->params();
 
-         // Only add pagination if it has been enabled for the collection.
 
-         if (empty($params['pagination'])) {
 
-             return;
 
-         }
 
-         if (!empty($params['limit']) && $collection->count() > $params['limit']) {
 
-             $this->pagination = new PaginationHelper($collection);
 
-             $collection->setParams(['pagination' => $this->pagination]);
 
-         }
 
-     }
 
-     /**
 
-      * Set needed variables to display pagination.
 
-      */
 
-     public function onTwigSiteVariables()
 
-     {
 
-         if ($this->config->get('plugins.pagination.built_in_css')) {
 
-             $this->grav['assets']->add('plugin://pagination/css/pagination.css');
 
-         }
 
-     }
 
-     /**
 
-      * pagination
 
-      *
 
-      * @param Collection $collection
 
-      * @param int $limit
 
-      * @param array $ignore_param_array      url parameters to be ignored in page links
 
-      */
 
-     public function paginateCollection($collection, $limit, $ignore_param_array = [])
 
-     {
 
-         $collection->setParams(['pagination' => 'true']);
 
-         $collection->setParams(['limit' => $limit]);
 
-         $collection->setParams(['ignore_params' => $ignore_param_array]);
 
-         if ($collection->count() > $limit) {
 
-             $this->pagination = new PaginationHelper($collection);
 
-             $collection->setParams(['pagination' => $this->pagination]);
 
-             $uri = $this->grav['uri'];
 
-             $start = ($uri->currentPage() - 1) * $limit;
 
-             if ($limit && $collection->count() > $limit) {
 
-                 $collection->slice($start, $limit);
 
-             }
 
-         }
 
-     }
 
-     public function paginateTwigFunction($collection, $limit, $ignore_url_param_array = [])
 
-     {
 
-         $this->paginateCollection($collection, $limit, $ignore_url_param_array);
 
-     }
 
- }
 
 
  |