sg/datatablesbundle

Symfony Datatable Bundle For Doctrine2 Entities

v0.11 2016-05-28 12:59 UTC

README

SensioLabsInsight

knpbundles.com

Build Status

Latest Stable Version Total Downloads Latest Unstable Version License

Recent Changes

Select2 support / Multiple select filter (#287)

Remote example from the Docs
$this->columnBuilder
    ->add('fruitcolor.color', 'column', array(
        'title' => 'Fruchtfarbe',
        'filter' => array('select2', array(
            //'select_options' => array('' => 'Alle') + $this->getCollectionAsOptionsArray($fruitcolor, 'color', 'color'),
            'search_type' => 'eq',
            'multiple' => true,
            'placeholder' => null,
            'allow_clear' => true,
            'tags' => true,
            'language' => 'de',
            'url' => 'select2_color',
            'delay' => 250,
            'cache' => true
        )),
    ))
;
/**
 * @param Request $request
 *
 * @Route("/ajax/select2-color", name="select2_color")
 *
 * @return JsonResponse|Response
 */
public function select2Color(Request $request)
{
    if ($request->isXmlHttpRequest()) {
        $em = $this->getDoctrine()->getManager();
        $colors = $em->getRepository('AppBundle:Fruitcolor')->findAll();

        $result = array();

        /** @var \AppBundle\Entity\Fruitcolor $color */
        foreach ($colors as $color) {
            $result[$color->getId()] = $color->getColor();
        }

        return new JsonResponse($result);
    }

    return new Response('Bad request.', 400);
}

In-place editing callback (#372)

$this->columnBuilder
    ->add('name', 'column', array(
        'title' => 'Name',
        'editable' => true,
        'editable_if' => function($row) {
            return (
                $this->authorizationChecker->isGranted('ROLE_USER') &&
                $row['public'] == true
            );
        }
    ))

Pipelining to reduce Ajax calls

$this->ajax->set(array(
    'url' => $this->router->generate('chili_private_results'),
    'pipeline' => 6
));

Search result highlighting.

  1. Include the jQuery Highlight Plugin
  2. Configure your Datatables-Class features
$this->features->set(array(
    // ...
    'highlight' => true,
    'highlight_color' => 'red' // 'red' is the default value
));

Enlargement of thumbnails with Featherlight

see #401

The Bootstrap modal window does not work properly in responsive mode.

Load Featherlight with your base layout.

add_if Closure for all Columns and TopActions

$this->columnBuilder
    ->add('title', 'column', array(
        // ...
        'add_if' => function() {
            return ($this->authorizationChecker->isGranted('ROLE_ADMIN'));
        },
    ))
;
$this->topActions->set(array(
    // ...
    'add_if' => function() {
        return ($this->authorizationChecker->isGranted('ROLE_ADMIN'));
    },
    'actions' => array(
        // ...
    )
));

Render Actions

before

'actions' => array(
    array(
        'route' => 'post_edit',
        'route_parameters' => array(
            'id' => 'id'
        ),
        'role' => 'ROLE_ADMIN',
        'render_if' => function($row) {
            return ($row['title'] === 'Title 1');
        },
    ),
    // ...

after

'actions' => array(
    array(
        'route' => 'post_edit',
        'route_parameters' => array(
            'id' => 'id'
        ),
        'render_if' => function($row) {
            return (
                $this->authorizationChecker->isGranted('ROLE_USER') &&
                $row['user']['username'] == $this->getUser()->getUsername()
            );
        },
    ),
    // ...

Multiselect: render checkboxes only if conditions are True

$this->columnBuilder
    ->add('title', 'multiselect', array(
        // ...
        'render_checkbox_if' => function($row) {
            return ($row['public'] == true);
        },
    ))
;

Screenshots

Table with Bootstrap3 integration:

Screenshot

Documentation

Installation

Column types

In-place editing

How to use the ColumnBuilder

Setup Datatable Class

Filtering

To use a line formatter

Query callbacks

Extensions like Buttons or Responsive

Options of the generator

Reference configuration

Example

Demo Application

Integrating 3rd party stuff

Integrate Bootstrap3

Integrate the Translatable behavior extension for Doctrine 2

Integrate the LiipImagineBundle / ImageColumn, GalleryColumn and thumbnails

Limitations and Known Issues

Much like every other piece of software SgDatatablesBundle is not perfect and far from feature complete.

  • This bundle does not support multiple Ids.
  • Searching and filtering on a virtual column not yet implemented and disabled by default.
  • PostgreSql is currently not fully supported.

Reporting an issue or a feature request

Issues and feature requests are tracked in the Github issue tracker.

You must know that all the pull requests you are going to submit must be released under the MIT license.

Friendly License

This bundle is under the MIT license. See the complete license in the bundle:

Resources/meta/LICENSE

You are free to use, modify and distribute this software, as long as the copyright header is left intact (specifically the comment block which starts with /*)!