/** * {@inheritdoc} */ public function register(Application $app) { if (!isset($app['twig'])) { $app->register(new TwigServiceProvider()); } if (!isset($app['url_generator'])) { $app->register(new UrlGeneratorServiceProvider()); } if (!isset($app['translator'])) { $app->register(new TranslationServiceProvider()); } // add twig extension. $app['twig'] = $app->share($app->extend('twig', function ($twig, $app) { $processor = new Processor($app['url_generator'], $app['translator']); $twig->addExtension(new PaginationExtension($processor)); return $twig; })); $app['knp_paginator.path'] = __DIR__ . '/../../../../knplabs/knp-paginator-bundle'; $app['knp_paginator.limits'] = [2, 5, 10, 25, 50, 100, 200, 500]; $app['knp_paginator.options'] = []; // Options fixer $app['knp_paginator.options_fixer'] = $app->share(function ($app) { $app['knp_paginator.options'] = array_replace_recursive(['default_options' => ['sort_field_name' => 'sort', 'sort_direction_name' => 'direction', 'filter_field_name' => 'filterField', 'filter_value_name' => 'filterValue', 'page_name' => 'page', 'distinct' => true], 'template' => ['pagination' => '@knp_paginator_bundle/sliding.html.twig', 'filtration' => '@knp_paginator_bundle/filtration.html.twig', 'sortable' => '@knp_paginator_bundle/sortable_link.html.twig'], 'page_range' => 5], $app['knp_paginator.options']); }); // Paginator creator $app['knp_paginator'] = $app->share(function ($app) { $views = rtrim($app['knp_paginator.path'], '/') . '/Resources/views/Pagination'; /** @var \Twig_Loader_Filesystem $loader */ $loader = $app['twig.loader']; $loader->addPath($views, 'knp_paginator_bundle'); // Fix options $app['knp_paginator.options_fixer']; // Create paginator $paginator = new Paginator($app['dispatcher']); $options = ['pageParameterName' => $app['knp_paginator.options']['default_options']['page_name'], 'sortFieldParameterName' => $app['knp_paginator.options']['default_options']['sort_field_name'], 'sortDirectionParameterName' => $app['knp_paginator.options']['default_options']['sort_direction_name'], 'filterFieldParameterName' => $app['knp_paginator.options']['default_options']['filter_field_name'], 'filterValueParameterName' => $app['knp_paginator.options']['default_options']['filter_value_name'], 'distinct' => $app['knp_paginator.options']['default_options']['distinct']]; $paginator->setDefaultPaginatorOptions($options); return $paginator; }); // Event subscribers.= $app['knp_paginator.pagination_subscriber'] = $app->share(function ($app) { return new PaginationSubscriber(); }); $app['knp_paginator.sortable_subscriber'] = $app->share(function ($app) { return new SortableSubscriber(); }); $app['knp_paginator.filtration_subscriber'] = $app->share(function ($app) { return new FiltrationSubscriber(); }); $app['knp_paginator.sliding_pagination_subscriber'] = $app->share(function ($app) { // Fix options $app['knp_paginator.options_fixer']; return new SlidingPaginationSubscriber(['defaultPaginationTemplate' => $app['knp_paginator.options']['template']['pagination'], 'defaultSortableTemplate' => $app['knp_paginator.options']['template']['sortable'], 'defaultFiltrationTemplate' => $app['knp_paginator.options']['template']['filtration'], 'defaultPageRange' => $app['knp_paginator.options']['page_range']]); }); }
/** * {@inheritdoc} */ public function register(Container $app) { $app['paginator.default_options'] = ['page_name' => 'page', 'page_range' => 5, 'sort_field_name' => 'sort', 'sort_direction_name' => 'direction', 'filter_field_name' => 'filterField', 'filter_value_name' => 'filterValue', 'distinct' => true, 'template' => ['pagination' => 'sliding.html.twig', 'sortable' => 'sortable_link.html.twig', 'filtration' => 'filtration.html.twig']]; $app['paginator.helper.processor'] = function ($app) { return new Processor($app['url_generator'], $app['translator']); }; $app['paginator'] = function ($app) { $reflClass = new \ReflectionClass('Knp\\Bundle\\PaginatorBundle\\KnpPaginatorBundle'); $path = sprintf('%s/Resources/views/Pagination', dirname($reflClass->getFileName())); $app['twig.loader']->addLoader(new \Twig_Loader_Filesystem($path)); $paginator = new Paginator($app['dispatcher']); $paginator->setDefaultPaginatorOptions(['pageParameterName' => $app['paginator.default_options']['page_name'], 'sortFieldParameterName' => $app['paginator.default_options']['sort_field_name'], 'sortDirectionParameterName' => $app['paginator.default_options']['sort_direction_name'], 'filterFieldParameterName' => $app['paginator.default_options']['filter_field_name'], 'filterValueParameterName' => $app['paginator.default_options']['filter_value_name'], 'distinct' => $app['paginator.default_options']['distinct']]); return $paginator; }; $app['paginator.subscriber.paginate'] = function () { return new PaginationSubscriber(); }; $app['paginator.subscriber.sortable'] = function () { return new SortableSubscriber(); }; $app['paginator.subscriber.filtration'] = function () { return new FiltrationSubscriber(); }; $app['paginator.subscriber.sliding_pagination'] = function ($app) { $templateOptions = $app['paginator.default_options']['template']; $options = ['defaultPaginationTemplate' => $templateOptions['pagination'], 'defaultSortableTemplate' => $templateOptions['sortable'], 'defaultFiltrationTemplate' => $templateOptions['filtration'], 'defaultPageRange' => $app['paginator.default_options']['page_range']]; return new SlidingPaginationSubscriber($options); }; $app->extend('twig', function (\Twig_Environment $twig, $app) { $twig->addExtension(new PaginationExtension($app['paginator.helper.processor'])); return $twig; }); }
/** * @test */ function shouldCustomizeParameterNames() { $dispatcher = new EventDispatcher(); $dispatcher->addSubscriber(new MockPaginationSubscriber()); // pagination view $dispatcher->addSubscriber(new ArraySubscriber()); $p = new Paginator($dispatcher); $items = array('first', 'second'); $view = $p->paginate($items, 1, 10); // test default names first $this->assertEquals('page', $view->getPaginatorOption('pageParameterName')); $this->assertEquals('sort', $view->getPaginatorOption('sortFieldParameterName')); $this->assertEquals('direction', $view->getPaginatorOption('sortDirectionParameterName')); $this->assertTrue($view->getPaginatorOption('distinct')); $this->assertNull($view->getPaginatorOption('sortFieldWhitelist')); // now customize $options = array('pageParameterName' => 'p', 'sortFieldParameterName' => 's', 'sortDirectionParameterName' => 'd', 'distinct' => false, 'sortFieldWhitelist' => array('a.f', 'a.d')); $view = $p->paginate($items, 1, 10, $options); $this->assertEquals('p', $view->getPaginatorOption('pageParameterName')); $this->assertEquals('s', $view->getPaginatorOption('sortFieldParameterName')); $this->assertEquals('d', $view->getPaginatorOption('sortDirectionParameterName')); $this->assertFalse($view->getPaginatorOption('distinct')); $this->assertEquals(array('a.f', 'a.d'), $view->getPaginatorOption('sortFieldWhitelist')); // change default paginator options $p->setDefaultPaginatorOptions(array('pageParameterName' => 'pg', 'sortFieldParameterName' => 'srt', 'sortDirectionParameterName' => 'dir')); $view = $p->paginate($items, 1, 10); $this->assertEquals('pg', $view->getPaginatorOption('pageParameterName')); $this->assertEquals('srt', $view->getPaginatorOption('sortFieldParameterName')); $this->assertEquals('dir', $view->getPaginatorOption('sortDirectionParameterName')); $this->assertTrue($view->getPaginatorOption('distinct')); }
public function makeProducts($page) { $products = []; $perpage = isset($this->config['pagination']['perpage']) ? $this->config['pagination']['perpage'] : 10; for ($i = 0; $i < 20; $i++) { $products[] = $this->makeProduct(); } $this->paginator->setDefaultPaginatorOptions(['route' => $this->app->router->getCurrentRoute()->getName(), 'query' => $this->app->router->getCurrentRoute()->getParams() + $this->app->request->get()]); $paginator = $this->paginator->paginate($products, $page, $perpage); $app = $this->app; $paginator->renderer = function ($data) use($app) { return $app->view->fetch("pagination.html.twig", $data); }; return $paginator; }
public function register(Container $container) { $container['knp_paginator.default_options'] = array('defaultPaginationOptions' => array('pageParameterName' => 'page', 'sortFieldParameterName' => 'sort', 'sortDirectionParameterName' => 'direction', 'filterFieldParameterName' => 'filterField', 'filterValueParameterName' => 'filterValue', 'distinct' => true), 'subscriberOptions' => array('defaultPaginationTemplate' => '@SaxulumPaginationProvider/sliding.html.twig', 'defaultSortableTemplate' => '@SaxulumPaginationProvider/sortable_link.html.twig', 'defaultFiltrationTemplate' => '@SaxulumPaginationProvider/filtration.html.twig', 'defaultPageRange' => 5)); $container['knp_paginator.options.initializer'] = $container->protect(function () use($container) { static $initialized = false; if ($initialized) { return; } if (!isset($container['knp_paginator.options'])) { $container['knp_paginator.options'] = array(); } $container['knp_paginator.options'] = array_replace_recursive($container['knp_paginator.default_options'], $container['knp_paginator.options']); }); $container['knp_paginator'] = function () use($container) { $container['knp_paginator.options.initializer'](); $paginator = new Paginator($container['dispatcher']); $paginator->setDefaultPaginatorOptions($container['knp_paginator.options']['defaultPaginationOptions']); return $paginator; }; $container['knp_paginator.processor'] = function () use($container) { return new Processor($container['url_generator'], $container['translator']); }; $container['dispatcher'] = $container->extend('dispatcher', function (EventDispatcherInterface $dispatcher) use($container) { $container['knp_paginator.options.initializer'](); $slidingPaginationSubscriber = new SlidingPaginationSubscriber($container['knp_paginator.options']['subscriberOptions']); $dispatcher->addListener('kernel.request', array($slidingPaginationSubscriber, 'onKernelRequest')); $dispatcher->addSubscriber(new PaginationSubscriber()); $dispatcher->addSubscriber(new SortableSubscriber()); $dispatcher->addSubscriber($slidingPaginationSubscriber); return $dispatcher; }); $container['twig'] = $container->extend('twig', function (\Twig_Environment $twig) use($container) { $twig->addExtension(new PaginationExtension($container['knp_paginator.processor'])); return $twig; }); $container['twig.loader.filesystem'] = $container->extend('twig.loader.filesystem', function (\Twig_Loader_Filesystem $twigLoaderFilesystem) { $twigLoaderFilesystem->addPath(__DIR__ . '/../Resources/views', 'SaxulumPaginationProvider'); return $twigLoaderFilesystem; }); }
/** * Set parameters required by route generator for used route * * @param array $params Route parameters * * @return self */ public function setRouteParams(array $params = array()) { $this->paginator->setDefaultPaginatorOptions(array('route_params' => $params)); return $this; }