2017 © Pedro Peláez
 

library datatables-backend

Library to handle AJAX calls for datatables.net

image

intracto/datatables-backend

Library to handle AJAX calls for datatables.net

  • Tuesday, November 29, 2016
  • by tvlooy
  • Repository
  • 28 Watchers
  • 4 Stars
  • 808 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 3 Forks
  • 0 Open issues
  • 3 Versions
  • 10 % Grown

The README.md

Intracto DataTables library

Handle AJAX requests for Datatables.net., (*1)

Install

composer require intracto/datatables-backend

or

"intracto/datatables-backend" : "dev-master"

Columns

Container class to hold Column objects. This is used to get the field for sorting., (*2)

Column

Hold data about a column, can be used for the frontend to render <th> and let DataTables known which fields are sortable and searchable (via javascript)., (*3)

DataProvider

Get the data to show in the datatable. Requires Parameters, DataTablesRepository, ColumnTransformer., (*4)

Parameters

Container class to hold data from the datatables AJAX request., (*5)

DataTablesRepositoryInterface

Defines query functions needed to fetch the data., (*6)

DataTablesRepositoryTrait

An implementation of DataTablesRepositoryInterface with general queries. Only available for Doctrine ODM for now., (*7)

ColumnTransformerInterface

Transform data fetched from the Repository to format needed for the datatables. The order of the fields is important here., (*8)


Example

Columns

class AddressListColumns extends Columns
{
    public function __construct()
    {
        parent::__construct(
            array(
                // In order of the tables headers
                new Column('city', 'city', true, true),
                new Column('zip', 'zip', false, false),
                new Column('street', 'street', false, false),
                new Column('actions', 'actions', false, false),
            )
        );
    }
}

Transformer

class AddressListColumnTransformer implements ColumnTransformerInterface
{
    /**
     * @var EngineInterface
     */
    private $renderEngine;

    /**
     * AddressListColumnTransformer constructor
     *
     * @param EngineInterface $renderEngine
     */
    public function __construct(EngineInterface $renderEngine)
    {
        $this->renderEngine = $renderEngine;
    }

    /**
     * @param array $data
     *
     * @return array
     */
    public function transform(array $data)
    {
        $columns = array();

        foreach ($data as $address) {
            /**
             * @var Address $address
             */
            $columns[] = array(
                $address->getCity()
                $address->getZip()
                $address->getStreet()
                $this->renderEngine->render('Address/_list.actions.html.twig', array('address' => $address)),
            );
        }

        return $columns;
    }
}

Repository

class AddressRepository extends DocumentRepository implements DataTablesRepositoryInterface
{
    use DataTablesRepositoryTrait;
}

Controller

public function listAction()
{
    $columns = new AddressListColumns();

    return array(
        'columns' => $columns,
    );
}

public function ajaxListAction(Request $request)
{
    $parameters = Parameters::fromParameterBag($request->query, new AddressListColumns());

    $data = $this->dataTablesDataProvider->getData(
        $parameters,
        $addressRepository,
        $addressListColumnTransformer
    );

    return new JsonResponse($data);
}

Frontend

External JS

Include ajax-datatables.js after loading the official datatables.js plug-in, (*9)

Twig html

Make sure the table has the "ajaxdatatable" class Loop all the columns in the table head, (*10)

<table class="ajaxdatatable">
    <thead>
        <tr>
            {% for column in columns %}
                <th>{{ ("translatable.prefix." ~ column.name)|trans }}</th>
            {% endfor %}
        </tr>
    </thead>
</table>

Default sorting needed? Add the class default_sort and asc|desc to the <th> to the correct column, (*11)

<th {% if column.name == 'email' %} class="default_sort desc"{% endif %}>
    ...
</th>

Twig JS

On the twig page where the ajax datatable must be loaded, place following script block, (*12)

The filters are optional, here you can pass searchable/filterable fields, (*13)



The Versions

29/11 2016

dev-master

9999999-dev https://github.com/Intracto/datatables-backend

Library to handle AJAX calls for datatables.net

  Sources   Download

MIT

The Requires

  • php >=5.4

 

ajax datatables symfony

29/11 2016

v0.1.1

0.1.1.0 https://github.com/Intracto/datatables-backend

Library to handle AJAX calls for datatables.net

  Sources   Download

MIT

The Requires

  • php >=5.4

 

ajax datatables symfony

11/08 2016

v0.1.0

0.1.0.0 https://github.com/Intracto/datatables-backend

Library to handle AJAX calls for datatables.net

  Sources   Download

MIT

ajax datatables symfony