Skip to content

franmomu/silex-pagerfanta-provider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 

Repository files navigation

PagerfantaServiceProvider

Provider to use Pagerfanta with Silex

This Provider is based on WhiteOctoberPagerfantaBundle and includes:

  • Twig function to render pagerfantas with views and options.
  • Way to use easily views.

Install

You have to add to your composer.json file:

"franmomu/silex-pagerfanta-provider": "1.0.*@dev"

or if you use Symfony2.2 components:

"franmomu/silex-pagerfanta-provider": "dev-master"

Registering

$app->register(new FranMoreno\Silex\Provider\PagerfantaServiceProvider());

Parameters

This are the default parameters:

$app['pagerfanta.view.options'] = array(
    'routeName'        => null,
    'routeParams'      => array(),
    'pageParameter'    => '[page]',
    'proximity'        => 3,
    'next_message'     => '»',
    'previous_message' => '«',
    'default_view'     => 'default'
);

Rendering pagination

The Twig Extension provides this function:

{{ pagerfanta(my_pager, view_name, view_options) }}

The routes are generated automatically for the current route using the variable "page" to propagate the page number. By default, the bundle uses the DefaultView with the default name.

{{ pagerfanta(my_pager) }}

If you want to use a custom template, add another argument

<div class="pagerfanta">
    {{ pagerfanta(my_pager, 'my_template') }}
</div>

With Options

{{ pagerfanta(my_pager, 'default', { 'proximity': 2}) }}

See the Pagerfanta documentation for the list of the parameters.

Adding a custom template

You can use the CSS classes provided with DefaultView, but if you want to create a Custom View, you have to implement Pagerfanta\View\ViewInterface, then add the View to the Factory:

$app['pagerfanta.view_factory'] = $app->share($app->extend('pagerfanta.view_factory', function($viewFactory, $app) {
    $customView = new \Foo\Bar\View\CustomView();
    $viewFactory->add(array(
        'my_view' => $customView
    ));

    return $viewFactory;
}));

And if you want set as default view:

$app['pagerfanta.view.options'] = array(
    'default_view'  => 'my_view'
);

Use in controllers

use Pagerfanta\Pagerfanta;
use Pagerfanta\Adapter\ArrayAdapter;

$app->get('/index', function (Request $request) use ($app) {

    $results = $app['some.service']->getResults();

    $adapter = new ArrayAdapter($results);
    $pagerfanta = new Pagerfanta($adapter);
    $pagerfanta->setMaxPerPage(10);
    $pagerfanta->setCurrentPage($request->query->get('page', 1));

    return $app['twig']->render('index.html', array(
        'my_pager' => $pagerfanta
    ));
})