sereja3578/yii2-freeze-column

Package

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Language:JavaScript

Type:yii2-extension

1.0 2021-01-27 18:03 UTC

This package is auto-updated.

Last update: 2021-12-27 22:37:31 UTC


README

Для базового использования нужно

Где-нибудь в коде GridView виджета, во время запуска, добавить код:

if ($this->freezed && $this->freezeOptions) {
        $freezeOptions = Json::htmlEncode(array_merge($this->freezeOptions, ['container' => "#{$id}-container"]));

        FreezeAsset::register($view);

        $view->registerJs("jQuery('#$id-container').freezeGridView('init', $freezeOptions);");
}

Например в виджете GridView унаследованном от kartik, который вы используете в своем проекте.

В этот виджет нужно так же добавить нужные свойства

/**
 * Включение закрепления колонок
 * @var bool
 */
public $freezed = true;

/**
 * Параметры закрепления (перечислить колонки, которые надо закрепить)
 * @var array
 *
 * ```php
 * $this->freezeOptions = [
 *   'freezeLeftColumns' => ['id', 'name', ...]
 *   'freezeRightColumns' => ['id', 'name', ...]
 * ]
 * ```
 */
public $freezeOptions = [];

Работать же с колонками и формировать их массив мы будем в SearchModel, а именно в базовой модели, так чтобы методы были доступны везде или в trait, так удобнее. Значит добавляем туда нужные методы:

/**
 * Возвращает настройки для закрепления
 * @return array
 */
public function getFreezeOptions() : array
{
    return [
        'freezeLeftColumns' => $this->getFreezeLeftColumns(),
        'freezeRightColumns' => $this->getFreezeRightColumns()
    ];
}

Методы getFreezeLeftColumns и getFreezeRightColumns не привожу в документации, так как нет смысла, они у каждого свои. Но суть такая - эти методы должны возвращать названия колонок, которые нужно закрепить. Как и где их сохранять это уже решать каждому по своему. У меня сделано в базе данных, кто-то может в куках или сессии.

Использовать вы это сможете так:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => $searchModel->getGridColumns(),
    'freezeOptions' => $searchModel->getFreezeOptions(),
])?>