zikula / sortable-columns
SortableColumns is a zikula component to help manage data table column headings that can be clicked to sort the data
Installs: 26 464
Dependents: 7
Suggesters: 0
Security: 0
Stars: 0
Watchers: 5
Forks: 0
Open Issues: 0
Requires
- php: >=7.2.0
- doctrine/common: 2.*
- symfony/http-foundation: 4.*|5.*
- symfony/routing: 4.*|5.*
Requires (Dev)
- phpunit/phpunit: ^8.4
- symfony/phpunit-bridge: ^4.4|^5.0
README
SortableColumns has been included into the core repository.
SortableColumns
SortableColumns is a Zikula component to help manage data table column headings that can be clicked to sort the data.
The collection is an Doctrine\Common\Collections\ArrayCollection
of Zikula\Component\SortableColumns\Column
objects.
Use SortableColumns::generateSortableColumns
to create an array of attributes (url, css class) indexed by column name
which can be used in the generation of table headings/links.
Controller:
use Zikula\Component\SortableColumns\SortableColumns; // in controller method $orderBy = $request->query->get('orderby', 'pageid'); $currentSortDirection = $request->query->get('sdir', Column::DIRECTION_DESCENDING); $sortableColumns = new SortableColumns($this->get('router'), 'zikulapagesmodule_admin_index', 'orderby', 'sdir'); $sortableColumns->addColumn(new Column('pageid')); // first added is automatically the default $sortableColumns->addColumn(new Column('title')); $sortableColumns->addColumn(new Column('cr_date')); $sortableColumns->setOrderBy($sortableColumns->getColumn($orderBy), $currentSortDirection); $sortableColumns->setAdditionalUrlParameters(array( 'language' => isset($filterData['language']) ? $filterData['language'] : null, )); $templateParameters['sort'] = $sortableColumns->generateSortableColumns();
Twig template:
<tr> <th><a class='{{ sort.pageid.class }}' href='{{ sort.pageid.url }}'>{% trans %}ID{% endtrans %}</a></th> <th><a class='{{ sort.title.class }}' href='{{ sort.title.url }}'>{% trans %}Title{% endtrans %}</a></th> <th><a class='{{ sort.cr_date.class }}' href='{{ sort.cr_date.url }}'>{% trans %}Created{% endtrans %}</a></th> </tr>
Additional shortcut methods are available:
$sortableColumns->addColumns()
$sortableColumns->setOrderByFromRequest()
$sortableColumns->addColumns([new Column('pageid'), new Column('title'), new Column('cr_date')]); $sortableColumns->setOrderByFromRequest($request);
If needed, you can obtain the values of the orderByFields (e.g. for a DB query) using:
$sortableColumns->getSortColumn()->getName()
$sortableColumns->getSortDirection()