Расширение nterms/yii2-listjs-widget представляет собой виджет-обертку для скрипта list.js, который позволяет легко производить сортировку и фильтрацию данных в списках и таблицах на стороне пользователя, без дополнительных запросов к приложению.
Установка
Установка этого расширения ничем не отличается от большинства остальных. Просто выполняем команду:
php composer.phar require --prefer-dist "nterms/yii2-listjs-widget" "dev-master"
или добавляем строку в раздел require файла composer.json:
"nterms/yii2-listjs-widget": "dev-master"
Использование
Для подключения, необходимо «обернуть» данные виджетом:
<?php \nterms\listjs\ListJs::begin([ 'id' => 'days-list', 'search' => true, 'sort' => [ 'money' => [ 'label' => Yii::t('app', 'По премии'), // Сортировать по премии ], 'week-day' => [ 'label' => Yii::t('app', 'По дню'), // Сортировать по дню недели ], 'second-name' => [ 'label' => Yii::t('app', 'По фамилии'), // Сортировать по фамилии ], 'sex' => [ 'label' => Yii::t('app', 'По полу'), // Сортировать по полу ], ], 'clientOptions' => [ 'valueNames' => [ 'money', 'week-day', 'second-name', 'sex', ], ], ]); ?> <table class="table table-striped table-bordered"> <thead> <th>Премия</th> <th>День недели</th> <th>Фамилия</th> <th>Пол</th> </thead> <tbody class="list"> <tr> <td class="money">16574</td> <td class="week-day">Понедельник</td> <td class="second-name">Иванов</td> <td class="sex">М</td> </tr> <tr> <td class="money">65746</td> <td class="week-day">Вторник</td> <td class="second-name">Петров</td> <td class="sex">М</td> </tr> <tr> <td class="money">4564</td> <td class="week-day">Среда</td> <td class="second-name">Сидорова</td> <td class="sex">Ж</td> </tr> <tr> <td class="money">65482</td> <td class="week-day">Четверг</td> <td class="second-name">Васильева</td> <td class="sex">Ж</td> </tr> <tr> <td class="money">26845</td> <td class="week-day">Пятница</td> <td class="second-name">Смирнова</td> <td class="sex">Ж</td> </tr> <tr> <td class="money">78945</td> <td class="week-day">Суббота</td> <td class="second-name">Викторов</td> <td class="sex">М</td> </tr> <tr> <td class="money">35485</td> <td class="week-day">Воскресенье</td> <td class="second-name">Седых</td> <td class="sex">М</td> </tr> </tbody> </table> <?php \nterms\listjs\ListJs::end(); ?>
Настройки
Виджет настраивается следующими параметрами:
- options — html атрибуты для элемента контейнера;
- search — нужно ли отображать поле поиска;
- searchOptions — html атрибуты (пары ‘имя’ => ‘значение’) для элемента поиска input;
- sort — список пар ‘имя’ => ‘значение’ для отображения кнопок управления сортировкой. ‘Значение’ будет использовано в качестве html атрибута для кнопки. Параметр label будут использован как текст кнопки.
... 'sort' => [ 'name' => [ 'class' => 'sort', 'label' => Yii::t('app', 'Сортировать по имени'), ], ], ...
- clientOptions — параметры для list.js. Подробнее читайте здесь.
- content — html содержимое, будет вставлено перед таблице или списком. Если виджет используется в режиме захвата содержимого, этот параметр игнорируется;
- view — имя файла представления для рендера содержимого. Если виджет используется в режиме захвата содержимого или параметр content задан строкой, параметр view игнорируется;
- viewParams — параметры для рендера представления. Этот параметр используется только совместно с предыдущим.
Расширение на github.
Пример работы библиотеки list.js без yii 2.0
Премия | День недели | Фамилия | Пол |
---|---|---|---|
16574 | Понедельник | Иванов | М |
65746 | Вторник | Петров | М |
4564 | Среда | Сидорова | Ж |
65482 | Четверг | Васильева | Ж |
26845 | Пятница | Смирнова | Ж |
78945 | Суббота | Викторов | М |
35485 | Воскресенье | Седых | М |
Код примера:
[html]<style type="text/css">
button.sort,input.search {
margin-bottom:5px;
}
</style>
<div id="premial">
<input class="search" type="text" placeholder="Search" />
<button class="sort" data-sort="money">Сортировать по премии</button>
<button class="sort" data-sort="week-day">Сортировать по дню недели</button>
<button class="sort" data-sort="second-name">Сортировать по фамилии</button>
<button class="sort" data-sort="sex">Сортировать по полу</button>
<table class="table table-striped table-bordered">
<thead>
<th>Премия</th>
<th>День недели</th>
<th>Фамилия</th>
<th>Пол</th>
</thead>
<tbody class="list">
<tr>
<td class="money">16574</td>
<td class="week-day">Понедельник</td>
<td class="second-name">Иванов</td>
<td class="sex">М</td>
</tr>
<tr>
<td class="money">65746</td>
<td class="week-day">Вторник</td>
<td class="second-name">Петров</td>
<td class="sex">М</td>
</tr>
<tr>
<td class="money">4564</td>
<td class="week-day">Среда</td>
<td class="second-name">Сидорова</td>
<td class="sex">Ж</td>
</tr>
<tr>
<td class="money">65482</td>
<td class="week-day">Четверг</td>
<td class="second-name">Васильева</td>
<td class="sex">Ж</td>
</tr>
<tr>
<td class="money">26845</td>
<td class="week-day">Пятница</td>
<td class="second-name">Смирнова</td>
<td class="sex">Ж</td>
</tr>
<tr>
<td class="money">78945</td>
<td class="week-day">Суббота</td>
<td class="second-name">Викторов</td>
<td class="sex">М</td>
</tr>
<tr>
<td class="money">35485</td>
<td class="week-day">Воскресенье</td>
<td class="second-name">Седых</td>
<td class="sex">М</td>
</tr>
</tbody>
</table>
</div>
<script src="http://listjs.com/no-cdn/list.js"></script>
<script>var options = {valueNames: [ ‘money’,’week-day’,’second-name’,’sex’, ]};var premialList = new List(‘premial’, options);</script>[/html]