view-components / grids

MIT License
86 stars 17 forks source link

Css class in PaginationControl, Ajax requests on filter form and Custom templates for TemplateFinder #30

Closed developeruz closed 7 years ago

developeruz commented 7 years ago

$grid = new Grid( $provider, $columns );

генерирует ul без класса `pagination` как в вашем примере [тут](http://view-components.herokuapp.com/index.php/demo9_0). Как добавить класс или сделать пейджинацию как [тут](http://view-components.herokuapp.com/index.php/demo4_4)?

- Так же, не смотря на `setDestinationParentId('table_footer')` пейджинация не перемещается в футер таблицы, а выводится до нее.
```html
<nav data-role="control-container" data-control="pagination">
    <ul>
...
</ul>
</nav>
<table><thead>...</thead>
<tbody>...</tbody>
<tfoot> тут пусто! </tfoot>
</table>

Подскажите пожалуйста что я делаю не так?

Nayjest commented 7 years ago

Добрый день. PaginationControl для рендеринга ссылок использует ViewComponents\ViewComponents\Component\Control\View\PaginationControlView Этот компонент рендрит шаблон 'controls/pagination' и внутри для каждой ссылки рендерит 'controls/pagination/link'.

Если вам нужно заменить эти шаблоны в PaginationControlView для конкретного грида, это можно сделать примерно так:

$paginationControl->getView()
    ->setTemplateName('your_pagination_template')
    ->setTemplate('your_pagination_link_template');

Чтобы использовать php-шаблоны из какой-либо директории проекта, а не из vendors/view-components/resources/views, вам нужно ее зарегистрировать:

https://github.com/view-components/view-components/blob/master/doc/cookbook.md#3-using-custom-view-templates-and-overriding-core-templates

Это лучше сделать не в конкретном контроллере, а где-то в bootstrap / сервис-провайдере, так чтобы это работало для всего проекта.

Если вы хотите, чтобы ваши стили использовались для всего проекта в любой пейджинации, не прописывайте конкретные шаблоны компоненту, а просто подмените шаблоны глобально своими кастомизированными.

Nayjest commented 7 years ago

По поводу onchange элементов фильтра -- можно сделать так, чтобы при выборе значения из селекта, сразу сабмитилась форма,

$selectFilterControl->getView()->setDataItem('autoSubmit', true);

см. view-components\resources\views\select.php

в этом шаблоне есть след. логика:

// support of auto-submitting form on value change
if (isset($autoSubmit) && $autoSubmit === true) {
    if (array_key_exists('onchange', $inputAttributes)) {
        $inputAttributes['onchange'] .= ';this.form.submit();';
    } else {
        $inputAttributes['onchange'] = 'this.form.submit()';
    }
}
Nayjest commented 7 years ago
Так же, не смотря на setDestinationParentId('table_footer') пейджинация не перемещается в футер таблицы, а выводится до нее.

Дело в верстке, в tfoot нужно сначала запихнуть

<tr>
    <td colspan="сколько там колонок">
       /// и только сюда пейджинатор
    </td>
</tr>

Для таких штук есть компонент SolidRow

Вот пример пейджинации перемещенной в футер: https://github.com/view-components/grids/blob/master/tests/webapp/Controller.php#L190

Nayjest commented 7 years ago

А с каким фреймворком вы эти гриды используете?

developeruz commented 7 years ago

Спасибо, посмотрю. Использую для Laravel 5 и пока решила остановится на Nayjest/Grids. В целом вами проделана огромная работа! Лучшее из grid-ов под Laravel. Спасибо!

Nayjest commented 7 years ago

Спасибо за лестный отзыв =)