/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/grid/GridPanelView.php
127 строк
4 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\grid; use common\helpers\TextHelper; use common\widgets\GridPageSize; use Yii; use yii\bootstrap\ButtonDropdown; use yii\bootstrap\Html; use yii\helpers\ArrayHelper; use yii\widgets\LinkPager; /** * Базовый класс для работы с талицами в виде панельки * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2020 */ class GridPanelView extends GridView { /** * Кнопка добавить * @var array */ public $buttons = []; /** * Меню для панельки * @var array */ public $menu = []; /** * Массив значений заголовком для списка (в формате - массив из 3 элементов) * @var array */ public $names = []; /** * @inheritdoc */ public function run() { $pjax = $this->pjax; $this->pjax = false; $this->dataProvider->models; $pagination = $this->dataProvider->getPagination(); if (count($this->names) == 3) { $title = Yii::t('app', '{label} ({total})', [ 'label' => TextHelper::rusEnd($pagination->totalCount, $this->names, false), 'total' => $pagination->totalCount ]); } else { $title = Yii::t('app', 'List view ({total})', [ 'total' => $pagination->totalCount ]); } $title = Html::tag('h5', $title, ['class' => 'panel-title']); $elements = ''; $btn = null; // кнопки в правом верхнем углу foreach ($this->buttons as $button) { $rule = ArrayHelper::getValue($button, 'rule'); $dropdown = ArrayHelper::getValue($button, 'dropdown'); if ($dropdown) { // dropdown-menu-right // var_dump($button); $btn .= ButtonDropdown::widget($button); } else { if (!$rule or Yii::$app->user->can($rule)) { $btn .= Html::a( Html::icon($button['icon'], ['prefix' => 'icon-']) . ' ' . $button['label'], ArrayHelper::getValue($button, 'url', '#'), ArrayHelper::getValue($button, 'options') ); } } } if ($btn) { $elements = Html::tag('div', $btn, ['class' => 'heading-elements btn-group']); } $heading = Html::tag('div', $title . $elements, ['class' => 'panel-heading']); // Навигация по страницам if ($pagination->pageCount > 1) { $nav = Yii::t('app', 'Navigation'); $label = Html::tag('span', $nav . ':', ['class' => 'heading-text text-semibold']); $nav = $label . LinkPager::widget([ 'pagination' => $pagination ]); } else { $nav = ''; } // количество элементов на странице $size = GridPageSize::widget(['defaultPageSize' => $pagination->defaultPageSize]); $size = Html::tag('span', $size, ['class' => 'heading-form pull-right', 'style' => 'width: 100px;']); $size = $size . Html::tag('span', Yii::t('app', 'Per page') . ':', ['class' => 'heading-text text-semibold pull-right']); $elements = Html::tag('div', $nav . $size, ['class' => 'heading-elements']); $footer = Html::tag('div', $elements, ['class' => 'panel-footer']); $panel = Html::tag('div', $heading . parent::run() . $footer, ['class' => 'panel panel-default'] ); if ($pjax) { $this->registerAssets(); $this->beginPjax(); echo $panel; $this->endPjax(); } else { return $panel; } } }